Arduino 按钮控制LED灯亮度

按下按钮开关可以打开LED灯
再按一遍关闭LED灯
长按按钮可以调节LED灯的亮度
再关闭可以保持当前选择的亮度。

//LED是9 , BUTTON是2
int val = 0; //存储输入引脚状态
int old_val = 0; //存储val上一状态数值
int state = 0; //当state=0时关闭LED灯,state=1时开启LED灯
int brightness = 128; //存储方式数值,128为中间值

unsigned long startTime = 0; //按下按钮的开始时间

void setup() {
  pinMode(9, OUTPUT); //设定LED引脚9为输出接口
  pinMode(2, INPUT); //设定BUTTON引脚2为输入接口
}

void loop() {
  val = digitalRead(2); //读取按钮状态并存储至val
  //检测按钮状态变化过程(设定LED灯状态)
  //如果你的按钮开关返回值和我的相反,请修改这个条件语句,将LOW和HIGH交换一下就可以了。
  if ((val == LOW) && (old_val == HIGH)) {
    state = 1 - state; //如果按钮从松开转变为按下状态,则改变state变量的数值
    startTime = millis(); //暂存最后一次按钮按下的开始时间(毫秒)
    delay(10);
  }

  //按住按钮并保持不放(调节亮度)
  //如果你的按钮开关返回值和我的相反,请修改这个条件语句,将LOW换成HIGH就可以了。
  if ((val == LOW) && (old_val == LOW)) {
    //如果按住按钮持续时间超过0.5秒(500毫秒)
    if (state == 1 && (millis() - startTime) > 500) {
      brightness++;//亮度变量逐渐+1
      delay(10);//延时10毫秒避免增加速度过快
      if (brightness > 255) { //255是亮度变量最大值(PWM输出最大值)
        brightness = 0; //如果亮度变量增加后结果大于255,则重新设定成0,灯光亮度由暗到亮
      }
    }
  }
  old_val = val; //存储当前val变量状态,用来判断按钮变化状态
  if (state == 1) 
    analogWrite(9, brightness); //点亮LED灯并设定亮度
  else 
    analogWrite(9, 0); //关闭LED灯
}



版权声明:本文为weixin_44051060原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。