Krolyxon
Commit ab699e4

Branches

Tags

Refs →

orion-rfsrc-arduinonfcnfc.cpp

104 lines · 1.9 KB · C++

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