我正在使用以下代碼將ID從MIFARE卡成功讀取到串行監視器。Arduino RC-522 RFID閱讀器 - 比較字節數組中的值
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int readflag;
byte readCard[4];
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
///////////////////////////////////////// Setup ///////////////////////////////////
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
lcd.begin(20, 4);
}
///////////////////////////////////////////////////////////////////////////////
// Main loop
///////////////////////////////////////////////////////////////////////////////
void loop() {
do {
readflag = checkread();
}
while (!readflag);
//If card detected do this
recordid();
}
///////////////////////////////////////////////////////////////////////////////
// Stores the ID of the card that's been detected in readCard byte array
///////////////////////////////////////////////////////////////////////////////
void recordid() {
mfrc522.PICC_IsNewCardPresent();
mfrc522.PICC_ReadCardSerial();
lcd.clear();
for (int i = 0; i < 4; i++) {
readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println("");
mfrc522.PICC_HaltA();
}
/////////////////////////////////////////////
// Returns 1 if a card has been detected
/////////////////////////////////////////////
int checkread() {
if (! mfrc522.PICC_IsNewCardPresent()) {
return 0; } //no card detected
mfrc522.PICC_HaltA();
return 1; } //card detected
我有12卡,串行監控告訴我,他們的ID是(十六進制):
3278CE3F F5C9FD29 2FC640 82BA7A3F 2BD7A3F 52B77A3F B2E5640 F2DD640 E2ECCC3F 22B3640 2FD640 73D5B7AC
我翻轉並且這些被存儲在readCard字節數組中。
我想此字節數組的當前值進行比較,以一個已知的值,以確定指令是否運行(例如,LED的閃爍)
像這樣:
如果(readCard = 2FD640){ 打開LED }
我已經能夠成功地做到這一點,如果語句中使用這樣的:
如果((uint32_t的)readCard == 0x3FCE7832)
例如卡片1。但是,它不適用於身份證不是8位數字的卡,即卡11(2FD640)。
任何人都可以幫助我在代碼中實現此?
非常感謝。
Arduino不是C! – Olaf