Vezérli a számítógép kurzormozgását a Joystick segítségével, amikor egy gombot megnyomnak.
Utolsó felülvizsgálat: 2022.02.04 16:50
Az Mouse könyvtár segítségével vezérelheti a számítógép képernyőn megjelenő kurzorát egy Arduino Leonardo, Micro vagy Due segítségével. Ez a konkrét példa egy nyomógombot használ az egérvezérlés be- és kikapcsolására joystick segítségével.
A kurzor mozgása az Arduino-nál mindig relatív. Tehát minden alkalommal, amikor az analóg bemenetet olvassa, a kurzor pozíciója frissül az aktuális pozíciójához képest.
Két analóg bemenet 0 és 1023 közötti tartománya -12 és 12 közötti tartományba kerül átültetésre. A vázlat feltételezi, hogy a joystick nyugalmi értékei a tartomány közepe körül vannak, de egy küszöbön belül változnak.
A nyomógomb lehetővé teszi az egérvezérlés be- és kikapcsolását. Opcióként csatlakoztathat állapotjelző LED-et az 5-ös kivezetéshez, amely akkor világít, amikor az Arduino vezérli az egeret. Egy második nyomógomb is csatlakoztatható egy másik 10 kohmos (GND-hez) lehúzó ellenálláshoz a D3-hoz, hogy az bal egérkattintásaként működjön.
Megjegyzés: Amikor a Mouse.move() parancsot használja, az Arduino átveszi a számítógép kurzorát! Annak érdekében, hogy ne veszítse el az uralmat a számítógépe felett, miközben vázlatot futtat ezzel a funkcióval, feltétlenül állítson be egy vezérlőt, mielőtt meghívná a Mouse.move()-t. Ez a vázlat tartalmaz egy nyomógombot az egérvezérlés állapotának váltásához, így be- és kikapcsolhatja az egérvezérlést.
Hardver szükséglet
Arduino Leonardo, Micro vagy Due kártya
2 tengelyes joystick
pillanat nyomógomb (esetleg a joystickbe integrálva)
LED
220 ohmos ellenállás
10 kohmos ellenállás (ha szükséges lehúzóként)
Az áramkör
Csatlakoztassa a Leonardo kártyáját a számítógépéhez mikro-USB-kábellel. A nyomógomb a 6-os kivezetéshez csatlakozik. Ha olyan alkatrészt használ, mint az alábbi képen látható Joystick shield, akkor lehet, hogy nincs szüksége lehúzó ellenállásra. A joystick x tengelye az analóg 0-hoz van csatlakoztatva, az y-tengely az analóg 1-hez.

Vázlat

A kód
/*
JoystickMouseControl
Az egeret az Arduino Leonardo, Micro vagy Due joystickjával vezérli.
Egy nyomógombot használ az egérvezérlés be- és kikapcsolására, egy második
nyomógombot pedig a bal egérgombbal való kattintáshoz.
Hardware:
- 2 tengelyes joystick az A0 és A1 kivezetésekhez csatlakoztatva
- nyomógombok, amelyek a D2 és D3 kivezetésekhez csatlakoznak
Az egér mozgása mindig relatív. Ez a vázlat két analóg bemenetet olvas be,
amelyek 0-tól 1023-ig terjednek (vagy mindkét végén kevesebb), és lefordítja
őket -6 és 6 közötti tartományba.
A vázlat feltételezi, hogy a joystick nyugalmi értékei a tartomány közepe
körül vannak, de egy küszöbön belül változnak.
FIGYELEM: Amikor a Mouse.move() parancsot használja, az Arduino átveszi az egeret!
Az egérparancsok használata előtt győződjön meg arról, hogy rendelkezik a vezérléssel. Ez a vázlat
tartalmaz egy nyomógombot az egérvezérlés állapotának váltásához, így be- és kikapcsolhatja
az egérvezérlést.
created 15 Sep 2011
updated 28 Mar 2012
by Tom Igoe
Ez a kód nyilvános.
https://docs.arduino.cc/built-in-examples/usb/JoystickMouseControl
*/
#include "Mouse.h"
// Kivezetés-számok beállítása a kapcsolókhoz, a joystick tengelyekhez és a LED-hez:
const int switchPin = 2; // kapcsoló az egérvezérlés be- és kikapcsolásához
const int mouseButton = 3; // bemeneti kivezetés az egér nyomógombjához
const int xAxis = A0; // joystick X tengely
const int yAxis = A1; // joystick Y tengely
const int ledPin = 5; // Egér vezérlő LED
// parameters for reading the joystick:
int range = 12; // X vagy Y mozgás kimeneti tartománya
int responseDelay = 5; // az egér válaszkésleltetése, ms-ban
int threshold = range / 4; // nyugalmi küszöb
int center = range / 2; // nyugalmi helyzet értéke
bool mouseIsActive = false; // irányítani kell-e az egeret vagy sem
int lastSwitchState = LOW; // előző kapcsoló állapot
void setup() {
pinMode(switchPin, INPUT); // a kapcsoló kivezetés
pinMode(ledPin, OUTPUT); // a LED kivezetés
// vegye át az irányítást az egér felett:
Mouse.begin();
}
void loop() {
// a kapcsoló olvasása:
int switchState = digitalRead(switchPin);
// ha megváltozott és magas, váltsd át az egér állapotát:
if (switchState != lastSwitchState) {
if (switchState == HIGH) {
mouseIsActive = !mouseIsActive;
// kapcsolja be a LED-et, hogy jelezze az egér állapotát:
digitalWrite(ledPin, mouseIsActive);
}
}
// kapcsoló állapotának mentése a következő összehasonlításhoz:
lastSwitchState = switchState;
// olvassa el és skálázza a két tengelyt:
int xReading = readAxis(A0);
int yReading = readAxis(A1);
// ha az egérvezérlő állapot aktív, mozgassa az egeret:
if (mouseIsActive) {
Mouse.move(xReading, yReading, 0);
}
// olvassa el az egérgombot, és kattintson vagy ne kattintson:
// ha megnyomja az egérgombot:
if (digitalRead(mouseButton) == HIGH) {
// ha az egér nincs lenyomva, nyomja meg:
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT);
}
}
// else nincs megnyomva az egérgomb:
else {
// ha megnyomja az egeret, engedje el:
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
}
delay(responseDelay);
}
/*
beolvas egy tengelyt (0 vagy 1 x-hez vagy y-hoz), és az analóg bemeneti tartományt
0 és <tartomány> közötti tartományra skálázza
*/
int readAxis(int thisAxis) {
// az analóg bemenet olvasása:
int reading = analogRead(thisAxis);
// az analóg bemeneti tartományból a kimeneti tartományra való leképezés:
reading = map(reading, 0, 1023, 0, range);
// ha a kimeneti érték kívül esik a nyugalmi helyzet küszöbén, használja:
int distance = reading - center;
if (abs(distance) < threshold) {
distance = 0;
}
// visszaadja a tengely távolságát:
return distance;
}
Tudj meg többet
További alapvető oktatóanyagokat a beépített példák részben talál.
Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.