while;
- Войдите на сайт для отправки комментариев
Сб, 29/06/2019 - 01:23
Добрый день
Есть так :
Мигает LED3, нажимаем кнопку PB12, LED3 мигает в течение 2 секунд и выключается, начинает мигать LED2 и загорается LED1.
Отпускаем кнопку, мигает LED3 и выключается LED1.
Все правильно.
Нужно чтобы это происходило только при нажатии кнопки, значит чтобы "loop" включался когда кнопка нажата и выключался когда ее отпустишь.
Для этого применил функцию " while", все работает как надо за исключением LED1, он не выключается после того когда отпускаю кнопку , пробовал поставить " break; " в разные места но не получилось.
Как исправить ?
int LED1 = PB15; // int LED2 = PB14; int LED3 = PC13; int button = PB12; boolean LED1State = false; boolean LED2State = false; long buttonTimer = 0; //long longPressTime = 2500; long longPressTime = 1000; boolean buttonActive = false; boolean longPressActive = false; void setup() { pinMode(button, INPUT_PULLDOWN); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { // while ((digitalRead(button)) == HIGH) { if (digitalRead(button)) { if (buttonActive == false) { buttonActive = true; buttonTimer = millis(); } if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) { longPressActive = true; LED1State = 1; digitalWrite(LED1, LED1State); } } else { LED1State = 0; digitalWrite(LED1, LED1State); if (buttonActive == true) { if (longPressActive == true) { longPressActive = false; } else buttonActive = false; } } if (LED1State == 1) { delay(1); Serial.print(1); digitalWrite(LED2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED2, LOW); // turn the LED off by making the voltage LOW delay(1000); } else { digitalWrite(LED3, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(LED3, LOW); // turn the LED off by making the voltage LOW delay(500); } } }
Плохая идея, бороться с циклом другим циклом. Анализируйте нажатие в начале луп и выполняйте-невыполняйте какие-либо действия.
И это, неправильно. Куда делся LED2, после отпускания? Алгоритм причешите.
На чём Вы всё это запускаете? Что за плата?
На чём Вы всё это запускаете? Что за плата?
стм32дуино, судя по пинам. НО код простой, от платы не зависит... кроме подтяжки
Простой - не простой, но такие вещи надо писать. Для порядка. А то темы, подобные вот этой уже нормой стали. Стоит спросить схему или код - сразу злостный тролль и обижатель цыплят.
Простой - не простой, но такие вещи надо писать. Для порядка. А то темы, подобные вот этой уже нормой стали. Стоит спросить схему или код - сразу злостный тролль и обижатель цыплят.
не увидел обиды в теме - а это самое интересное :) Или потерли уже?
плата stm32f103, на неё есть кнопка ресет, когда её нажать LED1 выключаетьста , надо добавит функцию ресет после отпускания кнопки, что-то подобное:
Плохая идея, бороться с циклом другим циклом. Анализируйте нажатие в начале луп и выполняйте-невыполняйте какие-либо действия.
И это, неправильно. Куда делся LED2, после отпускания? Алгоритм причешите.
лооп останавливается , LED2 не мигает = хорошо - горит постоянно
Есть вероятность, что для STM32 ресет делается так:
gena321, простите, но это полный бред - останавливать LOOP ресетом :) Это почти тоже самое, как лечить мигрень гильотиной.
Ваша задачка яйца выеденного не стоит и запрсто решается в рамках обычных операторов
gena321, простите, но это полный бред - останавливать LOOP ресетом :) Это почти тоже самое, как лечить мигрень гильотиной.
Ваша задачка яйца выеденного не стоит и запрсто решается в рамках обычных операторов
лооп останавливается функций - while, ресет для выключения LED1
лооп останавливается функций - while, ресет для выключения LED1
«Всё страньше и страньше! Всё чудесатее и чудесатее!»
«Бред (лат. dēlīrium) – расстройство содержания мышления с возникновением не соответствующих реальности болезненных представлений, рассуждений и выводов, в которых больной полностью, непоколебимо убеждён и которые не поддаются коррекции» - триада Ясперса.
лооп останавливается функций - while, ресет для выключения LED1
а выключать LED молотком по сороконожке - гораздо гораздее.
добавил
и всё работает как надо
спасибо negavoid
Пожалуйста, только помните, что я оказал вам медвежью услугу - показал, как правильно сделать неправильно.