按下按钮开关可以打开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灯
}