при выполнении первого условия не выполняются другие

agafonov_86
Offline
Зарегистрирован: 30.12.2018

Всем Доброго времени суток. Это моя первая попытка работы с данной штуковиной раньше больше общался с релюшками по этому зарание прошу прощения если задаю глупые вопросы. 

1 условие При вкл. К1  светодиод на 8 выходе горит 5 сек.

2 условие При вкл К2 светодиод на 9 выходе горит 10 сек.

3 условие При вкл К3 светодиод на 8 и 9 выходе горят 15 сек.

Вопрос: При выполнеии любого из условий не работает другое условие.

Пока горит 1 светодиод 5 секунд при замыкании К 2 ничего не происходит.

Помогите исправить 

int led1Pin = 8;
int led2Pin = 9;
int button1Pin=2;
int button2Pin=3;
int button3Pin=4;
void setup()
{
   pinMode(led1Pin, OUTPUT);
   pinMode(led2Pin, OUTPUT);
    pinMode (button1Pin,INPUT);
   pinMode (button2Pin, INPUT);
   pinMode (button3Pin, INPUT);
}  
void loop()


{  if (digitalRead (button1Pin) == 1)          // если кнопка 1 нажата, то
  { 
    digitalWrite(led1Pin,1);                   // загорается диод 1 на 5 сек
   delay (5000);
   digitalWrite (led1Pin,0);                  // потом выключается
  } 
  
 
  if (digitalRead (button2Pin) == 1)          // если кнопка 2 нажата, то
 

  { 
    digitalWrite(led2Pin,1);                  // загорается диод 2 на сек
   delay (10000);
   digitalWrite (led2Pin,0);                  // потом выключается
  } 
  
  
  if (digitalRead (button3Pin) == 1)         // если кнопка 3 нажата, то

  { 
    digitalWrite(led1Pin,1);                 // загорается диод 1 и 2  на 15 сек
    digitalWrite(led2Pin,1);
   delay (15000);
   digitalWrite (led1Pin,0);                // потом выключается
   digitalWrite (led2Pin,0); 
  }
 }    

 

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

agafonov_86 пишет:

Пока горит 1 светодиод 5 секунд при замыкании К 2 ничего не происходит.

Почему ничего не происходит? Ваша программа активно работает и ждёт пока эти 5 сек. пройдут. Вы же сами написали в строке №20

delay (5000);

вот она и ждёт. И, разумеется, ничего другого не делает.

Исправить это невозможно, нужно переписать программу по-другому.

Чтобы понять как переписать,

1) откройте первый пример и напечатйте его на бумаге.
2) откройте второй пример и тоже напечатйет его на бумаге.

Положите листы  рядом и внимательно сравните, поймите разницу в подходах.

Ваша программа сделана по образу и подобию первого из примеров. А нужно Вам сделать по образу и подобию второго.

Подумайте и сделайте.

Удачи!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

agafonov_86 пишет:
Помогите исправить
Что там исправлять. Все в топку !!   

#18

Гриша
Offline
Зарегистрирован: 27.04.2014

qwone пишет:

 Что там исправлять. Все в топку !!  

ну вот, человек старался, ему разумный коммент в посте 1 дали. А вы сразу готовое решение, и как ТС научится с таким подходом?

agafonov_86,   delay  - "вешает" контроллер на указаное время, очень опасная вешь в коде, и уберите третью кнопку (из кода), потом добавить будет не сложно, но начните с 2х кнопок. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

agafonov_86 пишет:

Всем Доброго времени суток. Это моя первая попытка работы с данной штуковиной раньше больше общался с релюшками по этому зарание прошу прощения если задаю глупые вопросы. 

1 условие При вкл. К1  светодиод на 8 выходе горит 5 сек.

2 условие При вкл К2 светодиод на 9 выходе горит 10 сек.

3 условие При вкл К3 светодиод на 8 и 9 выходе горят 15 сек.

Вопрос: При выполнеии любого из условий не работает другое условие.

Во-первых, это не вопрос, а утверждение.

А во-вторых, именно так и должно быть, т.к. сформулированные Вами условия являются взаимоисключающими. Например, светодиод не может одновременно гореть и 5 и 15 секунд - либо одно, либо другое.

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

(говоить о коде - пока еще рано)