Здравствуйте, не понимаю, как разделить режимы с одной кнопки на три разные. Пытался прописывать идентично, как для кнопки один, собственно поэтому переменные остались. Но кнопки не реагируют. Как правильно это оформить при функции 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++;
flag = 1;
if(regim > 3) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}
}
if(digitalRead(ButPin) == 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);
}
}`Текст "как есть" (без применения форматирования)`
Смотрите, попробую объяснить, что у меня получилось. У меня на данный момент переключение режимов для 2-ух светодиодов происходит лишь по одной тактовой кнопке на макетной плате. Я хочу добавить еще 2 кнопки и переключать режимы 2 и 3 через кнопку 2 и 3 соответственно. Т.е. чтобы я нажимал на кнопку 1 - светодиоды загорались и мерцали, затем нажимал на кнопку 2 - один из светодиодов мерцал быстрее другого, а по 3-ей кнопке сделать так, чтобы второй светодиод начал мерцать с такой же частотой, как и переключенный до этого. Пытался разъяснить подробнее.
Под правильностью написания Вы вот так имели ввиду?
if(digitalRead(ButPin) == HIGH && flag == 0)
{
regim++;
flag = 1;
delay(100);
if(regim > 3) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}
}
if(digitalRead(ButPin2) == HIGH && flag == 0)
{
regim++;
flag = 1;
delay(100);
if(regim > 3) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}
}
if(digitalRead(ButPin3) == HIGH && flag == 0)
{
regim++;
flag = 1;
delay(100);
if(regim > 3) // Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}
}
switch (var) {
case Knopka1:
// код для выполнения
break;
case Knopka2:
// код для выполнения
break;
case Knopka3:
// код для выполнения
break;
default:
Так, я запутался, вы говорили изначально, что if нужен, а в каком месте именно не требуется? Если перед digitalWrite программа выдает ошибку с требованием if,а если перед режимом (regim>3), поведение идентичное. Уточните пожалуйста, что вы конкретно имели ввиду.
regim++; меняем на regim=0; для 1
flag = 1;
delay(100); - можно удалить, выше написали, а я ошибся , немного
if(regim > 3) - на кой этот if теперь? Можно удалить …
// Если номер режима превышает требуемого
{ // то отсчет начинается с нуля
regim = 0;
}