• 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);
    
    }
  • 相关阅读:
    总结的git操作命令小抄集
    两种方式实现压缩文件或文件夹
    eclipse 中执行 main 函数如何添加参数
    alert()、confirm()和prompt()的区别与用法
    阿里某安全工程师写的明星代码
    在 Linux 环境下报错 java.lang.reflect.InvocationTargetException
    MyBatis学习-SQL 符号篇
    初识IP基础分类、CIDR
    Snort
    Dshell----开源攻击分析框架
  • 原文地址:https://www.cnblogs.com/fafafa123/p/11705268.html
Copyright © 2020-2023  润新知