#include #include // библиотека для работы с RFID/NFC #include // пин прерывания #define PN532_IRQ 9 // создаём объект для работы со сканером и передаём ему два параметра // первый — номер пина прерывания // вторым — число 100 // от Adafruit был программный сброс шилда // в cканере RFID/NFC 13,56 МГц (Troyka-модуль) этот пин не используется // поэтому передаём цифру, большая чем любой пин Arduino Adafruit_PN532 nfc(PN532_IRQ, 100); // пины к которым подключены светодиоды Troyka_led #define LED_FIRST A0 #define LED_SECOND A1 #define LED_THIRD A2 // Массивы в которые необходимо записать ID карт: uint8_t uidFirstCard[] = {0x04, 0x40, 0xA9, 0xDA, 0xA3, 0x40, 0x80}; uint8_t uidSecondCard[] = {0x04, 0xAB, 0xB4, 0xDA, 0xA3, 0x40, 0x80}; uint8_t uidThirdCard[] = {0x04, 0x71, 0xC1, 0xDA, 0xA3, 0x40, 0x81}; // функция которая сравнивает два переданных ID // при совпадении возвращает значение true // и значение false если ID разные boolean comparisonOfUid(uint8_t uidRead[8], uint8_t uidComp[8], uint8_t uidLen) { for (uint8_t i = 0; i < uidLen; i++) { if (uidRead[i] != uidComp[i]) { return false; } if (i == (uidLen)-0x01) { return true; } } } // функция переключающая светодиод, получает входные параметры: // номер светодиода led void toggleLed(int led) { if (digitalRead(led) == LOW) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } void setup(void) { // инициализация пинов Led pinMode(LED_FIRST, OUTPUT); pinMode(LED_SECOND, OUTPUT); pinMode(LED_THIRD, OUTPUT); // инициализация Serial - порта Serial.begin(9600); // инициализация RFID/NFC сканера nfc.begin(); int versiondata = nfc.getFirmwareVersion(); if (!versiondata) { while (1) { Serial.print("Didn't find RFID/NFC reader"); delay(1000); } } Serial.println("Found RFID/NFC reader"); // настраиваем модуль nfc.SAMConfig(); Serial.println("Waiting for a card ..."); } void loop(void) { uint8_t success; // буфер для хранения ID карты uint8_t uid[8]; // размер буфера карты uint8_t uidLength; // слушаем новые метки success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); // если найдена карта if (success) { // Переключаем первый светодиод если функция сравнения // ID вернёт true иначе оставляем всё как есть if (comparisonOfUid(uid, uidFirstCard, uidLength)) { toggleLed(LED_FIRST); Serial.println("FirstTAG"); } else { // Переключаем второй светодиод если функция сравнения // ID вернёт true иначе оставляем всё как есть if (comparisonOfUid(uid, uidSecondCard, uidLength)) { toggleLed(LED_SECOND); Serial.println("SecondTAG"); } else { // Переключаем третий светодиод если функция сравнения // ID вернёт true иначе оставляем всё как есть if (comparisonOfUid(uid, uidThirdCard, uidLength)) { toggleLed(LED_THIRD); Serial.println("ThirdTAG"); } else { Serial.println("NoTAG"); } } } delay(1000); } }