Mixly按鍵控制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);
}
 
方法三:這個比較好理解(引自 趙英傑老師教材)
 
const byte LED = 13;
const byte SW = 8;
boolean lastState = LOW;//記錄上次的開關狀態,初始化為LOW
boolean toggle = LOW;//輸出給LED的信號,初始化為LOW
byte click = 0;開關信號的改變次數,初始化為0
 
void setup() {
pinMode(LED,OUTPUT);
pinMode(SW,INPUT);
lastState = digitalRead(SW);//讀取開關的初始值
}
 
void loop() {
boolean b1 = digitalRead(SW);//讀取目前的開關狀態
 
if(b1 != lastState)//如果與以前的開關至不同
{
delay(20);//去震動
boolean b2 = digitalRead(SW);//再讀取一次開關狀態
 
if(b2 == b1)//確認兩次開關狀態是否一致
{
lastState = b1;//存儲開關狀態
click++;//次數累計
}
}
if(click == 2)//如果開關狀態改變2次
{
click = 0;//歸零
toggle = !toggle;//取相反值
digitalWrite(LED,toggle);
}
}

 

 

 
 
上課實現:
#include <SevenSegmentExtended.h>
#include <SevenSegmentTM1637.h>

volatile int MINUTE;
volatile int SECOND;
SevenSegmentExtended  display(5,13);

void setup(){
  MINUTE = 0;
  SECOND = 0;
   display.begin();
}

void loop(){
  display.setBacklight(20);
  display.printTime(MINUTE,SECOND,HIGH);
  if (SECOND == 59) {
    MINUTE = MINUTE + 1;
    SECOND = 0;

  }
  SECOND = SECOND + 1;
  if (MINUTE == 60) {
    MINUTE = 0;

  }
  delay(1000);

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM