87 lines
2.3 KiB
Arduino
87 lines
2.3 KiB
Arduino
|
/*
|
||
|
ButtonMouseControl
|
||
|
|
||
|
Controls the mouse from five pushbuttons on an Arduino Leonardo, Micro or Due.
|
||
|
|
||
|
Hardware:
|
||
|
- five pushbuttons attached to D12, D13, D14, D15, D0
|
||
|
|
||
|
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 example code is in the public domain.
|
||
|
|
||
|
http://www.arduino.cc/en/Tutorial/ButtonMouseControl
|
||
|
*/
|
||
|
|
||
|
#include "USB.h"
|
||
|
#include "USBHIDMouse.h"
|
||
|
USBHIDMouse Mouse;
|
||
|
|
||
|
|
||
|
// set pin numbers for the five buttons:
|
||
|
const int upButton = 12;
|
||
|
const int downButton = 13;
|
||
|
const int leftButton = 14;
|
||
|
const int rightButton = 15;
|
||
|
const int mouseButton = 0;
|
||
|
|
||
|
int range = 5; // output range of X or Y movement; affects movement speed
|
||
|
int responseDelay = 10; // response delay of the mouse, in ms
|
||
|
|
||
|
|
||
|
void setup() {
|
||
|
// initialize the buttons' inputs:
|
||
|
pinMode(upButton, INPUT_PULLUP);
|
||
|
pinMode(downButton, INPUT_PULLUP);
|
||
|
pinMode(leftButton, INPUT_PULLUP);
|
||
|
pinMode(rightButton, INPUT_PULLUP);
|
||
|
pinMode(mouseButton, INPUT_PULLUP);
|
||
|
// initialize mouse control:
|
||
|
Mouse.begin();
|
||
|
USB.begin();
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
// read the buttons:
|
||
|
int upState = digitalRead(upButton);
|
||
|
int downState = digitalRead(downButton);
|
||
|
int rightState = digitalRead(rightButton);
|
||
|
int leftState = digitalRead(leftButton);
|
||
|
int clickState = digitalRead(mouseButton);
|
||
|
|
||
|
// calculate the movement distance based on the button states:
|
||
|
int xDistance = (leftState - rightState) * range;
|
||
|
int yDistance = (upState - downState) * range;
|
||
|
|
||
|
// if X or Y is non-zero, move:
|
||
|
if ((xDistance != 0) || (yDistance != 0)) {
|
||
|
Mouse.move(xDistance, yDistance, 0);
|
||
|
}
|
||
|
|
||
|
// if the mouse button is pressed:
|
||
|
if (clickState == LOW) {
|
||
|
// 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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// a delay so the mouse doesn't move too fast:
|
||
|
delay(responseDelay);
|
||
|
}
|