Как правильно работать с таймером
- Войдите на сайт для отправки комментариев
Втр, 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секунды и обновляем предыдущее=текущее