Как правильно работать с таймером
- Войдите на сайт для отправки комментариев
Втр, 24/11/2020 - 16:54
Добрый день! У меня есть задача , включить реле на три секунды по нажатию кнопки , кнопка фиксируемая , кнопка остаётся во включеном состоянии , по выключению кнопки реле опять включается на три секунды. У меня не работает вторая половина кода на выключение . прошу помощи с 61 строчки
[code]
#include <Bounce2.h>
#define PIN_RELAY = 12;
#define ledPin = 13;
#define buttonPin = 14;
#define buttonPin = 15;
long previousMillis = 0;
long previousMillis2 = 0;
boolean i;
boolean k;
int value;
int value2 = 0;
int buttonState;
int lastButtonState = 0;
Bounce debouncer1 = Bounce();
void setup() {
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
debouncer1.attach(14);
debouncer1.interval(500);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT);
pinMode(15, INPUT_PULLUP);
}
void loop() {
// Просто моргалка на плате ( при работающей программе )
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(200); // wait for a second
debouncer1.update();
int value1 = debouncer1.read();
if (value1 == LOW )
{
i = 1;
digitalWrite(12, HIGH);
}
if ( millis() - previousMillis > 100 && value1 == LOW)
{
previousMillis = millis();
value++;
}
else
{
value = 0;
}
if (value >= 5)
{
digitalWrite(12, LOW);
value = 0;
k = 1;
}
if ( k == 1 && value1 == LOW)
{
digitalWrite(12, LOW);
}
if ( k == 1 && value1 == HIGH)
{
digitalWrite(12, HIGH);
k = 0;
if ( millis() - previousMillis > 100 && value1 == HIGH && k== 0)
{
previousMillis = millis();
value++;
}
else
{
value = 0;
}
if (value >= 5)
{
digitalWrite(12, LOW);
value = 0;
}
}
}
[/code]if ( k == 1 && value1 == HIGH)
{
digitalWrite(12, HIGH);
k = 0;
if ( millis() - previousMillis > 100 && value1 == HIGH && k== 0)
{
previousMillis = millis();
value++;
}
else
{
value = 0;
}
if (value >= 5)
{
digitalWrite(12, LOW);
value = 0;
}
}
}
[/code]
вот тут для образца, 2000 поменять на 3000
Спасибо за помощь , я с флагами ещё не работал буду разбираться. В этом коде осталось дописать только включение реле на сбросе кнопки.
Просто добавляем переменную "предыдущее состояние кнопки".
Если вдруг предыдущее и текущее отличаются, то включаем реле на 3секунды и обновляем предыдущее=текущее