Программа Arduino для сканирования двух разных RFID-карт в одной программе? Я использую nodemcu-esp8266, программу чтения rc522 и Firebase.
/*Мой проект — система управления библиотекой с использованием RFID-карт. Я пытаюсь сгенерировать код, в котором пользователь сначала сканирует книгу, а затем запись будет помещена в таблицу Issued_Books в Firebase. Затем пользователь сканирует свой идентификатор, чтобы убедиться, что книга будет выпущена по его/ее идентификатору. Но в моей программе сканируются только id книг. После этого не удается сканировать идентификаторы пользователей. Я новичок, может ли кто-нибудь мне помочь? */
//Мой код цикла следующий:
void loop() {
if ( !mfrc522.PICC_IsNewCardPresent() ) {
delay(50);
return;
}
if ( !mfrc522.PICC_ReadCardSerial() ) {
delay(50);
return;
}
String book;
for ( byte i = 0; i< mfrc522.uid.size; i++ ) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
book.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
book.concat(String(mfrc522.uid.uidByte[i], HEX));}
book.toUpperCase();
Firebase.pushString("Issued_Books/Book_rfid",book);
Serial.println();
if ( !mfrc522.PICC_IsNewCardPresent() ) {
delay(50);
return;
}
if ( !mfrc522.PICC_ReadCardSerial() ) {
delay(50);
return;
}
String user;
//Serial.print("Сканируйте свой идентификатор: ");
for ( byte i = 0; i< mfrc522.uid.size; i++ ) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
user.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
user.concat(String(mfrc522.uid.uidByte[i], HEX));}
user.toUpperCase();
//Serial.print(F("UID карты: "));
Firebase.setString("Issued_Books/Book_rfid/user_rfid",user);
delay(3000);
}
@Dhiraj, 👍0
1 ответ
▲ 1
также просмотрите sprintf, чтобы получить шестнадцатеричное форматирование (У меня нет этих библиотек, поэтому я не могу протестировать, все это написано в редакторе stackexchange, поэтому может быть где-то опечатка)
unsigned long startScanTime;
bool GotBookId = false, GotUserId = false;
void loop() {
GotBookId = false;
GotUserId = false;
if ( !mfrc522.PICC_IsNewCardPresent() ) {
delay(50);
return;
}
if ( !mfrc522.PICC_ReadCardSerial() ) {
delay(50);
return;
}
String book;
for ( byte i = 0; i< mfrc522.uid.size; i++ ) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
book.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
book.concat(String(mfrc522.uid.uidByte[i], HEX));
}
book.toUpperCase();
if(book != "")
GotBookId = true;
Serial.println("Got Book");
startScanTime = millis(); // таймаут для получения карты пользователя
while( !mfrc522.PICC_IsNewCardPresent() && (millis() - startScanTime < SCAN_TIMEOUT) ) {
// ничего не делаем, но ждем
}
if(!mfrc522.PICC_IsNewCardPresent())
{ //не получен идентификатор пользователя, возвращаемся из цикла
return;
}
if ( !mfrc522.PICC_ReadCardSerial() ) {
return; //никогда не следует сталкиваться с этим, если библиотека работает правильно
}
String user;
Serial.print("Scan your id: ");
for ( byte i = 0; i< mfrc522.uid.size; i++ ) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
user.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
user.concat(String(mfrc522.uid.uidByte[i], HEX));}
user.toUpperCase();
//Serial.print(F("UID карты: "));
GotUserId = true;
if(GotBookId && GotUserId){
Firebase.pushString("Issued_Books/Book_rfid",book);
Firebase.setString("Issued_Books/Book_rfid/user_rfid",user);
}
}
,
@Lev
Смотрите также:
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Как преобразовать массив байтов в одну переменную
- Ошибка стека «мягкий сброс WDT»: RFID-RC522 с NodeMCU
- Контакты NodeMcu и светодиод RGB
- Как подключить Sparkfun M6E Nano UHF Rfid-считыватель и ESP8266 NodeMCU 0.1
- NodeMCU: Wiegand не работает на одном устройстве, но работает на другом
- Ошибка запроса HTTP myphp RFID
- NodeMCU - Vin контакт как выход 5V?
Спасибо за ответ, но на самом деле даже этот код сталкивается с той же проблемой. После первого сканирования код в конечном итоге отправляет тот же RFID, что и «книга» и «пользователь» в Firebase, где я хочу, чтобы пользователь отсканировал книгу, RFID которой будет храниться в Firebase, затем пользователь отсканирует свой идентификатор, и идентификатор пользователя будет установлен для этой конкретной книги., @Dhiraj
Каждая книга будет выпущена конкретным пользователем... поэтому идентификатор пользователя должен храниться каждый раз по-разному для этой конкретной книги. Я имею в виду, что у 1 книги RFID будет 1 RFID пользователя. но из-за setString(); каждый раз он обновляет только предыдущий идентификатор. Любое решение вышеуказанных проблем?, @Dhiraj
Я не работал с Firebase, поэтому не знаком с их API, но 10-секундный запрос Google привел меня сюда, в котором указан метод обновления, который вы должны использовать вместо заданной строки. https://firebase.google.com/docs/database/admin/save-data, @Lev
спасибо, но я не понимаю, как это сделать в Firebase arduino. Я имею в виду через программирование на C, @Dhiraj
вы пробовали что-то вроде Firebase.setString(String("Issued_Books/Book_rfid/") + String(book) + String("/user_rfid"),user);, @Lev