Взаимозаменяем потенциометр, джойстик и энкодер в схемах на Arduino (Часть II)

05 января 2021

Продолжаем цикл статей про энкодер, потенциометр, джойстик, и их взаимозаменяемость в самых разных проектах.

По сути мы будем моделировать ситуации и проблемы, для которых понадобится подобрать решение. В итоге каждый из Вас сможет больше узнать о работе с Arduino и написании кода для этой платформы, развить мышление и приобрести важнейшие навыки, которые абсолютно точно пригодятся в дальнейшей взаимодействии с платой!

И снова я приветствую Вас, мои дорогие читатели, на страницах блога магазина Amperkot.ru. Это вторая часть (сразу спойлер: не последняя) моего цикла статей про энкодер, потенциометр и джойстик, и их взаимозаменяемость в самых разных проектах (даже не самых практичных для этих модулей), когда на руках что-то одно.

По сути мы будем моделировать ситуации и проблемы, для которых понадобится подобрать решение. В итоге каждый из Вас сможет больше узнать о работе с Arduino и написании кода для этой платформы, развить мышление и приобрести важнейшие навыки, которые абсолютно точно пригодятся в дальнейшей работе с Ардуино!

Вспомнить всё

“Мозг” любой электронной платформы (микроконтроллер или процессор) во многом похож на человеческий. Взять, к примеру, память. Любая информация, которую мы хотим сообщить микроконтроллеру для ее дальнейшего использования, мы заносим в специальные ячейки памяти, называемые чаще всего переменными или константами. То же самое наблюдается в упрощенном смысле и у нас с Вами: в нашем мозгу расположен некий шкаф с полками, куда сам мозг помещает нужную информацию по нейронным каналам. По этому Вы точно должны помнить, что в конце первой части я дал задание: самостоятельно выявить недочеты в схеме по управлению джойстиком яркостью светодиода.

А если не помните, то немедленно к прочтению: https://amperkot.ru/blog/arduino-potentiometer-1

Так что же не так?

Для управления яркостью светодиода практичнее всего использовать потенциометр, но что, если его под рукой не оказалось? Воспользуемся джойстиком, ведь у него тоже есть возможность управления значениями напряжения на выходе — с помощью стика. Установим в программном коде (скетче) пропорциональную зависимость яркости внешнего светодиода от положения стика джойстика по оси OX. Что же в таком случае может пойти не так? Дам подсказку: вспомните раздел “Немного теории” в первой части, где упоминается отличие двух модулей между собой. Напоминаю:

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

Чтобы сделать процесс работы и обучения интереснее — можете представлять себя в роли разных изобретателей — Николы Тесла или Томаса Эдисона. Как известно из многих достоверных источников, Никола Тесла проводил многие вычисления, в том числе тесты по проверке работоспособности своих устройств, в уме — эдакий идеальный пример теоретика. А вот Томас Эдисон всегда проводил огромное множество экспериментов, прежде, чем удостовериться в успехе — пример истинного практика!

Сейчас мы с Вами перевоплотимся в последнего и попробуем на практике убедиться в том, что наш текущий код не очень удобен.

Если Вы перемещаете стик джойстика по оси OX, то яркость светодиода меняется корректно, но мы не можем зафиксировать определенное значение. Это жутко неудобно: почти то же самое, если бы в собственной квартире нам пришлось бы всегда удерживать кнопку выключателя для поддержки освещения в помещении.

Но у любой проблемы есть решение. Обычно классификация типов решения проблем следующая: аппаратный (пошаманить над электрической схемой), программный (пошаманить над кодом) и колхозный (первое, что приходит на ум, когда не хватает знаний ни для первого, ни для второго методов).

Аппаратный способ наиболее простой в плане временных и финансовых затрат: для этого добавим в нашу схему обычную тактовую кнопку. Вот так!

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

Обратите внимание на схеме, что на кнопку также подводим два контакта питания (5 вольт и “земля”). Это поможет лучше понять принцип работы кнопки: при нажатии на нее, внутри кнопки замыкаются контакты (состояние контактов в разомкнутном состоянии кнопки показано на картинке ниже), и ток течет через нее на пин платы Arduino, на котором затем считывается напряжение (в нашем случае, 0 или 5 вольт, или логические значения 0 и 1 соответственно).

Код

Код меняем следующим образом: так как ввели новое устройство (тактовая кнопка), то дадим ему сразу имя BUT (англ. butto — кнопка) , а заодно и создадим переменную под него, в которую сохраним номер пина, на котором будет считываться напряжение, которое кнопка пропустила при нажатии на нее (замыкании цепи). Переменную потенциометра меняем на переменную с джойстиком (JOY).

Также введем переменную состояния кнопки: but_flag. Флаги очень удобны, когда нужно запоминать состояния работы каких-либо устройств, либо логические значения на контактах. Так как при каждом нажатии кнопки электрические сигналы поступают на контроллер, то пину для кнопки назначим режим "ввода" данных (INPUT). Приставка PULLUP означает, что мы еще и активируем встроенный в плату Arduino подтягивающий резистор. Это просто необходимо, если мы хотим: а) избавиться от механических помех, б) обезопасить Arduino от короткого замыкания.

Переходим к void loop(): создаем переменную "val", в которую при помощи функции map сохраним значения с джойстика в масштабе 1 к 4 (то же самое, как в первой части этого цикла статей мы делили на 4). При помощи условий задаем тон дальнейшим действиям в программе: 1) Если кнопка не нажата, то меняем яркость светодиода, что называется, в режиме "онлайн", 2) Если кнопка нажата, то меняем значение флага, а значению яркости светодиода присваиваем текущее значение на выводе джойстика по оси OX, 3) Если кнопка не нажата, а флаг по-прежнему показывает обратное, то меняем его значение на исходное состояние.

После загрузки кода (при условии, что схема собрана корректно) получаем следующую картину:

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

Дальнейшие фокусы с настройкой яркости светодиода я продемонстрирую в третьей части нашего цикла статей.

Оставляйте свои вопросы, если они будут, в комментариях к этой статье. По возможности буду на них отвечать. Но не забывайте о правилах грамотности и адекватности! Всем желаю успехов и удачной компиляции!


Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.


Поделиться: