Добрый день форумчане. Задача состоит в следующем: Нажимаем (назовем ее) кнопка1, реле1 и реле2 включаются, нажимаем кнопка2 выключается реле1, при повторном нажатии на кнопка 2 выключается реле2
Конечный автомат) Есть три состояния 1 Ждём когда нажмут кнопку 1 2 ждем когда нажмут кнопку 2 3 Ждем когда нажмут кнопку 2 второй раз. А что должно случится если в состоянии 1 нажмут кнопку 2? А что будет если в состоянии 2 и 3 нажмут кнопку 1?
Если в состоянии1 нажмут кнопку 2 ничего не произойдет в состоянии 2 и 3 если нажмут кнопку один опять два реле включаться. Не могли бы вы подсказать програмно как написать?
Вроде никаких взаимоисключающих условий. Первая кнопка всегда включает оба реле. Вторая, по очереди отключает сначала первое, потом второе. Вечером сделаю.
А я пока оставлю это здесь для топикстартера http://wiki.amperka.ru/программирование:конечный-автомат
где-то так. Компилируется, но на железе не проверял. Код (Text): #include <DI.h> #define KEY1_PIN 5 #define KEY2_PIN 6 #define RELAY1_PIN 7 #define RELAY2_PIN 8 DI Key1(KEY1_PIN, 10), Key2(KEY2_PIN, 10); int Mode=0; //0 - оба реле Off, 1 - оба реле On, 2 - только второе реле On bool Key2_old; void setup() { pinMode(RELAY1_PIN, OUTPUT), pinMode(RELAY2_PIN, OUTPUT); } void loop() { Key1.DI_Refresh(); Key2.DI_Refresh(); if (!(Key1.DI_Read() && Key2.DI_Read())){ //игнор одновременно нажатых клавиш if (Key1.DI_Read()) Mode=1; if (Key2.DI_Read() && !Key2_old && Mode==2) Mode=0; if (Key2.DI_Read() && !Key2_old && Mode==1) Mode=2; } digitalWrite(RELAY1_PIN, Mode==1); digitalWrite(RELAY2_PIN, Mode!=0); Key2_old = Key2.DI_Read(); } понадобится эта библиотека. https://yadi.sk/d/hGQy8xu1fZNks класс DI считывает входы клавиш и фильтрует дребезг. Кнопки должны быть подключены как здесь: http://wiki.amperka.ru/конспект-arduino:миксер Upd Переставил 2 строки местами, в исходном варианте режим 2 никогда не включался, сразу сбрасывался на 0