Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 为什么';LED灯不关了吗?_Timer_Arduino_Arduino Uno_Alarm_Debounce - Fatal编程技术网

Timer 为什么';LED灯不关了吗?

Timer 为什么';LED灯不关了吗?,timer,arduino,arduino-uno,alarm,debounce,Timer,Arduino,Arduino Uno,Alarm,Debounce,我有一个程序(复制如下),它有一个10秒后启动的警报,启动一个每两秒闪烁一次的LED。我想按下一个按钮,关闭报警/LED。LED按预期闪烁,但按下按钮时不会熄灭。知道为什么吗?代码如下: #包括 #包括 #定义buttonPin 2//将针脚2指定为buttonPin #定义LED引脚13//将引脚13指定为LED引脚 int buttonState;//用于读取按钮状态的变量 int lastButtonState=低; 无符号长lastDebounceTime=0;//上次切换输出引脚的时间

我有一个程序(复制如下),它有一个10秒后启动的警报,启动一个每两秒闪烁一次的LED。我想按下一个按钮,关闭报警/LED。LED按预期闪烁,但按下按钮时不会熄灭。知道为什么吗?代码如下:

#包括
#包括
#定义buttonPin 2//将针脚2指定为buttonPin
#定义LED引脚13//将引脚13指定为LED引脚
int buttonState;//用于读取按钮状态的变量
int lastButtonState=低;
无符号长lastDebounceTime=0;//上次切换输出引脚的时间
无符号长去BounceDelay=50;//去盎司时间;如果输出闪烁,则增加
无效设置(){
Serial.begin(9600);//启动串行监视器
设置时间(0,0,0,1,12018);//设置时间为2018年1月1日00:00:00
Alarm.alarmRepeat(0,0,10,DailyAlarm);//10秒内触发报警
pinMode(发光二极管引脚,输出);//指定发光二极管引脚为发光二极管输出引脚。
pinMode(buttonPin,输入);//指定buttonPin作为输入pin
//digitalWrite(ledPin,ledState);//LED最初关闭
}
void循环(){
数字时钟显示器();
闹钟。延迟(1000);//在时钟显示之间等待一秒钟
int reading=数字读取(按钮输入);
如果(正在读取!=lastButtonState){
lastDebounceTime=millis();
}
如果((毫秒()-lastDebounceTime)>debounceDelay){
如果(读取!=按钮状态){
按钮状态=高;
串行打印(按钮状态);
}
}
}
void DailyAlarm(){
Serial.println(“报警”);
while(buttonState==低){
闪烁(2000);//每2秒闪烁一次
}
}
无效闪烁(整数周期){
数字写入(ledPin,高电平);
延迟(周期/2);
数字写入(ledPin,低电平);
延迟(周期/2);
}
void digitalClockDisplay(){
//数字时钟显示时间
Serial.print(hour());
打印数字(分钟();
打印数字(第二个());
Serial.println();
}
无效打印位数(整数位数){
连续打印(“:”);
如果(数字<10)
Serial.print('0');
串行打印(数字);
}
您尚未初始化按钮状态

试一试

不要混合整数和布尔值 用这个

而不是

int lastButtonState = LOW;

DailyAlarm应该包含一个无限循环吗?:}我希望当buttonState处于低位时,每日闹钟会一直闪烁,当我按下按钮时,buttonState会变为高位,从而停止循环。不知何故,这并没有发生。一个谨慎的步骤可能是将
blink(…)
组合到
loop()
-它可以从那里调用,不一定需要将代码移到另一个位置-并放弃显示的无限循环。原因是:,因此,当触发报警中断时,它进入从不存在的blinkloop,中断无法完成,因此执行永远不会返回到主循环:}
boolean buttonState = LOW
boolean lastButtonState = LOW;
int lastButtonState = LOW;