愛體驗認證

2019年4月14日 星期日

TCweng_arduino通訊-UART序列埠篇,RX,TX通訊

TCweng_arduino 通訊-UART序列埠篇(RX,TX)

Arduino的序列埠
源自於PC電腦的RS-232通訊協定
也就是我們所謂的COM埠
但隨著時間和科技的發展
USB逐漸取代了COM埠

不過至今我們還是用晶片來USB轉換訊號
讓電腦跟Arduino溝通

而除了用USB讓PC跟Arduino溝通外
Arduino也可以用RX,TX接腳
來跟另一台Arduino溝通喔👍👍👍👍😎

用RX,TX 接腳讓兩部Arduino溝通
與如何增加Arduino的RX,TX 接腳
詳細教學請見另一篇文章:


程式的部分,掌握以下六個基本語法

1.  Serial.begin();      //設定通訊速率
2.  Serial.print();       //輸出
3.  Serial.println();   //輸出並換行
4.  Serial.write();      //另一種輸出方式
5.  Serial.read();       //讀取
6.  Serial.available();  //檢查是否有訊號

範例1:

void setup() {
  Serial.begin(9600);  //設定通訊速率

}

void loop() {
  while (!Serial.available()) {}   //直到暫存器出現訊號才跳出迴圈

  Serial.print("My name is ");  //輸出 My name is
  Serial.println("TC");   //輸出 TC ,並換行

  while (Serial.available()>0) {   //如果暫存器有訊號則不斷讀取直到沒有
    Serial.read();
  } 

}


以上的範例主要展現5種應用功能

1. Serial.begin(9600);  //設定通訊速率
2. while (!Serial.available()) {}  //這句話是用來判斷是訊號
3. Serial.print("My name is ");   //未換行的輸出
4. Serial.println("TC");   //輸出後並換行的語法
5. while (Serial.available()>0) { 
    Serial.read();
    } 
    這段語法功能是讓暫存器的數據歸零
    因為電腦傳給arduino的訊號可能不只一個


執行截圖畫面

1. 有加
while (Serial.available()>0) { 
    Serial.read();

這個語法的執行結果
可讓暫存器淨空
不讓while (!Serial.available()) {}
一直判斷暫存器有東西

2. 把
while (Serial.available()>0) { 
    Serial.read();
}
這句語法刪掉後
會一直無法停止執行
 



範例2

void setup() {
  Serial.begin(9600);  //設定通訊速率

}

void loop() {
  int i;
  if (Serial.available() > 0) {
    i=Serial.read();
    Serial.write(i);
  }

}


Arduino讀取並顯示電腦的數值
就比較麻煩了
因為arduino收到顯示的是ASCII 碼
而且是一個字一個字傳輸
並不是單純的數字或字串
因此我們必須一次讀取一個數值
並用Serial.write();顯示出來
如果用Serial.print();顯示
出現的就是ASCII 碼
大家可以實驗看看👉

所以TC覺得Serial.write()
在大部分的時候還是比較實用
也比較方便
大家可以嘗試多用Serial.write()看看

有任何問題都可以在底下留言
大家一起討論😎✌👍


沒有留言:

張貼留言