arduino通過開關控制led燈程式碼理解(適合所有開關型別)
阿新 • • 發佈:2019-01-31
方法一
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);
}