Помогите, я запутался с кодом

Степан
Offline
Зарегистрирован: 18.08.2020

Я недавно начал работать с ардуино и ничего не получается. Мне надо сделать так чтобы светодиод при нажатии на кнопку включался и выключался при повторном нажатии. Возможно ли это сделать Если да то как?

Степан
Offline
Зарегистрирован: 18.08.2020

Знаю, что можно взять кнопку с фиксацией, но мне это не подходит, мне нужно это сделать при помощи обычной кнопки

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

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

Степан
Offline
Зарегистрирован: 18.08.2020

Спасибо, но тогда светодиод будет включаться и при отпускании кнопки выключаться. А мне надо сделать так, чтобы он выключался только после второго нажатия

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Нет, не будет

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Но для начала вам нужно почитать, как работать с кнопками - http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Степан пишет:
Знаю, что можно взять кнопку с фиксацией, но мне это не подходит, мне нужно это сделать при помощи обычной кнопки

Можно, но похоже, что Вам не подойдет. Тут думать надо. И читать. Хотя-бы про триггеры.

Izvekoff
Offline
Зарегистрирован: 02.03.2020

Вам нужен готовый код или сами хотите одолеть?

Izvekoff
Offline
Зарегистрирован: 02.03.2020

del

Степан
Offline
Зарегистрирован: 18.08.2020

Спасибо, но я хочу всё это сам освоить. Слишком легко просто взять и попросить кого-то написать. И, кстати, я уже разобрался, всё работает!

Green
Offline
Зарегистрирован: 01.10.2015

Похоже?

int key_pin = 2;
int led_pin = 13;

void loop() {
  if (!digitalRead(key_pin) {
    digitalWrite(led_pin, !digitalRead(led_pin));
    delay(500);
  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Вариантов много. Например можно считать нажатия кнопки и если чётное то зажигать светодиод, если нечётное то выключать. Можно при нажатии кнопки проверить состояние пина светодиода и инвертировать его.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Похоже?

int key_pin = 2;
int led_pin = 13;

void loop() {
  if (!digitalRead(key_pin) {
    digitalWrite(led_pin, !digitalRead(led_pin));
    delay(500);
  }
}

а защита от дребезга контактов  и проверка на отжатие где )))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

del

Green
Offline
Зарегистрирован: 01.10.2015

ua6em пишет:

а защита от дребезга контактов  и проверка на отжатие где )))


И не только защита, но ещё и автоповтор!))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Green пишет:

ua6em пишет:

а защита от дребезга контактов  и проверка на отжатие где )))


И не только защита, но ещё и автоповтор!))

Автоповтор как раз проверкой отжатия и блокируется. Типа - кнопка нажата - если флаг сработки не поднят, переключить светодиод и поднять флаг, кнопка отжата - флаг сбросить

Green
Offline
Зарегистрирован: 01.10.2015

Попроще нужно быть. "И люди к вам потянутся".) Это же ж для начинающего.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Дык, проще некуда, по-другому тут не получится ))

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

Green
Offline
Зарегистрирован: 01.10.2015

Что не получится? Проще не бывает.)

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Без флага исключить автоповторы? Это слишком сложно для меня, можно примерчик? ))

Green
Offline
Зарегистрирован: 01.10.2015

Наоборот же! В автоповторах фишка.)

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Ну если только так )) Но ТС вроде такого не хотел