2013-05-17 51 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軟件握手。

您還應該檢查調試窗口中的緩衝區,爲緩衝區分配字符後設置斷點並檢查您發送的字符的確是您認爲的字符。