Проблема с Arduino. Не реагирует на нажатие кнопки.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Проблема с Arduino. Не реагирует на нажатие кнопки.

Сообщение cleric » 10 апр 2014, 13:34

Столкнулся с проблемой. Написал код, чтобы светодиоды начали мигать по включению тумблера и меняли свой режим мигания при нажатии кнопки. Режим мигания переключается не зависимо от положения кнопки. С чем это может быть связано?

Код: Выделить всё
#define LED1 11
#define LED2 10
#define LED3 5
#define RELE 7
#define BUTTON 12

int val = 0;
int but = 0;

void setup()
{
   pinMode(LED1, OUTPUT);
   pinMode(LED2, OUTPUT);
   pinMode(LED3, OUTPUT);
   pinMode(RELE, INPUT);
   pinMode(BUTTON, INPUT);
}

void off()
{
     digitalWrite(LED1, LOW);
     digitalWrite(LED2, LOW);
     digitalWrite(LED3, LOW);




void loop()
{
but = digitalRead(BUTTON);

if (but == HIGH) {
  val = digitalRead(RELE);
 
  if (val == HIGH) {
    digitalWrite(LED1, HIGH);
    delay(1000);
    digitalWrite(LED1, LOW);
    val = digitalRead(RELE);
    if (val == HIGH) {
     digitalWrite(LED2, HIGH);
     delay(1000);
     digitalWrite(LED2, LOW);
    }
    else {
     off; 
    }
    val = digitalRead(RELE);
    if (val == HIGH) {
    digitalWrite(LED3, HIGH);
    delay(1000);
    digitalWrite(LED3, LOW);
    }
    else {
    off;
    } 
  } else {
    off; 
  }
}
else {
      val = digitalRead(RELE);
 
  if (val == HIGH) {
    digitalWrite(LED1, HIGH);
    delay(500);
    digitalWrite(LED1, LOW);
    delay(500);
    digitalWrite(LED1, HIGH);
    delay(500);
    digitalWrite(LED1, LOW);
    delay(500);
    val = digitalRead(RELE);
    if (val == HIGH) {
    digitalWrite(LED2, HIGH);
    delay(500);
    digitalWrite(LED2, LOW);
    delay(500);
    digitalWrite(LED2, HIGH);
    delay(500);
    digitalWrite(LED2, LOW);
    delay(500);
    }
    else {
     off; 
    }
    val = digitalRead(RELE);
    if (val == HIGH) {
    digitalWrite(LED3, HIGH);
    delay(500);
    digitalWrite(LED3, LOW);
    delay(500);
    digitalWrite(LED3, HIGH);
    delay(500);
    digitalWrite(LED3, LOW);
    delay(500);
    }
    else {
    off;
    } 
  } else {
    off; 
  }

}


Аватара пользователя
cleric
 
Сообщения: 34
Зарегистрирован: 22 фев 2014, 21:55
Откуда: Москва
прог. языки: Delphi
ФИО: Дмитрий Соколов

Re: Проблема с Arduino. Не реагирует на нажатие кнопки.

Сообщение Myp » 10 апр 2014, 13:42

вопервых тема не в том разделе
ардуины тусят в однельном месте, щас перенесу

потом у тебя режим мигания меняется только если кнопка продолжает быть нажатой в момент когда главный цикл программы начинается заново

симулятор тебе нужен, с пошаговой отладкой, чтобы видеть как реально выполняется программа.

Добавлено спустя 2 минуты 7 секунд:
слегка корявый конечно но пользоваться можно
forum86/topic13367.html
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Проблема с Arduino. Не реагирует на нажатие кнопки.

Сообщение cleric » 10 апр 2014, 14:10

Спасибо. Будем разбираться)

Добавлено спустя 23 минуты 11 секунд:
Myp писал(а):потом у тебя режим мигания меняется только если кнопка продолжает быть нажатой в момент когда главный цикл программы начинается заново


Проблема в том, что когда главный цикл начинается заново режим произвольно меняется или остаётся прежним в не зависимости от того, нажата кнопка в данный момент или нет.

Прогнав через симулятор, убедился в правильности написания кода. Значит проблема в сборке схемы.
Аватара пользователя
cleric
 
Сообщения: 34
Зарегистрирован: 22 фев 2014, 21:55
Откуда: Москва
прог. языки: Delphi
ФИО: Дмитрий Соколов


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8