/* Урок 11. Выдержка времени. Принажати кнопки запускается таймер выдержки времени и через
установленое время (#define LEDTimer 1500 //Выдержка времени для СИД1)
загорается светодиод СИД.
После повторного нажатия опять выдерка времени и СИД гаснет.
Вот только у меня так не получается. А получилось, что после загрузки скетча в Ардуино
кнопка не реагирует, а реагирует она после выдержки установленого времени (#define LEDTimer 1500 //Выдержка времени для СИД1)
и СИД переключается одновремено с нажатием кнопки.
Подскажите пожалуйста, в чем ошибка? Спасибо.*/
#include <MsTimer2.h> //Библиотека таймера
#include <Button.h> //Библиотека кнока
#define LED_1_PIN 13 //СИД1 подключен к выводу 13
#define BUTTON_1_PIN 2 //Кнопка подключена к выводу 2
#define LEDTimer 1500 //Выдержка времени для СИД1
boolean flagLEDTimer; //признак программного таймера
int LEDCount; //счетчик таймера СИД1
Button button1 (BUTTON_1_PIN, 15); //создание объекта-кнопка
void setup(){
pinMode (LED_1_PIN, OUTPUT); //определяем вывод СИД1 как выход
MsTimer2::set(2, timerInterrupt);// задаем период прерывания по таймеру 2мс
MsTimer2::start(); //разрешаем прерывание по таймеру
}
void loop(){
//управление СИДом1
if(button1.flagClick==true){ //был клик кнопки
button1.flagClick=false; //сброс признака
if(flagLEDTimer==true){
flagLEDTimer=false; //сброс флага выдержки времени
digitalWrite(LED_1_PIN,!digitalRead(LED_1_PIN)); //инверсия состояния СИДа
}
}
}
void timerInterrupt(){ //обработчик прерывания
button1.scanState(); //вызов метода ожидания стабилбного состояния для кнопки
LEDCount++; //+1 к счетчику тамера СИД1
if(LEDCount>LEDTimer){
LEDCount=0; //сброс счетчика
flagLEDTimer=true; //установка флага выдержка времени СИД1
}
}
Эдуард порекомендовал изменить своим кодом:
Вот такой вариант не работает?
void loop(){
//управление СИДом1
if(button1.flagClick==true){ //был клик кнопки
button1.flagClick=false; //сброс признака
flagLEDTimer=true; //установка флага выдержка времени СИД1
}
}
void timerInterrupt(){ //обработчик прерывания
button1.scanState(); //вызов метода ожидания стабилбного состояния для кнопки
if( flagLEDTimer == true ) {
LEDCount++; //+1 к счетчику тамера СИД1
if(LEDCount>LEDTimer){
digitalWrite(LED_1_PIN,!digitalRead(LED_1_PIN)); //инверсия состояния СИДа
flagLEDTimer=false;
}
}
else LEDCount=0;
}
Переписал код предложенный Эдуардом.
Не работает. Кнопка не реагирует, СИД не меняет свое состояние.
Участники форума, дайте дельный совет.
Урок 11. Программные таймеры
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей