From cc3733294c55317cc6fed0726a67c25fca35af1c Mon Sep 17 00:00:00 2001 From: Dan Frumin Date: Fri, 2 Aug 2019 13:14:09 +0200 Subject: [PATCH] use the joystick library --- Makefile | 6 ++++- joystick.ino | 67 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 04e37ec..2db2392 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,10 @@ BOARD_TAG = leonardo MONITOR_PORT = /dev/ttyACM0 ARDUINO_DIR = /home/dan/projects/arduino-1.8.9 -ARDUINO_LIBS = HID Mouse +ARDUINO_LIBS = HID Mouse Joystick +CTAGS_EXEC = /usr/bin/ctags +CTAGS_OPTS = -e +ARDMK_DIR = /home/dan/projects/avr/Arduino-Makefile + include /home/dan/projects/avr/Arduino-Makefile/Arduino.mk diff --git a/joystick.ino b/joystick.ino index b127116..9ffe2dd 100644 --- a/joystick.ino +++ b/joystick.ino @@ -1,21 +1,51 @@ +/* We use the Joystick library from: + */ +#include #include #define DELAY 5 -const int sw_pin = 8; +const int sw_pin = 2; const int vrx_pin = A0; const int vry_pin = A1; +// UP, RIGHT, DOWN, LEFT, additional left, additional right +const int btn_count = 6; +const int btn_pins[] = { 3,4,5,6,7,8 }; + const int base_x = 512; const int base_y = 519; const int max_x = 1023; const int max_y = 1023; -const int rng = 14; + + +const int rng = 500; + + +int mouse_mode = 0; +int prev_readings[btn_count]; + + +Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, + JOYSTICK_TYPE_GAMEPAD, + btn_count, // buttons + 1, // joystick hat switches + true, // X axis + true, // Y axis + false, // Z axis + false, false, false, false, false, false, false, false); void setup() { - pinMode(sw_pin, INPUT_PULLUP); + pinMode(sw_pin, INPUT); + for (int i = 0; i < btn_count; i++) { + pinMode(btn_pins[i], INPUT); + prev_readings[i] = 0; + } Mouse.begin(); + Joystick.begin(); + Joystick.setXAxisRange(-rng, rng); + Joystick.setYAxisRange(-rng, rng); } int prev_clicked = 0; @@ -36,17 +66,32 @@ int read_direction(int analog_pin, int base, int max, int rng) { } void loop() { - int click = get_clicked(); + /*int click = get_clicked(); if (click) { - Mouse.click(); + Mouse.click();}*/ + + for (int i = 0; i < btn_count; i++) { + int pin = btn_pins[i]; + int signal = digitalRead(pin); + if (signal != prev_readings[i]) { + Joystick.setButton(i, signal); + } + prev_readings[i] = signal; } - int dirx = read_direction(vrx_pin, base_x, max_x, rng); + + // Analogue input + 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); + if (mouse_mode) { + if (diry != 0) { + Mouse.move(0, diry, 0); + } + if (dirx != 0) { + Mouse.move(dirx, 0, 0); + } + } else { + Joystick.setXAxis (dirx); + Joystick.setYAxis (diry); } delay(DELAY);