Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Arduino不向WinForms应用程序发送数据_C#_Arduino_Serial Port_Uart - Fatal编程技术网

C# Arduino不向WinForms应用程序发送数据

C# Arduino不向WinForms应用程序发送数据,c#,arduino,serial-port,uart,C#,Arduino,Serial Port,Uart,我有一个Arduino Leonardo,它有一个程序,可以监听串口并执行发送给它的命令。Arduino设备是一个RFID阅读器 我编写了一个WinForms应用程序,它与RFID阅读器通信以验证用户身份。Arduino接收数据正常,但不发送任何信息。甚至电路板上的TX二极管也不亮 我用另一台PC串行监视器测试了我的阅读器,它工作正常,所以问题出在我的应用程序上。波特率为9600,数据位为8,奇偶校验为无。握手可能并不重要,因为串行监视器可以处理任何握手 我做错了什么?另一件奇怪的事情是,当我通

我有一个Arduino Leonardo,它有一个程序,可以监听串口并执行发送给它的命令。Arduino设备是一个RFID阅读器

我编写了一个WinForms应用程序,它与RFID阅读器通信以验证用户身份。Arduino接收数据正常,但不发送任何信息。甚至电路板上的TX二极管也不亮

我用另一台PC串行监视器测试了我的阅读器,它工作正常,所以问题出在我的应用程序上。波特率为9600,数据位为8,奇偶校验为无。握手可能并不重要,因为串行监视器可以处理任何握手

我做错了什么?另一件奇怪的事情是,当我通过RS232将我的应用程序连接到另一台带有串行监视器的PC,并模拟我的阅读器时,一切都正常。那么,为什么只有我的应用程序和Arduino不起作用,而所有其他组合都不起作用呢

Arduino设备是唯一的Arduino+MFRC522读卡器

应用程序代码:

公共静态状态身份验证(密钥、密码、UID UID、字符串端口)
{
SerialPort serial=新的SerialPort(端口,9600,奇偶校验。无,8,停止位。1);
串行.握手=握手.无;
serial.Open();
字节[]cmd={1};
serial.Write(cmd,0,1);//Send命令
如果(serial.ReadLine()!=“START”)//设备已就绪
{serial.Close();返回状态.Err;}
if(serial.ReadLine()!=“KEY”)//设备需要密钥
{serial.Close();返回状态.Err;}
serial.Write(key.ToArray(),0,6);//发送密钥
if(serial.ReadLine()!=“PASSWD”)//设备需要密码
{serial.Close();返回状态.Err;}
serial.Write(passwd.ToArray(),0,16);//发送密码
if(serial.ReadLine()!=“UID”)//设备需要卡UID
{serial.Close();返回状态.Err;}
serial.Write(uid.ToArray(),0,4);//发送uid
if(serial.ReadLine()!=“WAIT-CARD”)//等待
{serial.Close();返回状态.Err;}
if(serial.ReadLine()!=“CARD-PRESENT”)//用户出示的卡
{serial.Close();返回状态.Err;}
string stat=serial.ReadLine();//接收授权状态
serial.Close();
开关(stat)//检查状态
{
案例“OK”:返回状态为.OK;
案例“ERR-PASS”:return Status.Inc_passwd;
案例“ERR-UID”:return Status.Inc\u UID;
案例“ERR-KEY”:return Status.Inc_KEY;
默认:返回状态。错误;
}
完整的Arduino代码:

#包括
#包括
#包括
#定义扇区。\u 14
// ----------------------------------------------------------------------------------------------------
#ifdef第15节
常量字节permittedBlocks[]={8,9,10,12,13,14,16,17,18,20,21,22,24,25,26,28,29,30,32,33,
34, 36, 37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54, 56, 57, 58, 60, 61, 62};
#恩迪夫
#IFU 14
常量字节permittedBlocks[]={8,9,10,12,13,14,16,17,18,20,21,22,24,25,26,28,29,30,32,33,
34, 36, 37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54, 56, 57, 58};
#恩迪夫
typedef结构代码
{
字节uid[4];
字节密码[16];
MFRC522::MIFARE_密钥;
}个人资料;
无效设置()
{
Serial.begin(9600);
SPI.begin();
延迟(1000);
}
void循环()
{
字节cmd;
而(!Serial.available());
cmd=Serial.read();
开关(cmd)
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
案例1:
{
数字写入(13,高);
Serial.println(“开始”);
personalData personal=RFID_GetPersonalData();
MFRC522射频识别(10,9);
rfid.PCD_Init();
if(RFID_WaitForCard(&RFID,个人))返回;
Serial.println(“OK”);
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
打破
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
案例2:
{
Serial.println(“开始”);
personalData personal=RFID_GetPersonalData();
Serial.println(“NEW-PASSWD”);
字节newPasswd[16];
getArray(newPasswd,16);
MFRC522射频识别(10,9);
rfid.PCD_Init();
if(RFID_WaitForCard(&RFID,个人))返回;
序列号。打印号(“更改”);
字节ok=RFID_ChangePasswd(newPasswd,&RFID,personal.key);
如果(ok==1){Serial.println(“ERR-KEY”);return;}
else如果(ok==2){Serial.println(“ERR-WRITE”);return;}
Serial.println(“OK”);
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
打破
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
案例3:
{
Serial.println(“开始”);
personalData personal=RFID_GetPersonalData();
Serial.println(“待写”);
字节计数[1];
getArray(计数,1);
字节块[计数[0]][1];
字节数据[计数[0]][16];
for(字节i=0;ipublic static Status Authenticate(Key key, Passsword passwd, UID uid, string port)
        {
            SerialPort serial = new SerialPort(port, 9600, Parity.None, 8, StopBits.One);
            serial.Handshake = Handshake.None;

            serial.Open();

            byte[] cmd = { 1 };

            serial.Write(cmd, 0, 1); //Send command

            if (serial.ReadLine() != "START") //Device is ready. Here program is stuck, becuse it's waiting for START command that never comes
            { serial.Close(); return Status.Err; }

            serial.Write(cmd, 0, 1); //Send "someData"

            string stat = serial.ReadLine(); //Receive status

            serial.Close();

            switch (stat) //Check status
            {
                case "OK": return Status.OK;
                case "ERR-PASS": return Status.Inc_passwd;
                case "ERR-UID": return Status.Inc_uid;
                case "ERR-KEY": return Status.Inc_key;
                default: return Status.Err;
            }