☛ 功能說明

利用一個單刀單投指撥開關控制一個 LED 亮與暗,當開關接通 ( ON ) 時,LED 亮;反之,當開關斷開 ( OFF ) 時,LED 暗。

滑動開關有兩種接線方式:

⑴ 當開關接通時,輸出 Vo 電壓為 +5V。 反之,當開關斷開時,輸出 Vo 電壓為 0V。

⑵ 當開關接通時,輸出 Vo 電壓為 0V。 反之,當開關斷開時,輸出 Vo 電壓為 +5V。

☛ 使用材料

Arduino UNO R3 開發板 × 1、電阻 220Ω × 1、電阻 10KΩ × 1、紅色 LED × 1、指撥開關 × 1。

☛ 電路圖及麵包板接線圖

☛ 程式碼

const int sw=2;                   //開關連接至數位接腳 2。
const int led=13;                 //LED 連接至數位接腳 13。
int val;                          //開關狀態。

void setup()
{
     pinMode(sw,INPUT);           //設定數位接腳 2 為輸入模式。
     pinMode(led,OUTPUT);         //設定數位接腳 13 為輸出模式。
}

void loop()
{
     val=digitalRead(sw);         //讀取開關狀態。
     if(val==HIGH)                //開關接通( ON )?
        digitalWrite(led,HIGH);   //開關接通,點亮 LED。
     else                         //開關斷線 ( OFF )
        digitalWrite(led,LOW);    //開關斷開,關閉 LED。
}

 
☛ 練習

㈠ 設計 Arduino 程式,使用一個指撥開關控制一個 LED,當開關接通 ( ON ) 時,LED 閃爍,當開關斷開 ( OFF ) 時,LED 關閉。

const int sw=2;                   //開關連接至數位接腳 2。
const int led=13;                 //LED 連接至數位接腳 13。
int val;                          //開關狀態。

void setup()
{
     pinMode(sw,INPUT);           //設定數位接腳 2 為輸入模式。
     pinMode(led,OUTPUT);         //設定數位接腳 13 為輸出模式。
}

void loop()
{
     val=digitalRead(sw);         //讀取開關狀態。
     if(val==HIGH)                //開關接通( ON )?
        flushing();               //開關接通,LED 閃爍。
     else                         //開關斷線 ( OFF )
        digitalWrite(led,LOW);    //開關斷開,關閉 LED。
}

void flushing()                   //LED 閃爍副程式
{
     digitalWrite(led,HIGH);      //點亮 LED。
     delay(500);                  //延遲 0.5 秒
     digitalWrite(led,LOW);       //關閉LED。
     delay(500);
}

 

㈡ 設計 Arduion 程式,使用一個指撥開關控制一個 LED,當開關接通 ( ON ) 時,LED 快速閃爍。 反之,當開關斷開 ( OFF ) 時,LED 慢速閃爍。

const int sw=2;                   //開關連接至數位接腳 2。
const int led=13;                 //LED 連接至數位接腳 13。
int val;                          //開關狀態。

void setup()
{
     pinMode(sw,INPUT);           //設定數位接腳 2 為輸入模式。
     pinMode(led,OUTPUT);         //設定數位接腳 13 為輸出模式。
}

void loop()
{
     val=digitalRead(sw);         //讀取開關狀態。
     if(val==HIGH)                //開關接通( ON )
        flushing(200);            //開關接通,LED 快速閃爍。
     else                         //開關斷線 ( OFF )
        flushing(1000);           //開關斷開,LED 慢速閃爍。
}

void flushing(int sec)            //LED 閃爍副程式
{
     digitalWrite(led,HIGH);      //點亮 LED。
     delay(sec);                  //延遲 sec 秒
     digitalWrite(led,LOW);       //關閉LED。
     delay(sec);
}

將練習㈠的 flushing() 副程式進行修改,利用參數 sec 控制 LED 明暗的時間間隔,進而達到控制 LED 閃爍的速度變化。

 

㈢ 設計 Arduino 程式,使用一個指撥開關控制二個 LED,當開關接通 ( ON ) 時,二個 LED 同時閃爍,當開關斷開 ( OFF ) 時,二個 LED 關閉。

const int sw=2;                   //開關連接至數位接腳 2。
const int led1=12;                //LED1 連接至數位接腳 12。
const int led2=13;                //LED2 連接至數位接腳 13。
int val;                          //開關狀態。

void setup()
{
     pinMode(sw,INPUT);           //設定數位接腳 2 為輸入模式。
     pinMode(led1,OUTPUT);        //設定數位接腳 12 為輸出模式。
     pinMode(led2,OUTPUT);        //設定數位接腳 13 為輸出模式。
}

void loop()
{
     val=digitalRead(sw);         //讀取開關狀態。
     if(val==HIGH)                //開關接通( ON )?
        flushing(500);            //開關接通,LED1 及 lED2 閃爍。
     else {                       //開關斷線 ( OFF )
        digitalWrite(led1,LOW);   //關閉LED1。
        digitalWrite(led1,LOW);   //關閉LED2。
     }
}

void flushing(int sec)            //LED 閃爍副程式
{
     digitalWrite(led1,HIGH);     //點亮 LED1。
     digitalWrite(led2,HIGH);     //點亮 LED2。
     delay(sec);                  //延遲 sec 秒
     digitalWrite(led1,LOW);      //關閉LED1。
     digitalWrite(led2,LOW);      //關閉LED2。
     delay(sec);
}

 

㈣ 設計 Arduino 程式,使用一個指撥開關控制二個 LED,當開關接通 ( ON ) 時,二個 LED 交替閃爍,當開關斷開 ( OFF ) 時,二個 LED 關閉。

const int sw=2;                   //開關連接至數位接腳 2。
const int led1=12;                //LED1 連接至數位接腳 12。
const int led2=13;                //LED2 連接至數位接腳 13。
int val;                          //開關狀態。

void setup()
{
     pinMode(sw,INPUT);           //設定數位接腳 2 為輸入模式。
     pinMode(led1,OUTPUT);        //設定數位接腳 12 為輸出模式。
     pinMode(led2,OUTPUT);        //設定數位接腳 13 為輸出模式。
}

void loop()
{
     val=digitalRead(sw);         //讀取開關狀態。
     if(val==HIGH) {              //開關接通( ON )
        flushing(led1,500);       //LED1 閃爍。
        flushing(led2,500);       //LED2 閃爍。
     }
     else {                       //開關斷線 ( OFF )
        digitalWrite(led1,LOW);   //關閉LED1。
        digitalWrite(led2,LOW);   //關閉LED2。
     }
}

void flushing(int led,int sec)    //LED 閃爍副程式
{
     digitalWrite(led,HIGH);      //點亮 LED。
     delay(sec);                  //延遲 sec 秒
     digitalWrite(led,LOW);       //關閉LED。
     delay(sec);
}