Как разделить режимы с использованием flag с одной кнопки на три кнопки

Если переписать вот так, то кнопки сейчас вообще не участвуют в регулировке. Светодиоды мерцают, но без участия кнопок. Возможно я опять напортачил с кодом, но он не работает должным образом.

int R_LedPin = 2;             // Подключаем красный светодиод к порту 2
int Y_LedPin = 3;             // Подключаем зеленый светодиод к порту 3
int ButPin = 7;               // Подключаем кнопку 1 к выходу 7
int ButPin2 = 8;              // Подключаем кнопку 2 к выходу 8
int ButPin3 = 6;              // Подключаем кнопку 3 к выходу 6
int flag = 0;                  // флаг состояния
int regim = 0;                 // Переключалка

void setup()
{
  pinMode(R_LedPin, OUTPUT);   
  pinMode(Y_LedPin, OUTPUT);
  // Установили тип пина
  pinMode(ButPin, INPUT_PULLUP);
  pinMode(ButPin2, INPUT_PULLUP);
  pinMode(ButPin3, INPUT_PULLUP);
 
}  

void loop()
{ 
  if(digitalRead(ButPin) == HIGH && flag == 0);
  {                                                 
      regim = 0;
      flag = 1;
     
        }
  if(digitalRead(ButPin) == LOW && flag == 1)
    {
      flag = 0;
    }          
  if(digitalRead(ButPin2) == HIGH && flag == 0);
  {                                                 
      regim = 1;
      flag = 1;

        }
  if(digitalRead(ButPin2) == LOW && flag == 1)
    {
      flag = 0;
    }          
  if(digitalRead(ButPin3) == HIGH && flag == 0);
  {                                                 
      regim = 2;
      flag = 1;

        }
  if(digitalRead(ButPin3) == LOW && flag == 1)
    {
      flag = 0;
    }            
   
// ======= Вполняем задачу при выборе режима =======
// РЕЖИМ 0: OFF
  if(regim == 0)
    {
      digitalWrite(R_LedPin, LOW);
      digitalWrite(Y_LedPin, LOW);
    }
    
// РЕЖИМ 1: R
  if(regim == 1)
    {
      digitalWrite(R_LedPin, HIGH);
      digitalWrite(Y_LedPin, LOW);
      delay(1000);
      digitalWrite(R_LedPin, LOW);
      digitalWrite(Y_LedPin, HIGH);
      delay(1000);  
    }

// РЕЖИМ 2: Y
  if(regim == 2)
    {
      digitalWrite(R_LedPin, HIGH);
      delay(1000);
      digitalWrite(R_LedPin, LOW);
      delay(1000);
      digitalWrite(Y_LedPin, HIGH);
      delay(100);
      digitalWrite(Y_LedPin, LOW);
      delay(100);

    }
    // РЕЖИМ 3: RY
  if(regim == 3)
    {
      digitalWrite(R_LedPin, HIGH);
      digitalWrite(Y_LedPin, LOW);
      delay(100);
      digitalWrite(R_LedPin, LOW);
      digitalWrite(Y_LedPin, HIGH);
      delay(100);
    }
  }

так, у вас какое-то инвертированное мышление…
строка 22 - по факту ловит не нажатую кнопку, а 28 нажатую.
по пробуйте переделать
или как подключены кнопки, вернее спросить?

Если так показать для наглядности подойдет? Кнопки включены на пины: первая на 7, вторая на 8, третья на 6

Вот они 2 светодиода собственно. До этого в первоначальной форме код работал конкретно для одной кнопки - самой правой. Мне нужно было сделать, чтобы кнопки 2 и 3 (которые расположены справа-налево) могли также переключить режимы. Собственно в этом изначально у меня вопрос и стоял, чтобы режимы переключения контролировались всеми кнопками. Первая отвечала за их включение и дальнейшее мерцание, вторая задавала мерцание с другой периодичностью для красного светодиода, а третья добавляла другой период для желтого светодиода.

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

по фото не могу понять… :slight_smile:
вот картинка, какая у вас использована схема подключения? подтягивающий резистор или стягивающий?

Подтягивающий

Сейчас покажу иначе.

HIGH и LOW поменяй местами и попробуй

так напишите… учитывая delay в коде остальное лишнее

Может быть так нагляднее будет

так кнопки вообще никак не подключены

Как не подключены, они имеют вывод на 5V и пины?

функционально никак, МК их не видит. Хотя они нагружают блок питания - тогда, ДА - подключены.
ищите ошибку в схеме

Но ведь через одну кнопку начальный код работал. Он переключал режимы.

чудо - не иначе, картинка не соответствует коду

подключите как с подтягивающим

Картинка собиралась для будущих 3-х кнопок, как раз одну он прекрасно считывает. Тогда странно получается, что схема вообще реагировала на нажатие первой кнопки. Такого быть не должно.

я так и сказал - чудо

1 лайк

Подключил снова по аналогии, теперь вообще кнопки не работают, светодиоды просто сразу мерцают.