【Arduino】Serial 教學,透過電腦與Arduino互相溝通

【Arduino】Serial 教學(精選圖片)

Serial 介紹

Arduino 與電腦之間接上USB線後就可以連線,

在USB線裡面就是有三條線來作為通訊橋梁

RX為接收,TX為傳輸,因此電腦的RX會對應到Arduino的TX,反之亦然。

傳輸的方式是一個一個bit傳送,也就是一堆0、1的訊號,

而鮑率就是傳送的速率,所以電腦與Ardunio要設定一樣的鮑率,

否則對應不起來,收到的資料就會無法解讀而形成一堆亂碼。

打印出字串

Serial.begin()

設置Serial port 通訊鮑率,括號內輸入鮑率的數值。

Serial.println()

將括號內的資料,透過Serial port傳輸給電腦,並從電腦中的序列埠監控視窗中顯示出來。

括號內用兩個雙引號包起來的意思為字串,ex: “hello world”

p.s. println()是會自動換行的,如果不換行的話要用print()

小練習

我們就練習最簡單的範例吧,每秒打印出 “hello world!!” 1次,

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

void loop() {
  Serial.println("hello world!!");
  delay(1000); 
}

打開序列埠監控視窗

序列埠監控視窗顯示

傳送訊息給Arduino

Serial.available()

當有資料透過序列傳輸進來Arduino時,資料會暫存在緩衝區。

而available()就是用來檢查是否有資料在緩衝區。

Serial.read()

透過read()就可以讀取緩衝區裡的資料。

小練習

這裡來做一個很簡單的練習,在序列埠監控視窗輸入甚麼,之後就打印出甚麼。

char receivedChar; //宣告字元變數

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

void loop() { 
  //判斷是否有資料進來
  if(Serial.available()>0){        
    receivedChar = Serial.read(); //讀取字元
    Serial.println(receivedChar); //打印出字元
  }
}

在下方輸入欄裡輸入ABCD

按下enter後,Arduino 就會依序打印出A B C D。

輸入’0’或’1’控制led

我們可以使用條件判斷式,來判斷收到的字元是’1’還是’0’。

如過是’1’,我們就打開Arduino板子上的led;

反之,是’0’的話,關閉led。

char receivedChar; //宣告字元變數

void setup() {
  Serial.begin(115200); 
  pinMode(LED_BUILTIN,OUTPUT);
}

void loop() { 
  //判斷是否有資料進來
  if(Serial.available()>0){        
    receivedChar = Serial.read(); //讀取字元
  }

  
  //判斷收到'1'還是'0'
  if(receivedChar == '1'){
    digitalWrite(LED_BUILTIN, HIGH); //打開led
    Serial.println("turn on");
  }
  else if(receivedChar == '0'){
    digitalWrite(LED_BUILTIN, LOW); //關閉led
    Serial.println("turn off");
  }

}
輸入’1′
led亮起(L)
輸入’0′
led關閉(L)

匯率換算

Serial.parseInt()

用來讀取輸入資料裡面的有效的整數值。

這裡來練習一個簡單的匯率運算,輸入為台幣金額,之後會打印出換算好的美金金額。

int receivedNum; //宣告整數變數
const int rate=30; //匯率

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

void loop() { 
  //判斷是否有資料進來
  if(Serial.available()>0){        
    receivedNum = Serial.parseInt(); //讀取整數
    Serial.print("TWD: ");
    Serial.println(receivedNum);
    Serial.print("USD: ");
    Serial.println(receivedNum*rate);//將輸入的金額乘上匯率
  }
}

最後!! 你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *