Светодиод Arduino мигает одним нажатием кнопки
Я хочу, чтобы светодиод мигал, когда я нажимаю переключатель один раз, но он продолжает мигать. Я попробовал идею просто зажечь светодиод и держать его включенным всего одним нажатием кнопки, поэтому я написал:
int led=13,button=12;
void setup() {
pinMode(led,OUTPUT);
pinMode(button,INPUT);
}
void loop() {
if (digitalRead(button)==HIGH)
digitalWrite(led,HIGH);
}
и это сработало; он оставался включенным после того, как я один раз нажал кнопку, поэтому для мигающего светодиода я написал:
int led=13,button=12;
void setup() {
pinMode(led,OUTPUT);
pinMode(button,INPUT);
}
void loop() {
if (digitalRead(button)==HIGH)
{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
} }
но это не сработало. Он перестает мигать после того, как я убираю руку с выключателя. Почему это происходит?
@sumer fattoum, 👍1
Обсуждение2 ответа
Поскольку цифровая запись применяется только к if (digitalRead(button)==HIGH)
. Если не нажимать кнопку, то идет код:
void loop() {
}
По сути, ничего не делать. Вашему коду нужно немного больше, чтобы отслеживать нажатие кнопки. Псевдокод:
if button == pressed {
int tracker=1;
}
if tracker == 1 {
led on;
wait;
led off;
wait;
}
loop
Спасибо, не могли бы вы объяснить больше, я понимаю, что он должен выполнять то, что находится в if {}, таким же образом, так почему один раз он продолжал выполняться после того, как я нажал кнопку, а в другом примере он перестал выполнять то, что находится в if { } После того, как я нажал кнопку, я могу отправлять видео, если кто-то пришлет мне электронное письмо, @sumer fattoum
Попробуйте опубликовать новый код, если вы изменили свой на основе этого ответа. Не меняйте исходный код, иначе вопрос не будет иметь никакого смысла. Добавьте новую часть к своему вопросу (отредактируйте вопрос), указав, что вы пробовали XYZ, и показав, что это было., @Nick Gammon
Это то, что вам нужно. Когда вы нажимаете кнопку, ваш светодиод включается. И он все еще включен, пока вы снова не нажмете кнопку. Надеюсь, это поможет вам.
const int kPinBtn = 2;
const int kPinLed = 13;
boolean kPress = false;
void setup()
{
pinMode(kPinBtn, INPUT_PULLUP);
pinMode(kPinLed, OUTPUT);
}
void loop()
{
if(digitalRead(kPinBtn) == LOW && kPress == false)
{
digitalWrite(kPinLed, HIGH);
kPress = true;
}
if(digitalRead(kPinBtn) == LOW && kPress == true)
{
digitalWrite(kPinLed, LOW);
kPress = false;
}
}
ок, спасибо, я изучу этот код, но все же вопрос, почему в первом коде он продолжал выполнять то, что внутри if {} даже после того, как я убрал руку с кнопки, а во втором коде он перестал выполнять то, что внутри if {} после того, как я убрал руку с кнопки переключателя, хотя оба кода имеют одинаковую структуру, но разница только в том, что внутри, if {}, я могу отправить видео, если вы не поняли, что я имею в виду, @sumer fattoum
@sumerfattoum Поскольку вы можете видеть, что здесь я использую один флаг, который означает логическое значение с именем kPress. По умолчанию это значение ложно. Когда вы нажимаете кнопку в первый раз, код проверяет значение kPress. Если это ложь, то ваш светодиод загорается, и в тот раз, когда мы изменили значение kPress, это означает, что теперь это правда. Теперь ваш светодиод горит до тех пор, пока вы не нажмете второй раз. Это происходит из-за значения kPress. Теперь, когда вы нажали второй раз, код снова проверяет значение kPress. Если это правда, то светодиод выключается., @Hasan
Мой друг, это два разных кода и два разных случая для моих кодов выше. Я загружаю код в Arduino по-разному, не учитывается, нажата ли кнопка в первый и второй раз., @sumer fattoum
Дело в том, что когда я загружаю первый код, затем нажимаю кнопку, он продолжает применять то, что есть в if {}, это означает, что он остается включенным, хотя я убрал руку с кнопки, теперь, когда я загружаю второй код и нажимаю кнопку он применяет то, что есть в if {} (означает, что оно мигает) только тогда, когда моя рука все еще находится на кнопке, но оно перестает мигать, когда я убираю руку, в отличие от первого случая, хотя у них есть структура, и разница только в том, что внутри, если {}, @sumer fattoum
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Мигните светодиодом 5 раз с помощью цикла for
Добро пожаловать на EE.SE. Пожалуйста, отредактируйте вопрос и используйте теги
{}
для правильного форматирования кода. Убедитесь, что он имеет правильный отступ. Вам также необходимо исправить заглавные буквы в заголовке и в посте для удобочитаемости и достоверности. Ваш компилятор не отпустит вас с этим. Почему мы должны? Обратите внимание, что в вашем вопросе нет элемента электрического дизайна, поэтому он, вероятно, будет перемещен на сайт Arduino StackExchange., @Transistorточно я не знаю, в чем разница между двумя вышеперечисленными случаями, в первом случае просто одно нажатие кнопки втулки, и светодиод продолжает гореть, во втором случае он мигает только тогда, когда я продолжаю нажимать кнопку втулки, и останавливается, когда я убираю свой рука.. я хочу, чтобы она и во втором случае продолжала мигать после того, как я уберу руку, @sumer fattoum
Это то, что я пытаюсь сделать, я понимаю, что это должно выполняться так же, как внутри if {}.. но этого не происходит, @sumer fattoum
Если вы хотите, чтобы светодиод оставался включенным на неопределенный срок, удалите строку, которая устанавливает светодиод на НИЗКИЙ уровень., @Nick Gammon
Я перечитал ваш вопрос, и это не имеет смысла. ...
Я хочу, чтобы светодиод мигал, когда я нажимаю переключатель один раз, но он продолжает мигать.
.. Это означает, чтовы нажимаете переключатель один раз, и вы ожидаете, что светодиод мигнет (я предполагаю, что вы хотите, чтобы он мигал один раз). Светодиод постоянно мигает, а вы этого не хотите.
.... В конце вопроса вы говорите, что светодиод перестал мигать., @jsotolaПочему этот вопрос такой сложный, я повторял его много раз, я сравниваю два кода, хотя они имеют одинаковую структуру, но ведут себя по-разному, я хочу знать, почему, @sumer fattoum