две кнопки, два реле, millis, Непонятное поведение контроллера.
- Войдите на сайт для отправки комментариев
Втр, 06/02/2018 - 16:42
Доброго дня!
Имеется arduino pro mini 328p
Две кнопки "Stop","Start"
Два реле:
первое и второе реле включается сразу,
через 3 сек. второе реле выключается.
Блокирую кнопку "Start" после включения.
Проблема заключается в том что при нажатии кнопки "Start" во время включенного состояния приводит к непонятной работе, а именно при нажатии кнопки Stop происходит включение второго реле и только следующее нажатие выключает оба реле.
#include <Button.h> #define RELE_1 2 // on/off #define RELE_2 3 // starting #define BUTTON_1_PIN 4 //Stop #define BUTTON_2_PIN 5 //Start boolean startStop = false; boolean blockStart = false; Button button1(BUTTON_1_PIN, 1500); Button button2(BUTTON_2_PIN, 1500); unsigned long timing; void setup() { pinMode(RELE_1, OUTPUT); pinMode(RELE_2, OUTPUT); digitalWrite(RELE_1, HIGH); digitalWrite(RELE_2, HIGH); } void loop() { button1.scanState(); button2.scanState(); if ( button1.flagClick == true ) //stop { button1.flagClick = false; digitalWrite (RELE_1, HIGH); digitalWrite (RELE_2, HIGH); blockStart = false; } if ( (button2.flagClick == true) && (blockStart == false) ) //start { button2.flagClick = false; blockStart = true; startStop = true; timing = millis(); digitalWrite (RELE_1, LOW); digitalWrite (RELE_2, LOW); } if ( (millis() - timing > 3000) && (startStop == true) )//stop r2 через 3 сек. { startStop = false; digitalWrite (RELE_2, HIGH); } }
Вопрос Можно закрывать!
flagClick Ведь остаётся, а по нажатию Stop ещё и block переходит в false, соответственно снова включается start...
две кнопки, два реле, millis,
Так надо было и miilis'а два использовать!
Собственно вот что получилось, сильно не смейтесь над кодом, это моя первая программа.
Вопрос? Как улучшить код в плане правильности программирования? может лучше использовать switch case или for ?
В будущем планируется доработать устройство путём добавления датчика холла, сенсора давления и возможно жк дисплея. Буду переделывать алгоритм по отключению пускового реле по оборотам двигателя и отключение включение двигателя по определённому давлению Хотя данный алгоритм вполне справляется со своей работой, но при первом включении компрессора запуск происходит быстрее т.к. нагрузка на ротор меньше из-за отсутствия давления в системе, что соответственно приводит к передерживанию пускового реле, и вилка по давлению от 5 до 8 bar, а хотелось бы 10 -12 bar с возможностью регулировки.
может лучше использовать switch case или for ?
Лучше для чего?