close
透過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 !!!");
}
}
}
實際結果如下:
如需更多客製化服務:
另外有安裝或者其他使用上的問題,皆可參考下列篇章:
如有任何問題歡迎下方留言討論!!!
文章標籤
全站熱搜