字符发送到串口没有被arduino读取
本文关键字:arduino 读取 串口 字符 | 更新日期: 2023-09-27 18:14:03
我正在从visual studio c#发送一个字符到串行端口,我希望arduino读取字符并做一些工作。但是,它读错了。我已经使用串行监视器测试了arduino程序,它工作得很好。这是我的c#代码。
private void startBit_Click(object sender, EventArgs e)
{
char start = '!';
byte[] buffer = new byte[] { Convert.ToByte(start) };
timerRealTimeData.Enabled = true;
serialPort1.PortName = "COM29";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open();
serialPort1.Write(buffer, 0, 1);
if (serialPort1.IsOpen)
{
Start.Enabled = false;
Stop.Enabled = true;
}
}
下面是读取串口的arduino代码
char incomingByte;
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop()
{
if(Serial.available() > 0) {
incomingByte = Serial.read();
if(incomingByte=='!')
{
digitalWrite(13,HIGH);
delay(2000);
digitalWrite(13,LOW);
}
}
}
我被困在这个很长一段时间。
尝试使用int而不是char读取等效的Ascii(33)。同时修改
一行if(Serial.available() > 0)
if(Serial.available())
给你一些参考。
首先,创建一个打开串行端口的函数和一个关闭串行端口的函数。单击处理程序startBit_Click打开串行端口,这意味着如果再次调用该处理程序,则端口已经打开,并且将生成异常。(除非您有其他未显示关闭串行端口的代码?)
第二,我猜你是通过USB端口连接到arduino的?如果是,DtrEnable应该是false(默认),因为您没有XON/XOFF软件握手。
你还应该在调试窗口中检查缓冲区,在缓冲区被分配字符后设置一个断点,并检查你发送的字符是否确实是你认为的。