Переключение между циклами

Levstepan
Offline
Зарегистрирован: 30.05.2014

Есть 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;
   }
   }
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

 Зацепи кнопку на прерывание INT0

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Нужно избавиться от циклов в лупе (они там ни к чему). И внимательнее код посмотрите (на предмет присвоения (=) и сравнения (==)). 

MaksVV
Offline
Зарегистрирован: 06.08.2015

для начала Вместо while поставить if, а то программа там застревает

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Что мешает за место while использовать switch ?
И если уж так сильно хочется использовать delay(), то кнопку нужно обрабатывать в прерывании