На этом уроке вы научитесь использовать кнопки с цифровыми входами, чтобы
включать светодиод. Нажатие на кнопку - включит светодиод, нажатие другой
кнопки выключит.
Необходимые компоненты:
Кнопки - действительно простые компоненты. Когда вы нажимаете кнопку - они
соединяют два контакта, чтобы через них мог протекать ток. Маленькие кнопки,
которые используются в этом уроке, имеют четыре вывода, что может немного
запутать.
На самом деле, есть только два электрических соединения. Внутри коммутационного
блока контакты B и C соединены вместе, как и контакты A и D.
Принципиальная схема:
Хотя корпус кнопки имеет квадратную форму - выводы выходяи из
противоположных сторон корпуса кнопки. Помните, что отрицательный вывод
светодиода (катод) - более короткий.
Код:
После подключения, пожалуйста, откройте программу из
папки с кодом - Цифровые входы урока 5 и нажмите ЗАГРУЗИТЬ,
чтобы загрузить программу.
См. Урок 2 для получения подробной информации
о процессе загрузки, если есть какие-либо ошибки.
Загрузите скетч в плату MEGA2560. Нажатие левой кнопки включит светодиод,
нажатии правой кнопки - выключит его. Первая часть скетча определяет три
переменные для трех выводов, которые должны быть использованы.
"LedPin" является выходом, а "buttonApin" будет относиться к левой кнопке,
"buttonApin" - к правой.
Функция "setup" определяет ledPin как выходной, как обычно, но теперь у нас
есть два входа. В этом случае мы используем набор pinMode, и сконфигурируем их
как "INPUT_PULLUP":
pinMode(buttonApin, INPUT_PULLUP); pinMode(buttonBpin, INPUT_PULLUP);
Режим INPUT_PULLUP означает, что вывод должен использоваться как вход и будет подулючен к внутреннему подтягивающему резистору (резистор, подключен к питанию внутри микросхемы). Другими словами, значение по умолчанию для входа - ВЫСОКОЕ, вот почему кнопки подключены к GND. Когда кнопка нажата, она соединяет входной контакт с GND, чтобы он больше не был HIGH. Т.е. вход становится НИЗКИМ только при нажатии кнопки. С этой, немножко перевернутой логикой мы справимся в функции 'loop'.
void loop() { if (digitalRead(buttonApin) == LOW) { digitalWrite(ledPin, HIGH); } if (digitalRead(buttonBpin) == LOW)59 { digitalWrite(ledPin, LOW); } }
В функции 'loop' есть два оператора if. По одному на каждую кнопку. Каждый
делает "digitalRead" на соответствующем входе. Помните, что если кнопка нажата,
соответствующий вход будет НИЗКИМ, если кнопка A находится в низком положении,
"digitalWrite" на ledPin включает ее. Точно так же, если кнопка B нажата, в
ledPin записывается LOW.
Пример: