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灯
}


要通过按钮调节LED亮度,你通常需要使用微控制器或者一个具有数字输出和模拟输入功能的开发板。下面是一个简化的步骤说明,这里以Arduino开发板为例: 1. 硬件连接: - 将LED的一个引脚连接到微控制器的数字输出引脚,另一个引脚连接到地(GND)。 - 将一个按钮的一端连接到微控制器的另一个数字输入引脚,另一端连接到地(GND)。 2. 编写代码: - 配置数字输出引脚为PWM输出,因为PWM信号可以用来调节LED亮度。 - 设置按钮的输入引脚为输入模式,并且可能需要启用内部上拉电阻,或者外接上拉电阻。 - 使用一个变量来保存LED亮度值。 - 当按钮被按下时,通过改变PWM信号的占空比来调整LED亮度。 以下是一个简单的Arduino代码示例: ```cpp const int ledPin = 9; // LED连接到数字引脚9 const int buttonPin = 2; // 按钮连接到数字引脚2 int ledBrightness = 128; // LED初始亮度值,范围0(关闭)到255(最亮) int buttonState = 0; // 存储按钮状态 void setup() { pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式 pinMode(buttonPin, INPUT_PULLUP); // 设置按钮引脚为输入模式,并启用内部上拉电阻 } void loop() { buttonState = digitalRead(buttonPin); // 读取按钮状态 if (buttonState == LOW) { // 如果按钮被按下 ledBrightness += 10; // 增加亮度值 if (ledBrightness > 255) { ledBrightness = 0; // 如果亮度超过最大值,重置为0 } analogWrite(ledPin, ledBrightness); // 调整LED亮度 delay(100); // 简单的消抖延时 while(digitalRead(buttonPin) == LOW); // 等待按钮释放,实现简单的按一次增一次亮度 } } ``` 在这个代码中,每次按下按钮LED亮度就会增加。当亮度超过最大值255时,它会重置为0。这个简单的程序并没有实现复杂的亮度调整算法,但可以作为一个基础来进一步开发。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值