Реле с управляемой задержкой .
- Войдите на сайт для отправки комментариев
Народ, Есть Lcd Keypad Shield, на нем экран и 5 кнопок, подключенных на аналог 0...
Нужно управлять 2мя релюхами с возможностью калибровки выключения после сработки с шагом в 500мс. В данный момент есть рабочий скетч, но калибровать приходится через перепрошивку, а ето напрягает, т.к ето нужно делать часто...
2е кнопки включают реле, 1дна выключает обе, ... Есть еще свободные 2е кнопки... Можно ли их прикрутить для регулировки задержек на выключение ..?... Смотрел много таймеров, но всё не то, нужно что то проще не лазя в глубину... Прошу помощи и прилагаю скетч...
------------------------------------------------------------------------------------------------------------------------------------
#include <LiquidCrystal.h> //подключение библиотеки
#define BUTTON_NONE 0 //значение для BUTTON_NONE
#define BUTTON_RIGHT 1 //значение для BUTTON_RIGHT
#define BUTTON_UP 2 //значение для BUTTON_UP
#define BUTTON_DOWN 3 //значение для BUTTON_DOWN
#define BUTTON_LEFT 4 //значение для BUTTON_LEFT
#define BUTTON_SELECT 5 //значение для BUTTON_SELECT
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); //создание объекта дисплея
int Relay0 = 0;
int Relay1 = 1;
int stateRelay0 = LOW;
int stateRelay1 = LOW;
int stateButton;
int previous = LOW;
long time = 0;
long debounce = 500;
int stayON = 500; //задержка на 5000 мс
int getPressedButton() //инициализация переменной
{
int buttonValue = analogRead(0); // чтение значения с аналогового входа
delay(200); //защита от дребезга
if (buttonValue < 50) { //если при нажатии кнопки значение меньше 50
return BUTTON_RIGHT; // значит нажата кнопка BUTTON_RIGHT
}
else if (buttonValue < 150) { //если при нажатии кнопки значение меньше 150
return BUTTON_UP; // значит нажата кнопка BUTTON_UP
}
else if (buttonValue < 300) { //если при нажатии кнопки значение меньше 300
return BUTTON_DOWN; // значит нажата кнопка BUTTON_DOWN
}
else if (buttonValue < 500) { //если при нажатии кнопки значение меньше 500
return BUTTON_LEFT; // значит нажата кнопка BUTTON_LEFT
}
else if (buttonValue < 800) { //если при нажатии кнопки значение меньше 800
return BUTTON_SELECT; // значит нажата кнопка BUTTON_SELECT
}
return BUTTON_NONE; //иначе, нажата кнопка BUTTON_NONE
}
void setup()
{
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
lcd.begin(16, 2); //Инициализация дисплея: 2 строки по 16 символов
lcd.print("smartelements.ru"); //Выводи надпись www.smartelements.ru
delay(1000); //задержка 1 сек
}
void loop()
{
int button = getPressedButton(); //получение нажатой кнопки
lcd.clear(); // очистка дисплея
switch (button) //в зависимости от нажатой кнопки
{
case BUTTON_RIGHT: // при нажатии кнопки со значением BUTTON_RIGHT
lcd.print("BUTTON: RIGHT");//вывести надпись BUTTON: RIGHT на экран
break; //прервать выполнение
case BUTTON_LEFT: // при нажатии кнопки со значением BUTTON_LEFT
lcd.print("BUTTON: LEFT"); digitalWrite(Relay2, LOW); digitalWrite(Relay1, LOW);//вывести надпись BUTTON: LEFT на экран
break; //прервать выполнение
case BUTTON_UP: // при нажатии кнопки со значением BUTTON_UP
lcd.print("BUTTON: UP"); digitalWrite(Relay2, LOW); delay(500); digitalWrite(Relay1, HIGH); //вывести надпись BUTTON: UP на экран
break; //прервать выполнение
case BUTTON_DOWN: // при нажатии кнопки со значением BUTTON_DOWN
lcd.print("BUTTON: DOWN"); digitalWrite(Relay1, LOW); delay(500); digitalWrite(Relay2, HIGH); //вывести надпись BUTTON: DOWN на экран
break; //прервать выполнение
case BUTTON_SELECT: // при нажатии кнопки со значением BUTTON_SELECT
lcd.print("BUTTON: SELECT"); digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); //вывести надпись BUTTON: SELECT на экран
break; //прервать выполнение
}
}
не понятно, нафига в этом скетче экран и кнопки, если все что они делают - выводят надписи типа "Кнопка вверх".
Самое очевидное в таком раскладе - написать простенькое меню для экрана и регулировать задержки этими же кнопками. дополнительные кнопки не нужны
Примеров построения меню в интернете и на нашем сайте много, только вчера обсуждали.
Вместо 500 в дилэи пишете переменную, а свободными кнопками увеличиваете или уменьшает ее значение.
Как вариант https://remotexy.com/ru/
Можно вводить значения, выводить, строить графики и т.д. И главное кнопки ненадо городить))
Можно ли пример какой нибудь..?