我在为朋友的俱乐部编写 POS 系统时遇到了问题。
我用 Wemos D1 Mini 构建了 3 个 RFID 扫描器,每个扫描器都带有一个 RC522 读取器模块。他们读取卡的 NUID,将其转换为字符串并通过串行发送。这 3 台扫描仪连接到一台旧的 Windows XP 计算机。驱动程序已安装,我可以成功监控正在发送的串行数据。但是,只有在重置之后。
如果我连接 1 个扫描仪然后运行我的 (AutoIt) 脚本来获取数据,它会给我一个连接错误。(无法连接到端口 COM(X) 上的设备。当我按下 wemos d1 mini 上的重置按钮时,它就可以工作了。我不知道该怎么做这很烦人
这是扫描仪设备的代码,它在所有 3 个 wemos d1 minis 上都是相同的,除了设置循环中的 Serial.println(\"B\") 在第一个扫描仪上打印 A,在第二个扫描仪上打印 B,依此类推,以识别我的脚本中的扫描仪。D1 只是一个用于识别设备正在运行的 LED。
代码:
全选#include
#include
#define SS_PIN D8
#define RST_PIN D3
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
void setup() {
pinMode(D1, OUTPUT);
digitalWrite(D1, LOW);
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
rfid.PCD_SetAntennaGain(rfid.RxGain_max);
Serial.println(\"B\");
digitalWrite(D1, HIGH);
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent())
return;
if ( ! rfid.PICC_ReadCardSerial())
return;
char str[32] = \"\";
array_to_string(rfid.uid.uidByte, 4, str);
Serial.println(str);
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
void array_to_string(byte array[], unsigned int len, char buffer[])
{
for (unsigned int i = 0; i < len; i++)
{
byte nib1 = (array
>> 4) & 0x0F;
byte nib2 = (array >> 0) & 0x0F;
buffer[i*2+0] = nib1 < 0xA ? \'0\' + nib1 : \'A\' + nib1 - 0xA;
buffer[i*2+1] = nib2 < 0xA ? \'0\' + nib2 : \'A\' + nib2 - 0xA;
}
buffer[len*2] = \'\\0\';
}