2013-12-14 135 views
0

我正試圖從我的電腦與我的arduino進行通信。我在循環中發送1,0,0,0,並且arduino將收到的數據發送回去。然而,而不是讓1,0,0,0回來了,這是我得到:C#與arduino的串行通信

1000 
1000 
1000 
1000 
1000 
1000 
1000 
0011 
0000 
0010 
0100 
1001 
0000 
0011 
0000 

正如你所看到的,它工作在開始,但開始幾條短信後變得怪異。 而不是發送3 0它發送5.爲什麼?

這裏是我的代碼:

C#應用程序:

class Program 
{ 
    SerialPort p; 

    static void Main(string[] args) 
    { 
     Program p = new Program(); 
     p.initialize(); 
    } 
    private void initialize() 
    { 
     p = new SerialPort("COM3", 115200); 
     p.Open(); 

     byte[] data = { 1, 0, 0, 0 }; 

     Thread t = new Thread(reading); 
     t.Start(); 

     while(true) 
     { 
      p.Write(data, 0, data.Count()); 
     } 
     Console.ReadLine(); 
    } 
    private void reading() 
    { 
     while (true) 
     { 
      Console.WriteLine(p.ReadLine()); 
     } 
    } 
} 

的Arduino:

void setup() 
{ 
    Serial.begin(115200); 
    delay(5000); 
    Serial.println("Program started...."); 
} 

void loop() 
{ 
    for (int i = 0;i<4;i++) 
    { 
     Serial.print(Serial.read()); 
    } 
    Serial.println(); 
    delay(500); 
} 
+0

讀取和寫入線程似乎不會以相同的頻率觸發並且不同步。 – Dave

+0

我不這麼認爲,讀寫線程是完全獨立的。此外,在Arduino上的值也是錯誤的 – user2422196

+0

我想你只是超載你的外部硬件。您的串行端口允許發送速度爲1000,甚至不使用任何握手。這對於arduino板來說可能只是很多。 – PMF

回答

2

我認爲問題是由Arduino的循環您的500毫秒的延遲造成的。

PC正在儘可能快地發送字符。

但是,Arduino接收4個字符,然後延遲1/2秒(在延遲期間,PC可以發送62,000個字符)。

有一段時間Arduino串行接收例程將字符放入緩衝區。但是,在正確接收到一些緩衝區後,開始用接收到的新字符覆蓋舊字符。

要驗證這是問題,請刪除行延遲(500);從你的Arduino代碼中加入一個延遲到PC後面:p.Write(data,0,data.Count());

另外,Console.ReadLine();永遠得到執行,因爲如果是在你的while(true)無限循環之後?