Сейчас на форумах на вопрос где ты научился писать код? отвечают, Интернет читаю, видосики смотрю. Ну что-же, разберем чему нас действительно может научить мировая паутина.
Внимание! разбор очередной копипаста обучающей статьи для новичков "как подключить кнопку"
Схему подключения автор материала предлагает стандартную - с подтяжкой пина с кнопкой к +5V резистором 10ком
А к статье прилагается вот такой говнокод
Соберем на макетной плате и проверяем:
Все работает, а теперь почему лучше так не писать программы?
Номера выводов к которым подключены кнопки объявлены как переменные. Хороший стиль программирования заключается в том, что все что в программе не должно изменяться - лучше объявлять как константы. Если программа будет большой и блочной любая опечатка программиста, которая может изменить переменную LedPin13 или ButtonPin2 приведет к тому, программа начнет глючить в самых неожиданных местах и найти её будет сложно.
Если добавить ключевое слово const перед названием имен переменных, мы объявим их как константы и собрать программу с опечаткой не разрешит компилятор.
Кнопка имеет всего 2 состояния, светодиод тоже. Фактически вся суть работы программы сводится к тому, что мы переписываем состояние кнопки, в порт к которому подключен светодиод.
Давайте еще раз скомпилируем программу из обучающего примера (crtl+R)
Перепишем программу используя директиву препроцессора define
Размер скетча уменьшился на 8 байт.
Что делает данная директива? При сборке проекта её функционал аналогичен команде найти/заменить. То есть она ищет везде слово LedPin13 и заменяет его на цифру 13. Читаемость осталась на том же уровне, а размер уменьшился.
Хранить состояние кнопки в отдельной переменной это чисто дело вкуса, но с железной точки зрения оно хранится в отдельном регистре и в принципе если не планируется сохранять состояние кнопки, (например для сравнения с текущим или предыдущим значением) от нее тоже можно смело избавиться.
Для встроенного светодиода на Ардуино подобных платах в среде Arduino IDE существует встроенная константа LED_BUILTIN. Если PIN к которому подключен встроенный светодиод объявить через эту константу - зажигать встроенный светодиод можно будет на любой Ардуино-подобной платформе и даже на платах ESP.
Код стал еще компактнее но по прежнему работает:
Ну и вишенка на торт. Поскольку по условиям первоначальной задачи светодиод должен гореть когда кнопка нажата и гаснуть когда отпущена
(и то и то это один бит информации) - можно просто переписать состояние кнопки в состояние светодиода. По скольку на входе 2 у нас логическая 1 когда кнопка отпущена и логический ноль когда нажата. Инвертируем состояние пина командой "!"
Вот все что осталось от первоначальной портянки 99% примеров авторов которые выпускают обучающие материалы. Делает этот код все ровно тоже самое, а в программировании как известно чем короче код - тем быстрее он работает.
Теперь переходим к схемотехнике. Обычно в Ардуино-подобных платформах, вывод на который подключается светодиод, уже имеет токо ограничивающий резистор.
Выкидываем резистор 220 Om (ВНИМАНИЕ - С ДРУГИМИ ВЫВОДАМИ ТАКОЙ ФОКУС ПОВТОРЯТЬ НЕ СЛЕДУЕТ!!!)
Эта безобидная мелочь может вылиться в проблему если с вывода 13 мы попробуем по управлять каким-нибудь модулем. Из-за того что там есть токо-ограничивающий резистор можно поиметь проблему из ничего (логическая единица там будет не 5V, а чуть меньше) Поэтому не подключайте к этому выводу никакой периферии, если только речь не идет об устройствах с интерфейсом SPI)
Микронтроллеры AVR на которых строятся платы Arduino да и многие другие имеют внутренний подтягивающий резистор - который в среде Arduino IDE можно подключить константой INPUT_PULLUP.
Выкидываем и подтягивающий резистор из схемы:
Код:
Краткое резюме по добыче информации из сети Интернет на примере статеек для новичков типа "подключаем кнопку"
Вы научитесь:
- подключать кнопку к Arduino (типа работает же)
- писать код который может перестать работать в любой момент из-за
банальной опечатки - бездумно разбазаривать ресурсы Arduino
- писать много много лишних операторов
- паять кучу ненужных электронных компонентов
А какие вы любите использовать источники информации? - пишите в комментариях....
Также вы можете ознакомиться с полным списком статей на моем канале.
Всем удачи!