1. 程式人生 > >arduino通過開關控制led燈程式碼理解(適合所有開關型別)

arduino通過開關控制led燈程式碼理解(適合所有開關型別)

方法一

const int LED=13;    //宣告變數 LED燈接在13針腳;
const int BUTTON=7;  //宣告變數,按鈕接在第7針腳;
int val=0; //宣告變數,用來儲存按鈕返回值HIGH或者LOW;
int val_old=0;//宣告變數,儲存上一次按鈕返回值;比對val和val_old的值,來判斷按鈕是按下還是擡起
             //val==LOW && val_old==HIGHT 擡起狀態;val==HIGH && val_old==LOW 按下狀態;
int state=0;//0 off,1 on 宣告變數,起到中轉的作用,小技巧;
void setup() //初始化; { pinMode(LED,OUTPUT); //定義LED燈輸入模式; pinMode(BUTTON,INPUT);//定義BUTTON為輸出模式; } void loop() { val=digitalRead(BUTTON);//讀取數字針腳的值; if((val==HIGH) && (val_old==LOW))//比較前一次和現在的按鈕返回的值, //只有現在按下按鈕這個狀態下,才改變state的值 { state=1-state; } if
((val==LOW && val_old==HIGH)) //去抖的作用,一般10-15ms; { delay(10); } val_old=val;//把現在按鈕返回的值賦予val_old; if(state==1)//控制燈開關; { digitalWrite(LED,HIGH); } else { digitalWrite(LED,LOW); } }

這裡寫圖片描述
方法二(使用了內部上拉電阻)

// 按鍵控制LED燈開關,使用內部上拉電阻;
const int LED = 13;
const int BUTTON = 7
; boolean state = false;//宣告led燈的狀態,預設是關的; void setup { pinMode(LED,OUTPUT); pinMode(BUTTON,INPUT_PULLUP);//按鈕接內部上拉電阻; } void loop { while(digitalRead(BUTTON) == HIGH){}//模擬:等待開關被按下; //因為使用了上拉電阻,未按下 //之前,按鈕一直保持著高電平。 //直到按鈕被按下,條件為假,跳出 //迴圈,執行下邊的語句。 if(state = true)//判斷:如果燈的狀態是亮,則熄滅它,然後將狀態 //標記為滅(使用了取反的技巧);否則,如果燈的 //狀態是滅的,則點亮它,然後將狀態標記為亮(使用取反); { digitalWrite(LED,LOW); state = !state;//標記燈的當前狀態 } else { digitalWrite(LED,HIGH); state = !state;//標記燈的當前狀態 } delay(500); }

這裡寫圖片描述