乐鑫技术交流
直播中

李明聪

7年用户 1155经验值
私信 关注
[问答]

Wemos D1 Mini Serial仅在重置后有效的原因?

我在为朋友的俱乐部编写 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\';
}

更多回帖

×
20
完善资料,
赚取积分