---
# System prepended metadata

title: ' Arduino課堂學習 112 201 17'

---

# Arduino課堂學習 112 201 17

## LED閃爍實驗 ch4_1
設定13號接角為輸出接角
重複:
    控制13接腳輸出高電壓及低電壓
    插入延遲時間1秒，使觀察者看到LED燈間隔1秒持續亮滅。

#### 電路圖
![擷取](https://hackmd.io/_uploads/B1EZZlJxR.jpg)


#### 程式碼
```cpp=
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000);                     
  digitalWrite(LED_BUILTIN, LOW);  
  delay(1000);      
```
### 一顆LED亮度變化
設定三個變數分別為led(燈泡接角),brightness(亮度),lighten(亮度變化值)
設定13號接角為輸出接角
重複:
    用模組analogWrite控制亮度
    用if迴圈限定brightness之數值小250若超過250則將亮度降至為0
#### 電路圖 
![擷取](https://hackmd.io/_uploads/S1c2ll1xA.jpg)

#### 程式碼 ch4_4

```cpp=
int led =13;           
int brightness = 0;    
int lighten = 5;    
void setup()  
{
  pinMode(led, OUTPUT);
}
void loop()  
{ 
    analogWrite(led,brightness);    
    if(brightness<250)     
      brightness = brightness + lighten;
    else
      brightness=0;
    delay(50);      
}

```
### 一個按鍵開關控制一個LED亮與暗
宣告3個常數分別為sw(按鍵開關接角)=2,led(燈泡接角)=13,debounceDelay(預防開關彈跳輸入多個訊號)=20
設定變數分別為ledStatus(led燈泡相連的初始接角電位)=低電位,int
設定2號接角為開關訊號輸入接角,設定13號接角為led燈泡輸出接角
重複:
    藉由模組digitalRead讀取開關的訊號(高電位或低電位)且將狀態訂為int
    用if迴圈判定開關是否處低電位,如果相等先延遲預防雜訊
    再利用while持續檢查按鈕的狀態是否處於低電位(按下開關是否再次放開),若持續為低電位程式將停於此階段
    若不是使變數ledStatus的值反轉且用模組digitalWrite改變電位
#### 電路圖
![擷取](https://hackmd.io/_uploads/r15glx1gA.jpg)

#### 程式碼 ch5_3
```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);        			
  }    
}

```
## 串列埠實驗
### Arduino 傳送訊息給電腦
設定變數val為大寫字母A
設定訊息傳輸的速率(波特律)為9600bps
重複:
    用for迴圈重複26次以下動作(從i=0開始，每次+1，到i=25)
    1.用Serial.write寫出val+i對應字母
    2.用Serial.print寫出字串  =
    3.用Serial.println寫出val+i計算的數值且換行
    4.延遲一秒
#### 操作畫面截圖(Serial Monitor)
![擷取](https://hackmd.io/_uploads/ByF4W11l0.jpg)

#### 程式碼 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 接收電腦訊息
設定變數num數值為0
設定訊息傳輸的速率(波特律)為9600bps
重複:
    用if迴圈判定是否有資料可供讀取
    用Serial.read模組讀取資料，且令變數num等於資料
    用Serial.print寫出字串received:
    用Serial.println輸出num且以十進位形式輸(DEC)
#### 操作畫面截圖(Serial Monitor)
![擷取](https://hackmd.io/_uploads/Sk2k1l1eR.jpg)

#### 程式碼 ch6_3
```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);
  }
}

```
### 鍵盤控制 LED 亮與暗 6-5
設定變數i(迴圈次數),key(讀取資料儲存處),led[] (每個led燈泡對應燈泡接角得清單),status[] (對應燈泡狀態設定為關閉)
設定訊息傳輸的速率(波特律)為9600bps，用for迴圈設定輸出接角(led[])與狀態(關閉)
重複: 
     用if迴圈判定是否有資料可供讀取
     用Serial.read模組讀取資料，且令變數key等於資料
     將變數轉換為相同的整數數字
     再次判斷是否為目標設定控制亮與暗的按鍵
     若是，則改變key所對應的燈泡狀態
     用digitalWrite改變key對應燈泡在status[]中的狀態
     用Serial.print寫出字串LED status:
     用for迴圈輸出燈泡目前狀態(開=1，閉=0)
     3.用Serial.println換行
#### 操作畫面截圖和拍照(Serial Monitor) 
![擷取](https://hackmd.io/_uploads/HybLAJkxA.jpg)
![擷取](https://hackmd.io/_uploads/rJA20kyeR.jpg)

#### 程式碼 自製
```cpp=
int i;
int key;
int led[]={7,8,9,10,11,12};
int status[]={0,0,0,0,0,0};
void setup()
{
  Serial.begin(9600); 
  for(i=0;i<5;i++)
  {
    pinMode(led[i],OUTPUT); 
    digitalWrite(led[i],LOW);
  }
}
void loop() 
{
  if (Serial.available()>0) 
  {
      key = Serial.read();
      key=key-'0';
      if(key>=0 && key<=5)
      {
        status[key]=!status[key];
        digitalWrite(led[key],status[key]); 
        Serial.print("LED status:");    
        for(i=0;i<5;i++)
        {
          if(status[i]==1)
            Serial.print("1");
          else
            Serial.print("0");
        }    
        Serial.println(); 
      }  
  }    
}

```
程式碼
## 心得感想
我認為這堂課對我來說最困難的部分有兩點，一是對於電路的除錯，因為我時常找不到有問題的電子零件，二是由於的不了解要花點時間才能理解程式運作邏輯，但每次修正錯誤跟了解程式都會帶來成就感。