Как одновременно обрабатывать 2 сценария?

kitto
Offline
Зарегистрирован: 15.04.2019

К Ардуино подключены 2 кнопки. Для каждой кнопки срабатывает свой сценарий. Проблема в том, что сценарий второй кнопки не срабатывает пока не выполнился сценарий первой, и на оборот. А мне нужно сделать обе кнопки автономными. 

Буду благодарен за помошь.

Код:

const int LED1=2;
const int BUTTON1=11;
const int LED2=3;
const int BUTTON2=12;
int x1;
int y1;
int x2;
int y2;

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(BUTTON1, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(BUTTON2, INPUT);
}

void setMode1(int x1) {
   if (x1 == 1)
  {
   digitalWrite(LED1, HIGH);
   for(int i=0; i<360; i++)
   {
     if (digitalRead(BUTTON1) == LOW)
     {
          delay(3000);
   		  digitalWrite(LED1, LOW);
       return;
     } else delay(1000);
   }
  } 
  else
    digitalWrite(LED1, LOW);
}

void setMode2(int x2) {
   if (x2 == 1)
  {
   digitalWrite(LED2, HIGH);
   for(int i=0; i<360; i++)
   {
     if (digitalRead(BUTTON2) == LOW)
     {
          delay(3000);
   		  digitalWrite(LED2, LOW);
       return;
     } else delay(1000);
   }
  } 
  else
    digitalWrite(LED2, LOW);
}

void loop() {
    if (digitalRead(BUTTON1) == HIGH)
    {
      delay(1000);
      if (digitalRead(BUTTON1) == HIGH)
      {
          y1 = 1;
          setMode1(y1);
      }
    } 

        if (digitalRead(BUTTON2) == HIGH)
    {
      delay(1000);
      if (digitalRead(BUTTON2) == HIGH)
      {
          y2 = 1;
          setMode2(y2);
      }
    } 
}

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

сначала избавьтесь от delay()

kitto
Offline
Зарегистрирован: 15.04.2019

Valera19701 пишет:

сначала избавьтесь от delay()

Вы имеете ввиду их заменить чем-то другим?

sadman41
Offline
Зарегистрирован: 19.10.2016
mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Или соседнюю тему посмотрите 

kitto
Offline
Зарегистрирован: 15.04.2019

 

Спасибо! С этим разобрался.

Сразу возникает трудность. Как с этим работать когда нужно сделать несколько пауз на нескольких пинах?

Например:

Подаем сигнал на пин1, если через 2сек сигнал еще есть - включаем светодиод, ждем 3 сек, выключаем светодиод.

Подаем сигнал на пин2, если через 3сек сигнал еще есть - включаем светодиод, ждем 4 сек, выключаем светодиод.

walt88
Offline
Зарегистрирован: 14.04.2019

kitto пишет:

 

Спасибо! С этим разобрался.

Сразу возникает трудность. Как с этим работать когда нужно сделать несколько пауз на нескольких пинах?

Например:

Подаем сигнал на пин1, если через 2сек сигнал еще есть - включаем светодиод, ждем 3 сек, выключаем светодиод.

Подаем сигнал на пин2, если через 3сек сигнал еще есть - включаем светодиод, ждем 4 сек, выключаем светодиод.

Создаём переменную для хранения времени )) если кнопка нажата и переменная с временем меньше или равно текущему времени запоминаем текущее время + 2 секунды, и крутим программу дальше, условие сработает если нажата кнопка и в переменной для времяни <= текушего времяни + 2 sek

почитайте тут -> http://arduino.ru/Reference/Millis

strarbit
strarbit аватар
Offline
Зарегистрирован: 12.06.2016

as en example arduino IDE file > examples > 02.Digital > Debounce

Onkel
Offline
Зарегистрирован: 22.02.2016

на все случаи жизни
http://easyelectronics.ru/tag/operacionnaya-sistema