Переключение между циклами
- Войдите на сайт для отправки комментариев
Вс, 18/10/2020 - 09:12
Есть 3 проблемы которые я пытаюсь решить.
1)Делаю стробоскоп на 2 канала, не могу реализовать переключение между циклами по нажатии кнопки в приведенном ниже коде он застревает в 1 режиме и никак не реагирует на кнопку
2)При задержках (delay), когда мк в ступоре нет возможности обработать нажатие кнопки
3)Очень бы хотелось залить всё это в тини13 (1кб) памяти, реально ли это вообще?
const int buttonPin = 7; // the number of the pushbutton pin const int ledPin1 = 4; // the number of the LED pin const int ledPin2 = 5; int regim = 1; int flag = 0; void setup() { Serial.begin(9600); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH && flag == 0) { regim++; flag = 1; if (regim > 4) { regim = 1; } } if (digitalRead(buttonPin) == LOW && flag == 1) { flag = 0; Serial.println("button"); } while (regim == 1) { Serial.println("regim1"); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); //delay (100); if(regim!=1) break; } while (regim = 2) { Serial.println("regim2"); digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); //delay (100); if(regim!=2) break; } }
Зацепи кнопку на прерывание INT0
Нужно избавиться от циклов в лупе (они там ни к чему). И внимательнее код посмотрите (на предмет присвоения (=) и сравнения (==)).
для начала Вместо while поставить if, а то программа там застревает
Что мешает за место while использовать switch ?
И если уж так сильно хочется использовать delay(), то кнопку нужно обрабатывать в прерывании