Переключение между циклами
- Войдите на сайт для отправки комментариев
Вс, 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(), то кнопку нужно обрабатывать в прерывании