在你提供的代码中,你添加了一个条件判断 if (j = 100)
来重置变量 j
的值为0。然而,请注意在条件判断时应使用双等号(==)进行相等性比较,而不是单等号(=)赋值操作符。因此,你应该将条件判断改为 if (j == 100)
。
以下是修正后的代码:
void NEC_VOID() {
uint8_t success;
uint8_t uid[8]; // 假设UID最多8个字节(根据PN532库文档或实际NFC卡调整)
uint8_t uidLength;
static int j = 0;
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
Serial.println("Found an NFC card!");
Serial.print("UID Length: ");
Serial.print(uidLength, DEC);
Serial.println(" bytes");
Serial.print("UID Value: ");
for (uint8_t i = 0; i < uidLength; i++) {
Serial.print(" ");
Serial.print(uid[i], HEX);
}
Serial.println("");
uint8_t targetUid[] = {0x33, 0xc9, 0xf5, 0x03}; // 示例UID,注意这里我修改了最后一个字节为0x00,如果这是错误的,请更正
// 只比较实际读取到的UID长度
if (uidLength == sizeof(targetUid) && memcmp(uid, targetUid, uidLength) == 0)
{
j++;
if (j == 100)
{
j = 0;
}
// 切换LED状态
if (j % 2 != 0) {
// 奇数次刷卡,点亮LED
digitalWrite(LED_PIN, HIGH);
Serial.println("LED is ON");
Serial.println(j);
} else {
// 偶数次刷卡,熄灭LED
digitalWrite(LED_PIN, LOW);
Serial.println("LED is OFF");
Serial.println(j);
}
} else {
Serial.println("UID does not match the target UID");
Serial.println(sizeof(targetUid));
}
}
delay(1000); // 等待一段时间再次检测
}
请注意修复后的代码中的条件判断语句 if (j == 100)
。现在,当变量 j
达到100时,它会被重置为0,并继续计数。每次刷卡都会在奇数和偶数次之间切换LED灯的状态,并通过串口输出相关信息。
内容由零声教学AI助手提供,问题来源于学员提问