сравнение — C ++ равенство для типа uint32_t, не сравниваемого

Я читаю RFID-карты и пытаюсь сравнить идентификаторы, так как после того, как карта проходит считыватель, считыватель фактически читает ее более одного раза, поэтому мне нужно выбросить дубликаты.

ОБНОВЛЕНО: следующий код получает идентификаторы карт

uint32_t IndentifyTag(Adafruit_PN532 rfidReader)
{
uint8_t tagID[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
uint8_t tagIDLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
uint32_t cardid = tagID[0];
boolean success = rfidReader.readPassiveTargetID(PN532_MIFARE_ISO14443A, &tagID[0], &tagIDLength);
if (success) {
// Display some basic information about the card for testing
Serial.println("Found an ISO14443A card");
Serial.print("  UID Length: "); Serial.print(tagIDLength, DEC);     Serial.println(" bytes");
Serial.print("  UID Value: "); rfidReader.PrintHex(tagID, tagIDLength);

if (tagIDLength == 4)
{
// Mifare Classic card
cardid <<= 8;
cardid |= tagID[1];
cardid <<= 8;
cardid |= tagID[2];
cardid <<= 8;
cardid |= tagID[3];
Serial.print("Mifare Classic card #");
Serial.println(cardid);
}
Serial.println("");
}
return cardid;
}

А в случае оператора switch я проверяю теги на равенство следующим образом:

uint32_t priorTag = 0000000;
tag = IndentifyTag(entryRFIDReader);

if (tag == priorTag)
{
Serial.println("These tags are the same!!!");
}
if (tag != priorTag)
{
Serial.println("I got here!");
tagCount += 1;
}
priorTag = tag;
SSerial.println("tagCount = "); Serial.println(tagCount);

Проблема в том, что даже если читатель читает одну и ту же карту 3 или 4 раза за один проход, они никогда не равны, и поэтому tagCounter считает количество дубликатов. И tag, и priorTag имеют тип uint32_t, поэтому должны быть сравнимы с ==, но в этом контексте это не работает.

Найдена карта ISO14443A
Длина UID: 4 байта
Значение UID: 0x92 0x77 0x88 0xBB
Классическая карта Mifare # 7833787

Я иду туда!
tagCount = 1
Найдена карта ISO14443A
Длина UID: 4 байта
Значение UID: 0x92 0x77 0x88 0xBB
Классическая карта Mifare # 7833787

Я иду туда!
tagCount = 2
Найдена карта ISO14443A
Классическая карта Mifare # 7833787

Я иду туда!
tagCount = 3
Найдена карта ISO14443A
Классическая карта Mifare # 7833787

Я иду туда!
tagCount = 4

-2

Решение

Переменная priorTag объявляется слишком локальным, внутри вашего цикла. Поэтому он всегда имеет значение 0 в начале каждой итерации.

Переместить объявление переменной priorTag вне петли.

1

Другие решения

priorTag = tag;
Serial.println("******************************");
Serial.print("Prior tag: "); Serial.println(priorTag);
Serial.print("Current tag: "); Serial.println(tag);

Можете ли вы объяснить, как вы можете увидеть два разных значения, напечатанных здесь, когда эти четыре строки кода будут выполнены?

4

По вопросам рекламы [email protected]