0

我正在为我的教室开发一个 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();

        }


    }
}
4

0 回答 0