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.
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.
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); }