# Arduino課堂練習 ## LED閃爍實驗 ### 一顆LED ch4-1 讓一顆LED發亮 #### 電路圖 ![](https://i.imgur.com/8sm8CIy.png) #### 程式碼 ```cpp= void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } ``` ### 霹靂燈來回變化 四顆燈泡能輪流發亮 #### 電路圖 ![](https://i.imgur.com/70FT90H.png) #### 程式碼 ch4-3a ```c= const int led[] = {10,11,12,13}; int i; int j=0; int direct=0; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. for(i=0;i<4;i++){ pinMode(led[i], OUTPUT); } } // the loop function runs over and over again forever void loop() { for(i=0;i<4;i++){ digitalWrite(led[i], LOW); } digitalWrite(led[j], HIGH); delay(200); if(direct==0) { if (j==3) direct=1; else j=j+1; } // wait for a second.3 else { if(j==0) direct=0; else j=j-1; } } ``` ### 呼吸燈來回變化 四科呼吸燈來回閃爍 #### 程式碼 ch4_5 ```c= const int led[] = {3,5,6,9}; int i; int j=0; int direct=0; int brightness=0; int lighten = 5; // the setup function runs once when you press reset or power the board void setup() { } // the loop function runs over and over again forever void loop() { analogWrite(led[i],brightness); delay(50); if(direct==0) { if(brightness<=250) brightness = brightness+lighten; else direct =1; } else { if(brightness>0) brightness = brightness-lighten; else { direct=0; i++; if(i>=4) i=0; } } } ``` ## 串列埠實驗 ### Arduino傳送訊息給電腦 按下按鍵傳送給電腦 #### 操作畫面截圖(Serial Monitor) ![](https://i.imgur.com/0Qvkrch.png) #### 程式碼 ch6-1 ```cpp= byte val=65; void setup() { Serial.begin(9600); } void loop() { for(int i=0;i<26;i++) { Serial.write(val+i); Serial.print("="); Serial.println(val+i); delay(1000); } } ``` ### Arduino 接收電腦訊息 讓Arduino接收到輸入的訊息 #### 操作畫面截圖和拍照(Serial Monitor) ![](https://i.imgur.com/wqN3M3Q.png) #### 程式碼 ``` cpp= int num =0; void setup() { Serial.begin(9600); } void loop() { if(Serial.available()>0) { num=Serial.read(); Serial.print("received:"); Serial.println(num,DEC); } } ``` ### Arduino傳送LED狀態給電腦 列出目前的LED燈狀態於螢幕上 #### 操作畫面截圖 ![](https://i.imgur.com/Mjw0RZk.png) #### 程式碼 ``` cpp= int led[]={10,11,12,13}; int i,j; void setup() { Serial.begin(9600); for(i=0;i<4;i++) pinMode(led[i],OUTPUT); } void loop() { for(i=0;i<4;i++) { digitalWrite(led[i],HIGH); Serial.print("LED="); for(j=0;j<4;j++) { if(j==i) Serial.print("1"); else Serial.print("0"); } Serial.println(); delay(1000); digitalWrite(led[i],LOW); } } ``` ### 鍵盤控制LED閃爍速度 利用鍵盤輸入數字,控制時間的間隔 #### 操作畫面截圖和拍照(Serial Monitor) #### 程式碼 ``` cpp= const int led=13; int key=0,flash=0,keydata=0; void setup(){ Serial.begin(9600); pinMode(led,OUTPUT); digitalWrite(led,LOW); } void loop(){ if(Serial.available()>0) { key = Serial.read(); key=key-'0'; if(key>=0 && key<=9) keydata=key; } if(keydata=0) digitalWrite(led,LOW); else { flash=keydata*100; digitalWrite(led,HIGH); delay(flash); digitalWrite(led,LOW); delay(flash); } } ``` ## 心得感想 經過這次的Arduino課程,我學習到了基本的電路串接,包含led正負極、麵包板、UNO、按壓開關的串接、電阻的運用等,還有學到了命令Arduino的程式語法,如何控制燈泡和要怎麼讓Arduino傳送LED狀態給電腦,及電壓和接地的概念,讓我對電路和Aduino有更進一步的認識。 ## 按鈕開關實驗 ### 按鈕開關控制一個LED明暗 利用按鈕控制LED明或暗 #### 電路圖 ![](https://hackmd.io/_uploads/rkpK7YDH3.png) #### 操作畫面截圖 ![](https://hackmd.io/_uploads/H1VXssxB3.png) #### 程式碼 ```cpp= const int sw=2; const int led=13; const int debounceDelay=20; int ledStatus=LOW; int val; void setup() { pinMode(sw, INPUT_PULLUP); pinMode(led,OUTPUT); } void loop() { val=digitalRead(sw); if(val==LOW) { delay(debounceDelay); while(digitalRead(sw)==LOW) ; ledStatus=!ledStatus; digitalWrite(led,ledStatus); } } ``` ### 按鈕開關控制四個LED方向移位 用按鈕控制燈泡輪流閃爍 #### 電路圖 ![](https://hackmd.io/_uploads/B1g7YtvH2.png) #### 操作畫面截圖 ![](https://hackmd.io/_uploads/Sy1sYjxS3.png) #### 程式碼 ch5-4 ```cpp= const int sw = 2; const int led[] = {10, 11, 12, 13}; const int debounceDelay = 20; int val; int i; int j = 3; int direct = 0; void setup() { pinMode(sw, INPUT_PULLUP); for (i = 0; i < 4; i++) pinMode(led[i], OUTPUT); } void loop() { val = digitalRead(sw); if (val == LOW) { delay(debounceDelay); while (digitalRead(sw) == LOW) ; direct = !direct; } for (i = 0; i < 4; i++) digitalWrite(led[i], LOW); if (direct == 0) { digitalWrite(led[j], HIGH); delay(500); if (j == 0) j = 3; else j--; } else { digitalWrite(led[j], HIGH); delay(500); if (j == 3) j = 0; else j++; } } ``` ## 類比電路實驗 ### 電位器調光實驗 利用電位器調整亮度 #### 電路圖 ![](https://hackmd.io/_uploads/HyYxrFDH3.png) #### 操作畫面截圖 ![](https://hackmd.io/_uploads/SJz-HFDS3.png) #### 程式碼 ch8-2 ```cpp= const int led=10; int val; void setup ( ) { } void loop ( ) { val=analogRead (0); val=map (val,0,1023,0,255); analogWrite (led, val); } ``` ### 電位器控制燈泡閃爍 利用電位器調整閃爍速度 #### 電路圖 ![](https://hackmd.io/_uploads/HyTNSFwS2.png) #### 操作畫面截圖 ![](https://hackmd.io/_uploads/HycSrtwS3.png) #### 程式碼 ch8-3 ```cpp= const int led = 10; int val; void setup() { pinMode(led, OUTPUT); digitalWrite(led, LOW); } void loop() { val = analogRead(0); val = map(val, 0, 1023, 1000, 50); digitalWrite(led, HIGH); delay(val); digitalWrite(led, LOW); delay(val); } ``` ### 光敏電阻 使用光敏電阻控制燈泡明暗 #### 電路圖 ![](https://hackmd.io/_uploads/B1U_IKwrn.png) #### 操作畫面截圖 ![](https://hackmd.io/_uploads/By3y9olBh.png) #### 程式碼 ch8-5 ```cpp= const int cds = 0; const int led = 10; int val; void setup() { pinMode(led, OUTPUT); digitalWrite(led, LOW); } void loop() { val = analogRead(cds); if (val > 512) digitalWrite(led, HIGH); else digitalWrite(led, LOW); } ``` ## 心得感想(二) 經過這次的課程我學到了更多Aduino的配件應用,按鈕、光敏電阻及可變電阻讓燈泡的應用更多樣化,包誇閃爍順序和明暗等,使用成功後對Aduino的興趣更深了。希望以後能製作一些小專案。