Με την χρήση της βιβλιοθήκης του ποντικιού, σας δίνεται η δυνατότητα να ελέγχετε τον κέρσορα της οθόνης του υπολογιστή σας. Αυτό μπορεί να γίνει μέσω μιας πλακέτας του Arduino Leonardo, Micro, ή Due. Το συγκεκριμένο παράδειγμα, χρησιμοποιεί ένα μπουτόν το οποίο θα ενεργοποιεί ή θα απενεργοποιεί τον έλεγχο του ποντικιού μέσω ενός χειριστηρίου.
Η κίνηση του δρομέα μέσα από το Arduino είναι πάντα σχετική. Έτσι, κάθε φορά που θα διαβάζεται μια αναλογική είσοδος, τότε η θέση του δρομέα θα ενημερώνεται σε σχέση με την τωρινή του θέση.
Συγκεκριμένα, χρησιμοποιούνται δύο αναλογικές είσοδοι με τιμές που κυμαίνονται από το 0 έως το 1023. Αυτές μεταφράζονται σε -12V και σε +12V αντίστοιχα. Ο παρακάτω κώδικας, υποθέτει ότι οι τιμές λειτουργίας του χειριστηρίου, βρίσκονται κάπου στην μέση αυτού του εύρους τιμών. Όμως, αυτό μπορεί να ποικίλλει ανάλογα την περίσταση.
Ο έλεγχος του ποντικιού επιτυγχάνεται με την χρήση ενός στιγμιαίου μπουτόν. Ο σκοπός του είναι να λειτουργεί ως ένας διακόπτης εναλλαγής. Δηλαδή, να κάνει την μετάβαση από το on σε off και το αντίστροφο. Μια εναλλακτική πρόταση είναι να συνδέσετε ένα led με τον ακροδέκτη 5 του Arduino. Οπότε, όταν αυτό θα ανάβει, τότε θα ξέρετε ότι η πλακέτα έχει τον έλεγχο του ποντικιού σας. Επίσης, μπορούμε να συνδέσουμε και ένα δεύτερο στιγμιαίο μπουτόν. Έτσι, αυτό θα λειτουργήσει σαν το αριστερό κλικ του ποντικιού. Για την σύνδεσή του, θα χρειαστούμε άλλη μια αντίσταση καθόδου των 10k ohm. Η μια άκρη της θα συνδεθεί με το D3. Ενώ η άλλη άκρη θα συνδεθεί με την γείωση.
Αποσαφήνιση: Να έχετε υπόψη σας ότι όταν χρησιμοποιείτε την εντολή Mouse.move(), τότε το Arduino θα πάρει τον έλεγχο του κέρσορα του υπολογιστή σας. Έτσι, πρώτα από όλα, βεβαιωθείτε ότι δεν θα χάσετε τον έλεγχο του υπολογιστή σας κατά την εκτέλεση κώδικα που εμπεριέχει αυτήν την συνάρτηση. Αυτό μπορεί να πραγματοποιηθεί αν δημιουργήσετε έναν ελεγκτή, προτού να καλέσετε την συνάρτηση Mouse.move(). Ο παρακάτω κώδικας, περιλαμβάνει ένα μπουτόν εναλλαγής της κατάστασης ελέγχου του ποντικιού. Κατά αυτόν τον τρόπο, θα μπορείτε είτε να ενεργοποιείτε, είτε να απενεργοποιείτε τον έλεγχο του ποντικιού.
Απαιτούμενος εξοπλισμός
– Πλακέτα του Arduino Leonardo, Micro ή Due.
– Ένα χειριστήριο (joystick) των δύο αξόνων.
– Ένα στιγμιαίο μπουτόν. Συνήθως είναι ενσωματωμένο πάνω στο χειριστήριο.
– Ένα led.
– Μία αντίσταση των 220 ohm.
– Μία αντίσταση των 10k ohm σε περίπτωση που απαιτηθεί μία αντίσταση καθόδου.
– Καλώδια σύνδεσης.
– Ένα breadboard.
Κύκλωμα
Συνδέστε την πλακέτα σας με τον υπολογιστή μέσω ενός καλωδίου micro-USB. Το στιγμιαίο μπουτόν πρέπει να είναι συνδεδεμένο με τον ακροδέκτη 6 του Arduino. Σε περίπτωση που χρησιμοποιείτε ένα χειριστήριο όπως αυτό της παρακάτω εικόνας, τότε δεν θα χρειαστείτε την αντίσταση καθόδου. Οι τελευταίες συνδέσεις που απομένουν αφορούν τους δύο άξονες λειτουργίας του χειριστηρίου. Δηλαδή, ο άξονας x θα συνδεθεί αναλογικά με τον ακροδέκτη 0. Ενώ, ο άξονας y θα συνδεθεί αναλογικά με τον ακροδέκτη 1.

