2013年4月4日 星期四

Arduino: 串列輸出(RS232 TTL Level)


    在許多應用場合中我們會要求在Arduino和其它設備之間實現相互通信,而最常見也是最簡單的辦法就是使用串列通信。

在串列通信中,兩個設備之間一個接一個地來回發送數位脈衝,它們之間必須遵循相應的協議以保證通信的正確性。

PC上最常見的串列通信協議是RS-232串行協議,而在各種微控制器(單片機)上採用的則是TTL串行協議。由於這兩者的電平有很大的不同,因此在實現PC機和微控制器的通信時,必須進行相應的轉換。完成RS-232電平和TTL電平之間的轉換一般採用專用芯片,如MAX232等,但在Arduino上是用相應的位準轉換電路來完成的。



根據Arduino的原理圖我們不難看出,ATmegaRXTX引腳一方面直接接到了數位I/O 端口的0號和1號接腳, 另一方面又通過電平轉換電路接到了串口的母頭上。因此,當我們需要用ArduinoPC通信時,可以用串列線將兩者連接起來;當我們需要用 Arduino與微控制器(如另一塊Arduino)通信時,則可以用數位I/O端口的0號和1號接腳。

串行通信的困難點在於參數的設置,如baud rate、Data bit、Stop bit等,在 Arduino 語言可以使用Serial.begin()函數來簡化這一任務。為了實現數據的發送,Arduino則提供了Serial.print()Serial.println()兩個函數,它們的區別在於後者會在請求發送的數據後面加上換行符號(line feed),以提高輸出結果的可讀性。

在這一實驗中沒有用到額外的電路, 我們只需要用串口線將ArduinoPC機連起來就可以了,相應的程式為:

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Hello World!");
  delay(1000);
}

在將程式下載到Arduino模塊中之後,在Arduino IDE開發環境的工具欄中單擊“Serial Monitor”控制,打開串列監視器:


接著將Baud rate設置為9600,即保持與實驗中的設置相一致:

如果一切正常,此時我們就可以在Arduino IDE開發環境的Console視窗中看到串列上輸出的數據了:


為了檢查串列上是否有數據發送,一個比較簡單的辦法是在數字I/O端口的1號接腳(TX)和5V電源之間接一個LED,如下圖所示:


這樣Arduino在通過串列向PC發送數據時,相應的發光二極管就會閃爍。

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...