From c95988060f9dae6192fea32ca872e76819463f89 Mon Sep 17 00:00:00 2001 From: James Wood Date: Tue, 2 Nov 2021 21:56:52 +1100 Subject: [PATCH] upload and move to windows --- platformio.ini | 4 +- src/main.cpp | 115 +++++++++++++++++++++---------------------------- 2 files changed, 50 insertions(+), 69 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4452f24..9cfa079 100755 --- a/platformio.ini +++ b/platformio.ini @@ -19,8 +19,8 @@ lib_deps = ; nicohood/HID-Project @ ^2.6.1 monitor_speed = 115200 ; monitor_port = /dev/tty.usbmodemHIDPE1 -upload_port = /dev/tty.usbmodem22301 -monitor_port = /dev/tty.usbmodem22301 +; upload_port = /dev/tty.usbmodem22301 +; monitor_port = /dev/tty.usbmodem22301 ; upload_port = /dev/tty.usbmodem22301 ; monitor_port = /dev/cu.usbmodemHIDAF1 ; upload_port = /dev/cu.usbmodemHIDAF1 \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 02d3e82..eacd472 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,14 +8,14 @@ #define SWITCHES 20 #define KNOBPOSITIONS 5 #define BUTTONS 12 -#define BOUNCEINTERVAL 25 #define PRESSDURATION 50 #define RELEASEDURATION 25 +#define BOUNCEINTERVAL PRESSDURATION #define SWITCHBUTTONS 2 * SWITCHES #define ENCODERBUTTONS 2 * ENCODERS //button order: buttons, switches, encoders -#define SWITCHVBUTTONOFFSET BUTTONS -#define ENCODERVBUTTONOFFSET BUTTONS + SWITCHBUTTONS +#define SWITCHBUTTONOFFSET BUTTONS +#define ENCODERBUTTONOFFSET BUTTONS + SWITCHBUTTONS const int encoderPins[][2] = {{28,29},{30,31},{33,32},{35,34},{37,36}}; //data, clock const int buttonPins[] = {2,3,4,5,6,7,8,38,40,42,44,46}; @@ -28,14 +28,16 @@ const long holdTime = 100; Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD, BUTTONS + SWITCHBUTTONS + ENCODERBUTTONS, 1, false, false, false, false, false, false, false, false, false, false, false); Bounce * switches = new Bounce[SWITCHES]; -enum buttonStates {ready, requested, active, hold}; +// enum buttonStates {ready, requested, active, hold}; struct vbuttonStatus { - buttonStates state = ready; - unsigned long activeTime = 0; + // buttonStates state = ready; + // unsigned long pressTime = 0; + unsigned long releaseTime = 0; + unsigned long freeTime = 0; }; -struct encoderStatus : vbuttonStatus { +struct encoderStatus { long position = 0; long reportedPosition = 0; }; @@ -57,7 +59,7 @@ void setup() { for(int i = 0; i encoderState[encoderNumber].reportedPosition)) { - vbuttonState[upButton].state = requested; - if (encoderState[encoderNumber].position - encoderState[encoderNumber].reportedPosition > MAXLAG){ - encoderState[encoderNumber].reportedPosition = encoderState[encoderNumber].position - MAXLAG; + switchButtonState[upButton].releaseTime = millis() + PRESSDURATION; + switchButtonState[downButton].releaseTime = millis(); + Joystick.pressButton(upButton); } else { - encoderState[encoderNumber].reportedPosition++; - } - } - if((vbuttonState[downButton].state == ready) && (encoderState[encoderNumber].reportedPosition > encoderState[encoderNumber].position)) { - vbuttonState[downButton].state = requested; - if (encoderState[encoderNumber].reportedPosition - encoderState[encoderNumber].position > MAXLAG){ - encoderState[encoderNumber].reportedPosition = encoderState[encoderNumber].position + MAXLAG - } else { - encoderState[encoderNumber].reportedPosition--; + switchButtonState[downButton].releaseTime = millis() + PRESSDURATION; + switchButtonState[upButton].releaseTime = millis(); + Joystick.pressButton(downButton); } } }; + +void interpretEncoder(int encoderNumber){ + const uint8_t downButton = encoderNumber + ENCODERBUTTONOFFSET; + const uint8_t upButton = downButton + 1; + encoderState[encoderNumber].position = encoder[encoderNumber].read() / 4; + if (encoderState[encoderNumber].position != encoderState[encoderNumber].reportedPosition){ + if((encoderState[encoderNumber].position > encoderState[encoderNumber].reportedPosition) && (encoderButtonState[upButton].freeTime <= millis())) { + encoderButtonState[upButton].releaseTime = millis() + PRESSDURATION; + encoderButtonState[upButton].freeTime = encoderButtonState[upButton].releaseTime + RELEASEDURATION; + encoderButtonState[downButton].releaseTime = millis(); + encoderButtonState[downButton].freeTime = millis() + RELEASEDURATION; + Joystick.pressButton(upButton); + encoderState[encoderNumber].reportedPosition ++; + } else if((encoderState[encoderNumber].position < encoderState[encoderNumber].reportedPosition) && (encoderButtonState[downButton].freeTime <= millis())) { + encoderButtonState[downButton].releaseTime = millis() + PRESSDURATION; + encoderButtonState[downButton].freeTime = encoderButtonState[downButton].releaseTime + RELEASEDURATION; + encoderButtonState[upButton].releaseTime = millis(); + encoderButtonState[upButton].freeTime = millis() + RELEASEDURATION; + Joystick.pressButton(downButton); + encoderState[encoderNumber].reportedPosition --; + } + } }; -void performPresses(int vButtonNumber){ - if(vbuttonState[vButtonNumber].state == requested) pushVButton(vButtonNumber); - if((vbuttonState[vButtonNumber].state == active) && (millis() - vbuttonState[vButtonNumber].activeTime > PRESSDURATION)) releaseVButton(vButtonNumber); - if((vbuttonState[vButtonNumber].state == hold) && (millis() - vbuttonState[vButtonNumber].activeTime > RELEASEDURATION)) vbuttonState[vButtonNumber].state = ready; -}; - -void pushVButton(int vButtonNumber){ - vbuttonState[vButtonNumber].pressTime = millis(); - vbuttonState[vButtonNumber].releaseTime = millis() + PRESSDURATION; - vbuttonState[vButtonNumber].nextAvailablePress = millis() + PRESSDURATION + RELEASEDURATION; - vbuttonState[vButtonNumber].state = active; - Joystick.pressButton(vButtonNumber); -}; - -void releaseVButton(int vButtonNumber){ - vbuttonState[vButtonNumber].state = hold; - vbuttonState[vButtonNumber].activeTime = millis(); - Joystick.releaseButton(vButtonNumber); -}; - -void loop() { +void loop(){ //button order: buttons, switches, encoders static uint8_t switchNumber = 0; static uint8_t buttonNumber = 0; @@ -140,11 +121,11 @@ void loop() { updateKnob(); digitalRead(buttonPins[buttonNumber]) ? Joystick.releaseButton(buttonNumber) : Joystick.pressButton(buttonNumber); - readSwitch(switchNumber); - updateSwitch(switchNumber); + doSwitches(switchNumber); + interpretEncoder(encoderNumber); - encoderState[encoderNumber].position = encoder[encoderNumber].read() / 4; - updateEncoder(encoderNumber); + if (switchButtonState[switchButtonNumber].releaseTime <= millis()) Joystick.releaseButton(switchButtonNumber); + if (encoderButtonState[encoderButtonNumber].releaseTime <= millis()) Joystick.releaseButton(encoderButtonNumber); buttonNumber == BUTTONS-1 ? buttonNumber = 0 : buttonNumber++; switchNumber == SWITCHES-1 ? switchNumber = 0 : switchNumber++;