Krolyxon
Commit 3672abc

Branches

Tags

Refs →

orion-rfsrcnfcnfc.cpp

117 lines · 1.9 KB · C++

1#include "nfc.h"
2
3#include <Arduino.h>
4#include <Wire.h>
5#include <Adafruit_PN532.h>
6
7#include "ui/display.h"
8#include "../utils/buttons.h"
9#include "../config.h"
10
11#define PN532_IRQ -1
12#define PN532_RESET -1
13
14//Adafruit_PN532 nfc(Wire);
15Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET, &Wire);
16
17void drawWaiting()
18{
19 u8g2.clearBuffer();
20
21 u8g2.drawStr(10, 20, "PN532 Ready");
22 u8g2.drawStr(10, 40, "Tap NFC Card");
23
24 u8g2.sendBuffer();
25}
26
27void showUID(uint8_t *uid, uint8_t uidLength)
28{
29 char line[64];
30
31 String uidStr = "";
32
33 for (int i = 0; i < uidLength; i++)
34 {
35 if (uid[i] < 0x10)
36 uidStr += "0";
37
38 uidStr += String(uid[i], HEX);
39 uidStr += " ";
40 }
41
42 uidStr.toUpperCase();
43
44 u8g2.clearBuffer();
45
46 u8g2.drawStr(0, 15, "Card Detected");
47
48 snprintf(line, sizeof(line), "UID:");
49
50 u8g2.drawStr(0, 35, line);
51
52 u8g2.drawStr(0, 50, uidStr.c_str());
53
54 u8g2.sendBuffer();
55}
56
57void pn532_init()
58{
59 delay(100);
60 nfc.begin();
61 delay(100);
62
63 uint32_t versiondata = nfc.getFirmwareVersion();
64
65 if (!versiondata)
66 {
67 Serial.println("PN532 not found");
68
69 u8g2.clearBuffer();
70 u8g2.drawStr(0, 20, "PN532 NOT FOUND");
71 u8g2.sendBuffer();
72
73 delay(2000);
74 return;
75 }
76
77 Serial.println("PN532 initialized");
78
79 nfc.SAMConfig();
80}
81
82void pn532_scan_loop()
83{
84 pn532_init();
85
86 drawWaiting();
87
88 while (1)
89 {
90 uint8_t success;
91 uint8_t uid[7];
92 uint8_t uidLength;
93
94 Serial.println("Scanning...");
95 success = nfc.readPassiveTargetID(
96 PN532_MIFARE_ISO14443A,
97 uid,
98 &uidLength,
99 50
100 );
101
102 if (success)
103 {
104 Serial.println("Card detected");
105
106 showUID(uid, uidLength);
107
108 delay(1000);
109 }
110
111 if (btnBack())
112 {
113 delay(150);
114 break;
115 }
116 }
117}