Σχηματικά

Κώδικας
/*
JoystickMouseControl
Controls the mouse from a joystick on an Arduino Leonardo, Micro or Due.
Uses a pushbutton to turn on and off mouse control, and
a second pushbutton to click the left mouse button
Hardware:
* 2-axis joystick connected to pins A0 and A1
* pushbuttons connected to pin D2 and D3
The mouse movement is always relative. This sketch reads
two analog inputs that range from 0 to 1023 (or less on either end)
and translates them into ranges of -6 to 6.
The sketch assumes that the joystick resting values are around the
middle of the range, but that they vary within a threshold.
WARNING: When you use the Mouse.move() command, the Arduino takes
over your mouse! Make sure you have control before you use the command.
This sketch includes a pushbutton to toggle the mouse control state, so
you can turn on and off mouse control.
created 15 Sept 2011
updated 28 Mar 2012
by Tom Igoe
this code is in the public domain
*/
#include "Mouse.h"
// set pin numbers for switch, joystick axes, and LED:
const int switchPin = 2; // switch to turn on and off mouse control
const int mouseButton = 3; // input pin for the mouse pushButton
const int xAxis = A0; // joystick X axis
const int yAxis = A1; // joystick Y axis
const int ledPin = 5; // Mouse control LED
// parameters for reading the joystick:
int range = 12; // output range of X or Y movement
int responseDelay = 5; // response delay of the mouse, in ms
int threshold = range / 4; // resting threshold
int center = range / 2; // resting position value
boolean mouseIsActive = false; // whether or not to control the mouse
int lastSwitchState = LOW; // previous switch state
void setup() {
pinMode(switchPin, INPUT); // the switch pin
pinMode(ledPin, OUTPUT); // the LED pin
// take control of the mouse:
Mouse.begin();
}
void loop() {
// read the switch:
int switchState = digitalRead(switchPin);
// if it's changed and it's high, toggle the mouse state:
if (switchState != lastSwitchState) {
if (switchState == HIGH) {
mouseIsActive = !mouseIsActive;
// turn on LED to indicate mouse state:
digitalWrite(ledPin, mouseIsActive);
}
}
// save switch state for next comparison:
lastSwitchState = switchState;
// read and scale the two axes:
int xReading = readAxis(A0);
int yReading = readAxis(A1);
// if the mouse control state is active, move the mouse:
if (mouseIsActive) {
Mouse.move(xReading, yReading, 0);
}
// read the mouse button and click or not click:
// if the mouse button is pressed:
if (digitalRead(mouseButton) == HIGH) {
// if the mouse is not pressed, press it:
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT);
}
}
// else the mouse button is not pressed:
else {
// if the mouse is pressed, release it:
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
}
delay(responseDelay);
}
/*
reads an axis (0 or 1 for x or y) and scales the
analog input range to a range from 0 to
*/
int readAxis(int thisAxis) {
// read the analog input:
int reading = analogRead(thisAxis);
// map the reading from the analog input range to the output range:
reading = map(reading, 0, 1023, 0, range);
// if the output reading is outside from the
// rest position threshold, use it:
int distance = reading - center;
if (abs(distance) < threshold) {
distance = 0;
}
// return the distance for this axis:
return distance;
}
Επιστροφή στην σελίδα Παραπομπές Γλώσσας
