透過Serial port 通訊來控制 LED

本篇實作的功能是藉由Arduino 上所連接USB線來進通訊,運用基本的 Serial.available()、Serial.read()、Serial.readString()、Serial.print()、Serial.write() 的 Function,來實作出通訊的功能。

整體的功能如下,透過接收以下四種 Command 來控制兩顆LED的 亮與滅。

  • ON
    兩顆 LED 全亮
  • OFF
    兩顆 LED 全滅
  • 1
    1號 LED,反向動作 => (當目前為亮時,就將其滅,反之)
  • 2
    2號 LED,反向動作 => (當目前為亮時,就將其滅,反之)

電路接法:

注意:下圖中,為高功率的 LED 燈 可承受電壓為 3.0-3.6V,因此 無外接電阻降壓。


程式碼如下:

unsigned char LED_1_pin = 13; //LED_1 連接 pin 13
unsigned char LED_2_pin = 12; //LED_2 連接 pin 12

bool LED_1_state = false; //LED_1 亮與滅的狀態
bool LED_2_state = false; //LED_2 亮與滅的狀態

void setup() {
 Serial.begin(9600); //設定 Serial port 初始 Baud Rate 為 9600

 Serial.println("\nEnter the following four commands:\nON\nOFF\n1\n2\n");

 pinMode(LED_1_pin, OUTPUT); //設定 pin 13 為 Output 腳位
 pinMode(LED_2_pin, OUTPUT); //設定 pin 12 為 Output 腳位

 //將兩個 LED 初始狀態設為 OFF
 digitalWrite(LED_1_pin, LED_1_state); 
 digitalWrite(LED_2_pin, LED_2_state);
}

void loop() {
 
 if (Serial.available()) { //當Serial port 有接收到資料時
 String _str;
 
 _str = Serial.readString(); //讀取 整段 String,包含按下傳送時的 換行(0x0D 0x0A),因此後續判斷皆須加上 \xD\xA => (0x0D 0x0A)
 _str.toUpperCase(); //將 String 統一轉成大寫,方便後續的判斷

 Serial.print("\nThe command you entered is: ");
 Serial.print(_str);
 
 if(_str == "ON\xD\xA"){

 Serial.println("All LEDs set ON");

 LED_1_state = true;
 LED_2_state = true;

 digitalWrite(LED_1_pin, LED_1_state);
 digitalWrite(LED_2_pin, LED_2_state);

 }else if(_str == "OFF\xD\xA"){

 Serial.println("All LEDs set OFF");

 LED_1_state = false;
 LED_2_state = false;

 digitalWrite(LED_1_pin, LED_1_state);
 digitalWrite(LED_2_pin, LED_2_state);

 }else if(_str == "1\xD\xA"){
 
 if(LED_1_state){
 Serial.println("LED_1 set OFF");

 LED_1_state = false;

 digitalWrite(LED_1_pin, LED_1_state);
 }else{
 Serial.println("LED_1 set ON");

 LED_1_state = true;

 digitalWrite(LED_1_pin, LED_1_state);
 }

 }else if(_str == "2\xD\xA"){
 
 if(LED_2_state){
 Serial.println("LED_2 set OFF");

 LED_2_state = false;

 digitalWrite(LED_2_pin, LED_2_state);
 }else{
 Serial.println("LED_2 set ON");

 LED_2_state = true;

 digitalWrite(LED_2_pin, LED_2_state);
 }

 }else{

 Serial.println("Command error, please try again !!!");

 }
 }
}

實際結果如下:


如需更多客製化服務:


另外有安裝或者其他使用上的問題,皆可參考下列篇章:

如有任何問題歡迎下方留言討論!!!

文章標籤
全站熱搜
創作者介紹
創作者 微笑創客 的頭像
微笑創客

微笑創客 Smile assassin

微笑創客 發表在 痞客邦 留言(0) 人氣(324)