Я не понимаю, что не так с этим кодом
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);
}
Я не понимаю, почему это не работает. Я хочу, чтобы три светодиода загорались один за другим как петля. Но ни один из них не загорается.
@gruesome, 👍-1
Обсуждение1 ответ
Лучший ответ:
Одна вещь, которая мне кажется возможной причиной вашей проблемы, заключается в том, что для многих кнопок требуется подтягивающий резистор, который предоставляется как внутренний компонент большинства микроконтроллеров, но должен быть специально запрошен в экземпляре 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++;
, возможно, делает не то, что вы думаете.
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- FastLED - Как управлять определенными светодиодами
Пожалуйста, расскажите нам, чего вы хотите достичь и что происходит вместо этого., @Tarabas
Я хочу, чтобы три светодиода загорались один за другим как петля. Но ни один из них не светится., @gruesome
Вы также можете использовать последовательный порт для вывода некоторых сообщений на последовательный монитор Arduino, чтобы увидеть, обнаружено ли нажатие кнопки и срабатывает ли правильное условие if. Также покажите свою схему - там тоже может быть что-то не так. В зависимости от того, как подключена ваша кнопка, может потребоваться подтягивающий резистор. Если кнопка подтягивает контакт к GND, вы можете использовать pinMode(button,INPUT_PULLUP); а затем нужно проверить цифровое чтение (кнопка) == LOW..., @Tarabas
@gruesome, пожалуйста, добавьте эту информацию в свой вопрос. Это, вероятно, вызвано
count = count++
, который (я думаю) не делает то, что вы думаете. Замените его либо наcount++
, либо наcount = count + 1
. Также может быть хорошей идеей сбросить счетчик после того, как он достигнет 3., @StarCat@gruesome Пожалуйста, «отредактируйте» свой исходный вопрос и добавьте дополнительную информацию туда, а не в комментарии., @Tarabas
забудьте свой код на данный момент... напишите простой скетч, который зажигает один из светодиодов на одну секунду, выключает светодиод на одну секунду и повторяет... тестируйте все три светодиода таким образом... обновите свой вопрос с результатами тест, @jsotola