В качестве альтернативы для управления курсором с помощью компьютерной мыши или трекпада можно использовать джойстик. Джойстик может перемещать курсор в любом направлении (по оси X и Y), а также выполняет функцию щелчка с помощью встроенного переключателя джойстика.

Джойстик состоит из двух потенциометров, выровненных в направлениях x и y. Arduino считывает аналоговые значения с джойстика в диапазоне от 0 до 1023. Таким образом, когда джойстик находится в своем положении по умолчанию (в центре), аналоговое значение также становится близким к 500 (между 0 и 1023).

Скетч Arduino запрограммирован таким образом, что, когда джойстик находится в центральном положении, выводится значение 0 в последовательный монитор, а когда джойстик отведен от центра, выводится значение в диапазоне от -80 до 80. Таким образом, когда джойстик находится в одном крайнем положении, Arduino выводит значение 80, а если джойстик перемещается в другое крайнее положение, то выводится -80.
Чтобы вывести отдельные значения для направлений x и y, мы будем использовать символ двоеточия «:» между значениями направления x и y, а также состоянием внутреннего переключателя джойстика, например:

Для того, чтобы ноутбук или компьютер распознал значения, нам понадобится программа на Python. Для этого также нужен установленный Python, который можно скачать с официального сайта. Для Windows также можно установить pyautogui из командной строки, введя следующие строки:
cd C:\Python27
python –m pip install –-upgrade pip
python –m pip install pyautogui
Программа python предназначена для чтения текста, выведенного Arduino, и распознавания значений направления x и y, а также состояния переключателя. Текущие координаты курсора получают из функции pyautogui – pyautogui.position(), которая предоставляет координаты X и Y курсора в виде пикселей. Когда джойстик перемещается, аналоговые значения (от -80 до 80), предоставленные arduino, добавляются с текущей позицией курсора для перемещения курсора в нужном направлении. Чтобы переместить курсор в заданном направлении, функция pyautogui.moveTo(X + x, Y + y) удовлетворяет этой цели. В ней X и Y – текущая позиция курсора, а x и y – позиции увеличения или уменьшения, предоставляемые Arduino. Для выполнения операции щелчка используется функция pyautogui.click(x, y). Код на Python имеет следующий вид:
import pyautogui, sys
import time
import serial
ArduinoSerial=serial.Serial('com3',9600)
time.sleep(1)
while 1:
data=str(ArduinoSerial.readline())
(x,y,z)=data.split(":")
(X,Y)=pyautogui.position()
x=int(x)
y=int(y)
pyautogui.moveTo(X+x,Y-y)
if '1' in z:
pyautogui.click(button="left")
Скетч Arduino следующий:
void setup() {
Serial.begin(9600);
pinMode(9,INPUT);
digitalWrite(9,HIGH);
}
void loop() {
int z=0;
int x=analogRead(A0);
int y=analogRead(A1);
int xpos,ypos;
if(x>450 and x<550)
xpos=0;
if(x>=550)
xpos=map(x,550,1023,0,80);
if(x<=450)
xpos=map(x,450,0,0,-80);
if(y>450 and y<550)
ypos=0;
if(y>=550)
ypos=map(y,550,1023,0,80);
if(y<=450)
ypos=map(y,450,0,0,-80);
if(digitalRead(9)==LOW)
z=1;
else
z=0;
Serial.print(xpos);
Serial.print(":");
Serial.print(ypos);
Serial.print(":");
Serial.println(z);
delay(120);
}
Схема подключения Arduino и джойстика:

Загрузите скетч в свой Arduino и подключите джойстик к контактам Arduino, как показано на схеме. Убедившись, что pyautogui установлен на вашем компьютере или ноутбуке, выполните следующие действия. Сначала скопируйте код питона в файл блокнота. Укажите правильный COM-порт Arduino. Из диспетчера устройств вы можете получить COM-порт, к которому подключена плата Arduino. Сохраните файл как «.py» после внесения изменений.


Откройте приложение Python IDLE (python GUI) и откройте из него файл блокнота.


Запустите модуль.

Затем вы вернетесь к предыдущему экрану. Если вы видите какие-либо ошибки, перезапустите приложение и проверьте, правильно ли вы указали COM-порт Arduino. Если ошибок нет, управляйте джойстиком, и вы увидите движение курсора.
© digitrode.ru