mouzeANDkey – Arduino Leonardo Button Mouse


Der Leonardo kann als USB Eingabegerät, z.B. eine Mouse oder Tastatur arbeiten. Der Artikel „Button Mouse Control“ zeigt den Aufbau einer Button-Mouse mit insgesamt 5 Tasten. Nun ich hatte noch eine Taste mehr herumliegen, und so wurden es 6 Tasten.

4 Tasten für die XY-Richtung und eine Maus-Taste. Mit der Extra-Taste habe ich eine Beschleunigung eingebaut. Der Cursor bewegt sich dann um einen Faktor schneller. Was die Bedienung vereinfacht – jedenfalls habe ich mir das so gedacht.

mouzeANDkey-schematicmouzeANDkey-layout

So eine kleine Schaltung kann man aus einer Lochraster Platine und den passenden Stiftleisten, leicht selber bauen. Damit es mir nicht so langweilig wird, habe ich noch eine Ausgang für die Erweiterung integriert. Der wird in dieser Version aber noch nicht verwendet.

Den Sketch habe ich auch für meine Schaltung erweitert und mit Werten eingestellt. Bei mir funktionierte die kleine Button-Mouse ganz passabel.

mouzeANDkey devicemouzeANDkey-pins-to-arduinomouzeANDkey-and-arduinobuttonMouze

Button Mouse Control
https://www.arduino.cc/en/Tutorial/ButtonMouseControl

Hinweis: Ich übernehme keine Haftung für evtl. Schäden. Der Nachbau ist auf eigene Gefahr.

Schematic

/*
mouzeANDkey

button mouse with extraButton for acceleration of the mouse movement

by eNi @bunkerffm.de

based on "KeyboardAndMouseControl"
Controls the mouse from five pushbuttons on an Arduino Leonardo, Micro or Due.
Hardware:
* 5 pushbuttons attached to D2, D3, D4, D5, D6
The mouse movement is always relative. This sketch reads
four pushbuttons, and uses them to set the movement of the mouse.
WARNING: When you use the Mouse.move() command, the Arduino takes
over your mouse! Make sure you have control before you use the mouse commands.
created 15 Mar 2012
modified 27 Mar 2012
by Tom Igoe
this code is in the public domain 
*/

// set pin numbers for the six buttons:
const int upButton = 2;
const int downButton = 4;
const int leftButton = 5;
const int rightButton = 3;
const int mouseButton = 6;
const int extraButton = 7;

int range = 2; // output range of X or Y movement; affects movement speed
int responseDelay = 10; // response delay of the mouse, in ms
int speedUp = 5; // if extraButton pushed speeds up mouse cursor 

int upState;
int downState;
int rightState;
int leftState;
int clickState;
int leftClickState;
int xDistance;
int yDistance;

void setup()
{
 // initialize the buttons' inputs:
 pinMode(upButton, INPUT);
 pinMode(downButton, INPUT);
 pinMode(leftButton, INPUT);
 pinMode(rightButton, INPUT);
 pinMode(mouseButton, INPUT);
 pinMode(extraButton, INPUT);
 // initialize mouse control:
 Mouse.begin();
}

void loop()
{
 
 // read the buttons:
 upState = digitalRead(upButton);
 downState = digitalRead(downButton);
 rightState = digitalRead(rightButton);
 leftState = digitalRead(leftButton);
 clickState = digitalRead(mouseButton);
 leftClickState = digitalRead(extraButton);
 // if the mouse button is pressed:
 if (clickState == HIGH) {
 // if the mouse is not pressed, press it:
 if (!Mouse.isPressed(MOUSE_LEFT)) {
 Mouse.press(MOUSE_LEFT);
 }
 } else {
 // if the mouse is pressed, release it:
 if (Mouse.isPressed(MOUSE_LEFT)) {
 Mouse.release(MOUSE_LEFT);
 } 
 }
 // if the mouse button is pressed:
 if (leftClickState == HIGH) {
 // distance * 
 xDistance = (leftState - rightState) * range * speedUp;
 yDistance = (upState - downState) * range * speedUp;
 } else {
 // calculate the movement distance based on the button states:
 xDistance = (leftState - rightState) * range;
 yDistance = (upState - downState) * range;
 }

 if ((xDistance != 0) || (yDistance != 0)) {
 Mouse.move(xDistance, yDistance, 0);
 }

 // a delay so the mouse doesn't move too fast:
 delay(responseDelay); 
}