Я не понимаю, что не так с этим кодом

led
int ledy = 5 ;
int leds = 4 ;
int ledk = 3;
int button = 2 ;
int count = 0 ;
  
void setup()
{
  pinMode(ledy, OUTPUT);
  pinMode(leds, OUTPUT);
  pinMode(ledk, OUTPUT);
  pinMode(button,INPUT);
  randomSeed(analogRead(A0));
}

void loop()
{
  if(digitalRead(button)== HIGH)
  {
  count = count++ ;
  }
    if (count==1)
  {
    digitalWrite(ledk, HIGH);
    digitalWrite(leds, LOW);
    digitalWrite(ledy, LOW);
      
   }
    else if (count==2)
   {
    digitalWrite(ledk, LOW);
    digitalWrite(leds, HIGH);
    digitalWrite(ledy, LOW);
     
    }
    
   else if (count==3)
   {
    digitalWrite(ledk, LOW);
    digitalWrite(leds, LOW);
    digitalWrite(ledy, HIGH);
   }
   
     delay(1000);
  

}

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

, 👍-1

Обсуждение

Пожалуйста, расскажите нам, чего вы хотите достичь и что происходит вместо этого., @Tarabas

Я хочу, чтобы три светодиода загорались один за другим как петля. Но ни один из них не светится., @gruesome

Вы также можете использовать последовательный порт для вывода некоторых сообщений на последовательный монитор Arduino, чтобы увидеть, обнаружено ли нажатие кнопки и срабатывает ли правильное условие if. Также покажите свою схему - там тоже может быть что-то не так. В зависимости от того, как подключена ваша кнопка, может потребоваться подтягивающий резистор. Если кнопка подтягивает контакт к GND, вы можете использовать pinMode(button,INPUT_PULLUP); а затем нужно проверить цифровое чтение (кнопка) == LOW..., @Tarabas

@gruesome, пожалуйста, добавьте эту информацию в свой вопрос. Это, вероятно, вызвано count = count++, который (я думаю) не делает то, что вы думаете. Замените его либо на count++, либо на count = count + 1. Также может быть хорошей идеей сбросить счетчик после того, как он достигнет 3., @StarCat

@gruesome Пожалуйста, «отредактируйте» свой исходный вопрос и добавьте дополнительную информацию туда, а не в комментарии., @Tarabas

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


1 ответ


Лучший ответ:

0

Одна вещь, которая мне кажется возможной причиной вашей проблемы, заключается в том, что для многих кнопок требуется подтягивающий резистор, который предоставляется как внутренний компонент большинства микроконтроллеров, но должен быть специально запрошен в экземпляре pinMode кнопка. Попробуйте изменить функцию setup() на следующую:

void setup()
{
  pinMode(ledy, OUTPUT);
  pinMode(leds, OUTPUT);
  pinMode(ledk, OUTPUT);
  pinMode(button,INPUT_PULLUP);
  randomSeed(analogRead(A0));
}

однако, если вы сделаете это, вы также должны изменить оператор if на if(digitalRead(button) == LOW), так как подтягивающий резистор сделает так, что когда кнопка не нажата , вывод вытягивается вверх, и наоборот.

Еще один способ устранить эту неполадку – проверить, загораются ли светодиоды, когда вы полностью перестаете полагаться на кнопку, удаляя ее.

if(digitalRead(button)== HIGH)
  {
  count = count++ ;
  }

и изменить его на

count++;
delay(1000);

и посмотрите, меняется ли индикатор каждую секунду (для задержки требуется значение в миллисекундах). Я согласен с @StarCat в том, что count = count++;, возможно, делает не то, что вы думаете.

,