Давайте рассмотрим алгоритм работы нашей программы!
1. Нажатие на кнопку «вперёд» выводит в терминал сообщение «Forward».
2. Кнопка «назад» отправляет в терминал сообщение «Back».
3. Кнопка «влево» выводит в терминал фразу «Left».
4. Нажатие на «вправо» вызывает появление надписи «Right».
Перейдем к написанию программы и рисованию электрической схемы!
И так схема у нас есть, на ней обозначены микроконтроллер,ножки gnd и питания 3,3В, к порту D4 подключена кнопка КН1, вернемся к программе.
Практически к каждому материалу есть видеоролик на YouTube и RUTUBE каналах, теорию можно прочитать в статье, а как работает устройство в железе, посмотреть в видеоролике!
Двухосевой джойстик (KY-023) — это модуль-манипулятор, который состоит из двух потенциометров и одной тактовой кнопки. Его можно использовать для управления различными устройствами, такими как видеокамеры, сервоприводы или моторы роботов, в двух плоскостях.
Ниже представлены технические характеристики и распиновка двух осевого джойстика KY-023.
- Напряжение питания: 5 В
- Поворот ручки: 360°
- Размеры: 40 мм х 26 мм х 32 мм
GND | Общий |
VCC | Напряжение питания |
VRX | Аналоговый выход потенциометра оси X |
VRY | Аналоговый выход потенциометра оси Y |
SW | Выход кнопки |
Джойстик подключен к портам D34, D35 и ножкам питания. Для начала нам необходимо импортировать необходимые классы для работы с аналогово-цифровым преобразователем и пинами. Это можно сделать с помощью команды from machine import ADC, Pin.
Далее мы подключим функции, которые будут использоваться для формирования задержек. Для этого используем строку import time.
Теперь можно инициализировать аналоговые пины для считывания значений:
* x_pin = ADC(Pin(34)) — создаем объект ADC для пина 34 (ось X);
* y_pin = ADC(Pin(35)) — создаем объект ADC для пина 35 (ось Y).
После этого устанавливаем аттенюацию (уменьшение диапазона) для пинов:
* x_pin.atten(ADC.ATTN_11DB) — устанавливаем аттенюацию 11 дБ для пина X;
* y_pin.atten(ADC.ATTN_11DB) — устанавливаем аттенюацию 11 дБ для пина Y.
Вот такой получился код:
В этом бесконечном цикле мы будем постоянно опрашивать джойстик и считывать полученные значения.
x_read = x_pin.read() # Считываем значение с пина X
y_read = y_pin.read() # Считываем значение с пина Y
Затем мы нормализуем эти значения, вычитая среднее значение (2048).
x_normalized = (x_read – 2048) # Нормализуем значение по оси X
y_normalized = (y_read – 2048) # Нормализуем значение по оси Y.
Проверяем, превышает ли нормализованное значение по оси X заданный порог. Если значение по оси X выходит за пределы -500 и 500, то есть, если abs(x_normalized) > 500, мы выполняем следующие действия:
* Если значение положительное, то direction_x = "Left" — движение влево;
* Если значение отрицательное, то direction_x = "Right" — движение вправо;
* Если значение находится в пределах порога, то direction_x = "stoim po X" — стоим на месте по оси X.
Аналогично проверяем нормализованное значение по оси Y:
* Если значение превышает порог, то if abs(y_normalized) > 500, то в случае положительного значения y_normalized > 0, направление_y = "Forward" — движение вперед;
* В противном случае направление_y = "Back" — движение назад;
* Если значение в пределах порога, то direction_y = "stoim po Y" — стоим на месте по оси Y.
После завершения проверки мы выводим направления движения по осям X и Y в терминал:
print(f"X: {direction_x}, Y: {direction_y}")
Перед следующим считыванием мы делаем небольшую задержку в 0.1 секунды:
time.sleep(0.1).
Работа с двух осевым джойстиком не представляет собой ничего сложного. В этом примере мы рассмотрели самый простой способ управления модулем джойстика.
Исходный код программы Скачать архив
Понравился проект? Не забудь поделиться им с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube и RUTUBE !
- СПАСИБО ЗА ПРОСМОТР.
- С уважением.
- Электроника и Робототехника!