我正在为我的教室开发一个 RFID 考勤系统。我已经将 MFRC-522 RFID 模块与 Arduino Uno 连接起来。Arduino Uno 通过串行端口连接到 PC。AC#程序读取串口获取RFID标签号并进行匹配。
现在,C#程序只有在第一次扫描时才能成功读取卡的全部13位数字。但在下一次扫描同一张卡时,这个 13 位数字会分成几个部分。连续两次测试的控制台输出如下图所示:
按任意键继续...
收到的数据:160975869190 匹配
收到的数据:1 不匹配
收到的数据:6097 不匹配
收到的数据:5869 不匹配
收到的数据:190 不匹配
我不明白为什么在第一次扫描时可以读取卡号,但在接下来的扫描中卡号会分成几个部分?Arduino 和 C# 代码都包含在下面:
Arduino代码:
void setup()
{
SPI.begin();
rfid.init();
Serial.begin(9600);
}
void loop()
{
if(rfid.isCard())
{
RoutineRFID();
}
}
void RoutineRFID()
{
if(rfid.readCardSerial())
{
Serial.print(rfid.serNum[0]);
Serial.print(rfid.serNum[1]);
Serial.print(rfid.serNum[2]);
Serial.print(rfid.serNum[3]);
Serial.print(rfid.serNum[4]);
Serial.flush();
}
while(!Serial.available())
{
}
String studentName = Serial.readString();
lcd.print(studentName);
delay(3000);
}
C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace Test_Serial
{
class Program
{
static void Main(string[] args)
{
try{
SerialPort myPort = new SerialPort();
myPort.BaudRate = 9600;
myPort.PortName = "COM6";
myPort.Open();
myPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
myPort.Close();
}
catch (Exception ex)
{
Console.WriteLine("Com port Disconnected!");
}
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.WriteLine(indata);
if (String.Equals(indata, "160975869190"))
{
Console.WriteLine("Matched");
sp.WriteLine("Matched");
}
else
{
Console.WriteLine("Not Matched");
sp.WriteLine("Not Matched");
}
Console.WriteLine();
}
}
}