Как написать условие
- Войдите на сайт для отправки комментариев
Чт, 31/08/2017 - 23:53
Доброго времени суток!
В общем такая проблема, есть три скажем тумблера, необходимо написать код так, что бы сначала проверялось включены ли первые два тумблера, а дальше
1) если третий тумблер выключен, то программа бы ждала его включения и после включала светодиод
2) если третий тумблер включен, то необходимо его сначала выключить, а потом снова включить, и тогда бы загорался светодиод.
if (buttonState == HIGH) {
if (buttonState2 == HIGH) { need = true; }
else {need = false;}}
else {need = false;} // так проверяется условие что 2 тумблера включены, в случае соблюдения условия в переменную need записывается true
if (need == true) // а вот тут пошли проблемы
Может ли кто нибудь помочь с этим?
Вы не могли бы подсказать как? По крайней мере с этим алгоритмом проверка проходила, что дальше делать не пойму
if (buttonState == HIGH && buttonState2 == HIGH ) { need = true; } else {need = false;} if (need == true) {digitalWrite(ledPin, HIGH);} else {digitalWrite(ledPin, LOW);}Так лучше? Все же как сделать условие
1) если третий тумблер выключен, то программа бы ждала его включения и после включала светодиод
2) если третий тумблер включен, то необходимо его сначала выключить, а потом снова включить, и тогда бы загорался светодиод.
Ну скорее всего у вас первые два это не тумблеры а датчики. А светодиод это индикатор. Опять вы не сказали как они подключены к питанию, к земле. Подтяжка программная или резисторная.
Ну и нахера подтяжка на землю. Проще повесить кнопки на землю, а подтяжку сделать программную.
Вот скечь
//**/ unsigned long mill; //------Cl_Led---------------------- // класс светодиод class Cl_Led { protected: const byte pin; public: Cl_Led(byte pin_): pin(pin_) {} void setup() { pinMode(pin, OUTPUT); OFF(); } void ON() { digitalWrite(pin, HIGH); } void OFF() { digitalWrite(pin, LOW); } }; //------Cl_Btn---------------------- // класс кнопка class Cl_Btn { protected: const byte pin; void (*Do)(); bool bounce = 0; bool btn = 1, oldBtn; unsigned long past; public: Cl_Btn(byte pin_, void (*Do_)()): pin(pin_), Do(Do_) {} void setup() { pinMode(pin, INPUT_PULLUP); } void loop() { bool newBtn = digitalRead(pin); if (!bounce && newBtn != btn) { bounce = 1; past = mill; } if (bounce && mill - past >= 10) { bounce = 0 ; oldBtn = btn; btn = newBtn; if (!btn && oldBtn) (*Do)(); } } }; //-----компоновка---------------------- Cl_Led Led(/*пин*/13); void DoBtn1() { Led.ON(); } Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1); //-----main----------------------- int main() { init(); // setup() Led.setup(); Led.OFF(); Btn1.setup(); for (;;) { // loop() mill = millis(); Btn1.loop(); } return 0; } /*Скетч использует 1208 байт (3%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 24 байт (1%) динамической памяти, оставляя 2024 байт для локальных переменных. Максимум: 2048 байт. */Вот под вашу схему
//**/ unsigned long mill; //------Cl_Led---------------------- // класс светодиод class Cl_Led { protected: const byte pin; public: Cl_Led(byte pin_): pin(pin_) {} void setup() { pinMode(pin, OUTPUT); OFF(); } void ON() { digitalWrite(pin, HIGH); } void OFF() { digitalWrite(pin, LOW); } }; //------Cl_Btn---------------------- // класс кнопка class Cl_Btn { protected: const byte pin; void (*Do)(); bool bounce = 0; bool btn = 1, oldBtn; unsigned long past; public: Cl_Btn(byte pin_, void (*Do_)()): pin(pin_), Do(Do_) {} void setup() { pinMode(pin, INPUT); } void loop() { bool newBtn = digitalRead(pin); if (!bounce && newBtn != btn) { bounce = 1; past = mill; } if (bounce && mill - past >= 10) { bounce = 0 ; oldBtn = btn; btn = newBtn; if (btn && !oldBtn) (*Do)(); } } }; //-----компоновка---------------------- Cl_Led Led(/*пин*/13); const byte sen1Pin =/*пин*/5; const byte sen2Pin =/*пин*/7; void DoBtn1() { if (digitalRead(sen1Pin) && digitalRead(sen1Pin))Led.ON(); } Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1); //-----main----------------------- int main() { init(); // setup() pinMode(sen1Pin, INPUT); pinMode(sen2Pin, INPUT); Led.setup(); Led.OFF(); Btn1.setup(); for (;;) { // loop() mill = millis(); Btn1.loop(); } return 0; } /*Скетч использует 1258 байт (3%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 24 байт (1%) динамической памяти, оставляя 2024 байт для локальных переменных. Максимум: 2048 байт. */Проблема в том что там должны использоваться рубильники электрические, а не кнопки, то есть просто прерыватель контакта, по типу вот такого
Не понимаю, зачем рубильник на вывод Ардуины?
Не понимаю, зачем рубильник на вывод Ардуины?
возможно, для создания учебного стенда
для антуража)) готовим небольшой перфоманс, и вот такая штука требуется, думаю как сделать
а вот тут пошли проблемы
Они пошли гораздо раньше.
для антуража))
Очередная квест-комната?