Добрый вечер. Пробую при поочередном поднесении разных меток к RFID сохранить их UID в разные переменные. Хотя бы при подносе 2 меток, но только так, чтобы переменные не привязывать к конкретным UID, т.к. хочется чтобы они автоматически сохранялись в переменные по очереди вне зависимости от их очередности. Может как то можно сохранять в массивы эти данные? Буду очень благодарен помощи. В общем мне нужно сохранить каждый UID номер, как вытащить этот UID код и преобразовать его в десятичный код есть: for (byte i = 0; i < mfrc522.uid.size; i++) { uidDec0Temp = mfrc522.uid.uidByte; uid0Dec = uid0Dec * 256 + uidDec0Temp; } а вот как сохранить каждый UID в отдельную переменную не знаю. вот пример кода, как можно его изменить?Просто я хочу эти UID потом передавать по I2C к другому Arduino и он сравнивал, были ли у него такие же метки. void loop() { for (int a=0; a<2;a++){ // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uid0Dec = 0; uid1Dec = 0; // Выдача серийного номера метки. if (a==0) { for (byte i = 0; i < mfrc522.uid.size; i++) { uidDec0Temp = mfrc522.uid.uidByte; uid0Dec = uid0Dec * 256 + uidDec0Temp; } Serial.println("Card UID1: "); Serial.println(uid0Dec); // Выводим UID метки в консоль. return; } else { for (byte i = 0; i < mfrc522.uid.size; i++) { uidDec1Temp = mfrc522.uid.uidByte; uid1Dec = uid1Dec * 256 + uidDec1Temp; } Serial.println("Card UID2: "); Serial.println(uid1Dec); // Выводим UID метки в консоль } } Что в итоге получается
он уже выводится в десятичном виде. Оформляйте код правильно, в этой каше нет желания разбираться. Сколько всего должно быть таких переменных? Пример сохранения для 5 меток, с отбрасыванием повторных: Код (C++): #include <SPI.h> #include <MFRC522.h> /* Соединение контроллера и ридера, Uno/Mini Mega MFRC522 ------------------------------------------------- 10 53 1 SDA // уникальный для каждого ридера 13 52 2 SCK // общий для нескольких ридеров 11 51 3 MOSI // общий для нескольких ридеров 12 50 4 MISO // общий для нескольких ридеров GND GND 6 GND 9 (можно любой) 5 (можно любой) 7 RST // общий для нескольких ридеров 3V3 3V3 8 3V3 */ #define RFID_SDA 10 // пин от SS (он же SDA на плате ридера) #define RFID_SCK 52 // 13 для Uno #define RFID_MOSI 51 // 11 для Uno #define RFID_MISO 50 // 12 для Uno #define RFID_RST 8 // пин от RST (можно любой) const byte numIDs = 5; // количество переменных для хранения ID unsigned long RFIDcards[numIDs]; // массив для хранения ID MFRC522 mfrc522(RFID_SDA, RFID_RST); // Объявляем прототипы функций, чтобы компилятор не ругался void printIDs(void); unsigned long readRFID(void); boolean verifyID(unsigned long currentID); void setup(void) { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("Ready. Waiting cards...")); } void loop(void) { unsigned long currentID; // временная переменная для хранения ID текущей карты static unsigned long lastID; static byte numSavedCards = 0; currentID = readRFID(); // опрашиваем ридер if (currentID > 0) // если карта прочитана { if (currentID != lastID) // если карта отличается от предыдущей { Serial.print(F("currentID = ")); Serial.println(currentID); lastID = currentID; if (numSavedCards < numIDs) // если массив еще не заполнен { Serial.print(F("Check IDs ")); if (verifyID(currentID) == false) // если такого ID еще нет в массиве { Serial.print(F(" not found. ")); RFIDcards[numSavedCards] = currentID; // сохраняем ID в массив numSavedCards++; // увеличиваем счетчик Serial.println(F("Saved.")); } else Serial.println(F(" this ID always saved.")); } else { Serial.println(F("Array is full!")); printIDs(); // выводим все сохраненные ID } } } } unsigned long readRFID(void) { // Чтение RFID-меток. Возвращает ID метки (в виде хеша), либо код ошибки unsigned long uidDec; // десятичное представление ID текущей карты if (!mfrc522.PICC_IsNewCardPresent()) // метки нет { return 0; } else if (mfrc522.PICC_ReadCardSerial()) // метка есть и удалось прочитать { for (byte i = 0; i < mfrc522.uid.size; i++) uidDec = uidDec * 256 + mfrc522.uid.uidByte[i]; mfrc522.PICC_ReadCardSerial(); return uidDec; // возвращает ID метки } else // метка есть, но прочитать не удалось { //Serial.println(F("Error reading ID.")); return 0; } } boolean verifyID(unsigned long currentID) { // Проверка RFID-метки с известными ID. // Входной параметр - ID метки/ // Возвращает true если такой ID уже есть в массиве RFIDcards for (byte n = 0; n < numIDs; n++) { Serial.print(F("..")); delay(100); if (RFIDcards[n] == currentID) return true; } return false; // если совпадений не найдено } void printIDs(void) { // выводит все сохраненные ID Serial.println(F("= = = = = = = = = = = = = = = = = = =")); for (byte n = 0; n < numIDs; n++) { Serial.print(n); Serial.print(F(" : ")); Serial.println(RFIDcards[n]); } Serial.println(F("= = = = = = = = = = = = = = = = = = =")); }