2013-05-17 53 views
0

我从Visual Studio C#发送一个字符到串口,我想让arduino读取字符并做一些工作。但是,它没有正确读取它。我已经使用串行监视器测试了arduino程序,并且它工作得非常好。这里是我的C#代码。发送到串口的字符没有被arduino读取

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); 

     } 
    } 

} 

我被困在这个很长一段time.Any帮助表示赞赏

+1

**更具体的问题描述**。 “这不起作用”,或者在这种情况下,“它没有正确地读取它”,除了事实上它不起作用外,几乎告诉我们你的问题几乎没有。我们认为这是因为该职位的存在。 – tnw

+0

如果您是新来的人,请不要忘记标记为已接受满足您的问题的答案。我们有成千上万个毫无争议的问题,只是因为人们忘记了。 – FeliceM

回答

0

尝试读取相当于ASCII(33)使用int而不是char。也改线

if(Serial.available() > 0) 

if(Serial.available()) 

给你一些参考。 Here

0

首先,创建一个打开串口的函数和一个关闭串口的函数。您的点击处理程序startBit_Click打开串行端口,这意味着如果再次调用处理程序,则该端口已打开,并且会生成异常。 (除非你有其他代码没有显示,关闭串口?)

其次,我猜你是通过USB端口连接到arduino? 如果是这样,DtrEnable应该是false(默认),因为您没有XON/XOFF软件握手。

您还应该检查调试窗口中的缓冲区,为缓冲区分配字符后设置断点并检查您发送的字符的确是您认为的字符。