emergency stop

gooflee
Offline
Зарегистрирован: 06.07.2017

Дорого времени суток, у меня возникла такая проблема. Когда я загружаю данный кодб он частично работает, тобиш выполняет только одну функцию, и это  (regim == 1). Но (regim == 2) как будто отсутвует. А задумка вот в чем: должен быть так называемый "аварийный стоп", что бы остановился цыкл если что то пошло не так.
Помогите пожалуйста решить данную проблему, буду очень благодарен!
(вот код)

int redled=13;  // пин 13, первый светодиод
int blueled=12; // пин 12, второй светодиод
int butpin=10;  // пин 10, кнопка
int flag = 0; // флаг состояния
int regim = 0; // Переключалка
 
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  
}
void loop()
{
if(digitalRead(butpin) == HIGH && flag == 0)
{
{
regim ++;
flag = 1;
 
if (regim > 2)
{
  regim = 1;
}
}
if(digitalRead(butpin) == HIGH && flag == 1)
{
  flag = 0;
}
 if (regim == 1)
 {
digitalWrite(redled, HIGH);   // 1 0
digitalWrite(blueled, LOW);
delay(1000);
digitalWrite(redled, LOW);    // 0 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);   // 1 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, LOW);    // 0 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);   // 1 0
digitalWrite(blueled, LOW);
delay(1000);
digitalWrite(redled, LOW);    // 0 0
digitalWrite(blueled, LOW);
}
if (regim ==2)
{
  digitalWrite(redled, HIGH);
digitalWrite(blueled, LOW);
}
}
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вставьте код как положено.

gooflee
Offline
Зарегистрирован: 06.07.2017
int redled=13;  // пин 13, первый светодиод
int blueled=12; // пин 12, второй светодиод
int butpin=10;  // пин 10, кнопка
int flag = 0; // флаг состояния
int regim = 0; // Переключалка

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  
}
void loop()
{
if(digitalRead(butpin) == HIGH && flag == 0)
{
{
regim ++;
flag = 1;

if (regim > 2)
{
  regim = 1;
}
}
if(digitalRead(butpin) == LOW && flag == 1)
{
  flag = 0;
}
 if (regim == 1)
 {
digitalWrite(redled, HIGH);   // 1 0
digitalWrite(blueled, LOW);
delay(1000);
digitalWrite(redled, LOW);    // 0 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);   // 1 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, LOW);    // 0 1
digitalWrite(blueled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);   // 1 0
digitalWrite(blueled, LOW);
delay(1000);
digitalWrite(redled, LOW);    // 0 0
digitalWrite(blueled, LOW);
}
if (regim ==2)
{
  digitalWrite(redled, HIGH);
digitalWrite(blueled, LOW);
}
}
}


 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А теперь вразумительно опишите логику работы - что по-Вашему должно происходить. Из программы это никак неочевидно.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
int redled = 13; // пин 13, первый светодиод
int blueled = 12; // пин 12, второй светодиод
int butpin = 10; // пин 10, кнопка
int flag = 0; // флаг состояния
bool regim; // Переключалка
uint32_t time = 0;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(10, INPUT);
}
void loop() {
  static int myVar = 0;
  if (digitalRead(butpin) == HIGH && flag == 0)
  {
    regim = !regim;
    flag = 1;
  }
  if (digitalRead(butpin) == LOW && flag == 1)
  {
    flag = 0;
  }
  if (regim) {
    if (millis() - time >= 1000) {
      time = millis();
      switch (myVar) {
        case 0:
          digitalWrite(redled, HIGH);   // 1 0
          digitalWrite(blueled, LOW);
          myVar++;
          break;
        case 1:
          digitalWrite(redled, LOW);    // 0 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 2:
          digitalWrite(redled, HIGH);   // 1 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 3:
          digitalWrite(redled, LOW);    // 0 1
          digitalWrite(blueled, HIGH);
          myVar++;
          break;
        case 4:
          digitalWrite(redled, HIGH);   // 1 0
          digitalWrite(blueled, LOW);
          myVar++;
          break;
        case 5:
          digitalWrite(redled, LOW);    // 0 0
          digitalWrite(blueled, LOW);
          myVar = 0;
          break;
      }

    }
  }

  if (!regim) {
    digitalWrite(redled, HIGH);
    digitalWrite(blueled, LOW);
    myVar = 0;
  }
}

 

gooflee
Offline
Зарегистрирован: 06.07.2017

ой, спасибо большое, теперь всё работает так как надо! =)