arduino-joystick/joystick.ino

54 lines
1.1 KiB
C++

#include <Mouse.h>
#define DELAY 5
const int sw_pin = 8;
const int vrx_pin = A0;
const int vry_pin = A1;
const int base_x = 512;
const int base_y = 519;
const int max_x = 1023;
const int max_y = 1023;
const int rng = 14;
void setup() {
pinMode(sw_pin, INPUT_PULLUP);
Mouse.begin();
}
int prev_clicked = 0;
int get_clicked() {
int signal = !digitalRead(sw_pin);
int ret = (signal && signal != prev_clicked) ? 1 : 0;
prev_clicked = signal;
return ret;
}
int read_direction(int analog_pin, int base, int max, int rng) {
int signal = analogRead(analog_pin);
if (signal > base) {
return map (signal, base, max, 0, rng);
} else if (signal < base) {
return - map (signal, base, 0, 1, rng);
} else { return 0; }
}
void loop() {
int click = get_clicked();
if (click) {
Mouse.click();
}
int dirx = read_direction(vrx_pin, base_x, max_x, rng);
int diry = read_direction(vry_pin, base_y, max_y, rng);
if (diry != 0) {
Mouse.move(0, diry, 0);
}
if (dirx != 0) {
Mouse.move(dirx, 0, 0);
}
delay(DELAY);
}