Здравствуйте! Столкнулся с проблемой, цикл While бесконечен даже после выполнения условий. Вот код: Код (C++): #define BUTTON_PIN1 A0 // Кнопки на режим №1... #define BUTTON_PIN2 A1 // и режим №2 #define Led1 8 // Светодиоды #define Led2 11 // boolean L1 = false; // Сами режим №1 boolean L2 = false; // и №2 boolean buttonIsUp1 = digitalRead(BUTTON_PIN1); boolean buttonIsUp2 = digitalRead(BUTTON_PIN2); void setup() { pinMode(Led1, OUTPUT); // Вход/Выход pinMode(Led2, OUTPUT); // pinMode(BUTTON_PIN1, INPUT_PULLUP); // pinMode(BUTTON_PIN2, INPUT_PULLUP); // } void loop() { buttonIsUp1 = digitalRead(BUTTON_PIN1); // Проверки на нажатие клавиш buttonIsUp2 = digitalRead(BUTTON_PIN2); // if (buttonIsUp1 = true) // Если кнопка №1 нажата... { delay(100); // Включается "Антидребезг" L2 = false; // Если Вы перешли с режима №2 на №1, №2 выключается L1 = !L1; // Режим менят свой статус (ВКЛ/ВЫКЛ), при втором нажатие светодиоды выключаются } if (buttonIsUp2 = true) // По аналогии { delay(100); // L1 = false; // L2 = !L2; // } while (L1 = true) // Режим №1 { digitalWrite(Led2, LOW); // 2 секунды один светодиод, 0.1 секунда второй digitalWrite(Led1, HIGH); // delay(2000); // digitalWrite(Led1, LOW); // digitalWrite(Led2, HIGH); // delay(100); // } while (L2 = true) // Режим №2 { digitalWrite(Led2, LOW); // 5 секунд первый, 2 секунды - второй digitalWrite(Led1, HIGH); // delay(5000); // digitalWrite(Led1, LOW); // digitalWrite(Led2, HIGH); // delay(2000); // } } За основу кода взят урок с "Амперка ВИКИ" : http://wiki.amperka.ru/конспект-arduino:кнопочный-переключатель Цель работы: Светодиоды должны мигать с паузой, продолжительность которой изменяется в связи с выбранным режимом (на ВИКИ предоставляется обычный светильник с положениями ВКЛ/ВЫКЛ) Что происходит: при включении устройства светодиоды начинают мигать, не дождавшись включения с кнопки, работает лишь один режим, его нельзя выключить или переключиться на режим №2 Вид устройства: 6ой цифровой пин -> кнопка "Тройка" №1 7ой цифровой пин -> кнопка "Тройка" №2 8ой цифр. пин -> резистор 220 Ом -> Светодиод №1 -> GND 11ый цифр. пин -> резистор 220 Ом -> Светодиод №2 -> GND Плата - Arduino Due Заранее спасибо!
Код (C++): if (buttonIsUp1 == true) // Если кнопка №1 нажата... { delay(100); // Включается "Антидребезг" L2 = false; // Если Вы перешли с режима №2 на №1, №2 выключается L1 = !L1; // Режим менят свой статус (ВКЛ/ВЫКЛ), при втором нажатие светодиоды выключаются } if (buttonIsUp2 == true) // По аналогии { delay(100); // L1 = false; // L2 = !L2; // } while (L1 == true) // Режим №1 { digitalWrite(Led2, LOW); // 2 секунды один светодиод, 0.1 секунда второй digitalWrite(Led1, HIGH); // delay(2000); // digitalWrite(Led1, LOW); // digitalWrite(Led2, HIGH); // delay(100); // } while (L2 == true) // Режим №2 { digitalWrite(Led2, LOW); // 5 секунд первый, 2 секунды - второй digitalWrite(Led1, HIGH); // delay(5000); // digitalWrite(Led1, LOW); // digitalWrite(Led2, HIGH); // delay(2000); // } Проблема осталась, изменился лишь режим, сначала первый "крутился", теперь второй...
Код (C++): if (buttonIsUp1 = true) // Если кнопка №1 нажата... { delay(100); // Включается "Антидребезг" L2 = false; // Если Вы перешли с режима №2 на №1, №2 выключается L1 = !L1; // Режим менят свой статус (ВКЛ/ВЫКЛ), при втором нажатие светодиоды выключаются } Здесь, по крайней мере я думаю, что он так изменяется