emergency stop
- Войдите на сайт для отправки комментариев
Чт, 06/07/2017 - 15:31
Дорого времени суток, у меня возникла такая проблема. Когда я загружаю данный кодб он частично работает, тобиш выполняет только одну функцию, и это (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);
}
}
}
Вставьте код как положено.
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); } } }А теперь вразумительно опишите логику работы - что по-Вашему должно происходить. Из программы это никак неочевидно.
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; } }ой, спасибо большое, теперь всё работает так как надо! =)