Working
This commit is contained in:
parent
7060381063
commit
8deff7f064
60
src/main.cpp
60
src/main.cpp
|
@ -8,16 +8,13 @@
|
||||||
#define SWITCHES 20
|
#define SWITCHES 20
|
||||||
#define KNOBPOSITIONS 5
|
#define KNOBPOSITIONS 5
|
||||||
#define BUTTONS 12
|
#define BUTTONS 12
|
||||||
#define PRESSDURATION 50
|
#define PRESSDURATION 40
|
||||||
#define RELEASEDURATION 25
|
#define RELEASEDURATION 20
|
||||||
#define BOUNCEINTERVAL PRESSDURATION
|
#define BOUNCEINTERVAL PRESSDURATION
|
||||||
#define SWITCHBUTTONS 2 * SWITCHES
|
#define SWITCHBUTTONS 2 * SWITCHES
|
||||||
#define ENCODERBUTTONS 2 * ENCODERS
|
#define ENCODERBUTTONS 2 * ENCODERS
|
||||||
//button order: buttons, switches, encoders
|
|
||||||
#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 encoderPins[][2] = {{28,29},{31,30},{33,32},{35,34},{37,36}}; //data, clock (swap #1 because it sucks)
|
||||||
const int buttonPins[] = {2,3,4,5,6,7,8,38,40,42,44,46};
|
const int buttonPins[] = {2,3,4,5,6,7,8,38,40,42,44,46};
|
||||||
const int switchPins[] = {1,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27};
|
const int switchPins[] = {1,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27};
|
||||||
const int analogSwitchPin = A0;
|
const int analogSwitchPin = A0;
|
||||||
|
@ -25,14 +22,13 @@ const int analogSwitchPin = A0;
|
||||||
const long speedLimit = 10;
|
const long speedLimit = 10;
|
||||||
const long holdTime = 100;
|
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);
|
Joystick_ JoystickButtons(0x03, JOYSTICK_TYPE_GAMEPAD, BUTTONS, 1, false, false, false, false, false, false, false, false, false, false, false);
|
||||||
|
Joystick_ JoystickSwitches(0x04, JOYSTICK_TYPE_GAMEPAD, SWITCHBUTTONS, 0, false, false, false, false, false, false, false, false, false, false, false);
|
||||||
|
Joystick_ JoystickEncoders(0x05, JOYSTICK_TYPE_GAMEPAD, ENCODERBUTTONS, 0, false, false, false, false, false, false, false, false, false, false, false);
|
||||||
|
|
||||||
Bounce * switches = new Bounce[SWITCHES];
|
Bounce * switches = new Bounce[SWITCHES];
|
||||||
|
|
||||||
// enum buttonStates {ready, requested, active, hold};
|
|
||||||
|
|
||||||
struct vbuttonStatus {
|
struct vbuttonStatus {
|
||||||
// buttonStates state = ready;
|
|
||||||
// unsigned long pressTime = 0;
|
|
||||||
unsigned long releaseTime = 0;
|
unsigned long releaseTime = 0;
|
||||||
unsigned long freeTime = 0;
|
unsigned long freeTime = 0;
|
||||||
};
|
};
|
||||||
|
@ -61,53 +57,65 @@ void setup() {
|
||||||
switches[i].interval(BOUNCEINTERVAL);
|
switches[i].interval(BOUNCEINTERVAL);
|
||||||
};
|
};
|
||||||
pinMode(analogSwitchPin, INPUT);
|
pinMode(analogSwitchPin, INPUT);
|
||||||
Joystick.begin();
|
JoystickButtons.begin();
|
||||||
|
JoystickSwitches.begin();
|
||||||
|
JoystickEncoders.begin();
|
||||||
};
|
};
|
||||||
|
|
||||||
void updateKnob(){
|
void updateKnob(){
|
||||||
int8_t knobPosition = analogRead(analogSwitchPin) / 205;
|
int8_t knobPosition = analogRead(analogSwitchPin) / 205;
|
||||||
knobPosition--;
|
knobPosition--;
|
||||||
if (knobPosition > -1) knobPosition = knobPosition * 90;
|
if (knobPosition > -1) knobPosition = knobPosition * 90;
|
||||||
Joystick.setHatSwitch(0, knobPosition);
|
JoystickButtons.setHatSwitch(0, knobPosition);
|
||||||
};
|
};
|
||||||
|
|
||||||
void doSwitches(int switchNumber){
|
void doSwitches(int switchNumber){
|
||||||
switches[switchNumber].update();
|
switches[switchNumber].update();
|
||||||
if (switches[switchNumber].changed()){
|
if (switches[switchNumber].changed()){
|
||||||
const uint8_t upButton = switchNumber + SWITCHBUTTONOFFSET;
|
const uint8_t upButton = switchNumber;
|
||||||
const uint8_t downButton = upButton + SWITCHES;
|
const uint8_t downButton = upButton + SWITCHES;
|
||||||
if (switches[switchNumber].rose()) {
|
if (switches[switchNumber].rose()) {
|
||||||
switchButtonState[upButton].releaseTime = millis() + PRESSDURATION;
|
switchButtonState[upButton].releaseTime = millis() + PRESSDURATION;
|
||||||
switchButtonState[downButton].releaseTime = millis();
|
switchButtonState[downButton].releaseTime = millis();
|
||||||
Joystick.pressButton(upButton);
|
JoystickSwitches.pressButton(upButton);
|
||||||
} else {
|
} else {
|
||||||
switchButtonState[downButton].releaseTime = millis() + PRESSDURATION;
|
switchButtonState[downButton].releaseTime = millis() + PRESSDURATION;
|
||||||
switchButtonState[upButton].releaseTime = millis();
|
switchButtonState[upButton].releaseTime = millis();
|
||||||
Joystick.pressButton(downButton);
|
JoystickSwitches.pressButton(downButton);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void interpretEncoder(int encoderNumber){
|
void interpretEncoder(int encoderNumber){
|
||||||
const uint8_t downButton = encoderNumber + ENCODERBUTTONOFFSET;
|
const uint8_t downButton = encoderNumber * 2;
|
||||||
const uint8_t upButton = downButton + 1;
|
const uint8_t upButton = downButton + 1;
|
||||||
encoderState[encoderNumber].position = encoder[encoderNumber].read() / 4;
|
encoderState[encoderNumber].position = encoder[encoderNumber].read() / 4;
|
||||||
if (encoderState[encoderNumber].position != encoderState[encoderNumber].reportedPosition) {
|
if (encoderState[encoderNumber].position != encoderState[encoderNumber].reportedPosition) {
|
||||||
if((encoderState[encoderNumber].position > encoderState[encoderNumber].reportedPosition) && (encoderButtonState[upButton].freeTime <= millis())) {
|
if (encoderState[encoderNumber].position > encoderState[encoderNumber].reportedPosition) {
|
||||||
|
if (encoderButtonState[upButton].freeTime <= millis()) {
|
||||||
encoderButtonState[upButton].releaseTime = millis() + PRESSDURATION;
|
encoderButtonState[upButton].releaseTime = millis() + PRESSDURATION;
|
||||||
encoderButtonState[upButton].freeTime = encoderButtonState[upButton].releaseTime + RELEASEDURATION;
|
encoderButtonState[upButton].freeTime = encoderButtonState[upButton].releaseTime + RELEASEDURATION;
|
||||||
encoderButtonState[downButton].releaseTime = millis();
|
encoderButtonState[downButton].releaseTime = millis();
|
||||||
encoderButtonState[downButton].freeTime = millis() + RELEASEDURATION;
|
encoderButtonState[downButton].freeTime = millis() + RELEASEDURATION;
|
||||||
Joystick.pressButton(upButton);
|
JoystickEncoders.pressButton(upButton);
|
||||||
encoderState[encoderNumber].reportedPosition ++;
|
encoderState[encoderNumber].reportedPosition ++;
|
||||||
} else if((encoderState[encoderNumber].position < encoderState[encoderNumber].reportedPosition) && (encoderButtonState[downButton].freeTime <= millis())) {
|
}
|
||||||
|
if (encoderState[encoderNumber].position - encoderState[encoderNumber].reportedPosition > MAXLAG) {
|
||||||
|
encoderState[encoderNumber].reportedPosition += MAXLAG;
|
||||||
|
}
|
||||||
|
} else if (encoderState[encoderNumber].position < encoderState[encoderNumber].reportedPosition) {
|
||||||
|
if (encoderButtonState[downButton].freeTime <= millis()) {
|
||||||
encoderButtonState[downButton].releaseTime = millis() + PRESSDURATION;
|
encoderButtonState[downButton].releaseTime = millis() + PRESSDURATION;
|
||||||
encoderButtonState[downButton].freeTime = encoderButtonState[downButton].releaseTime + RELEASEDURATION;
|
encoderButtonState[downButton].freeTime = encoderButtonState[downButton].releaseTime + RELEASEDURATION;
|
||||||
encoderButtonState[upButton].releaseTime = millis();
|
encoderButtonState[upButton].releaseTime = millis();
|
||||||
encoderButtonState[upButton].freeTime = millis() + RELEASEDURATION;
|
encoderButtonState[upButton].freeTime = millis() + RELEASEDURATION;
|
||||||
Joystick.pressButton(downButton);
|
JoystickEncoders.pressButton(downButton);
|
||||||
encoderState[encoderNumber].reportedPosition --;
|
encoderState[encoderNumber].reportedPosition --;
|
||||||
}
|
}
|
||||||
|
if (encoderState[encoderNumber].reportedPosition - encoderState[encoderNumber].position > MAXLAG) {
|
||||||
|
encoderState[encoderNumber].reportedPosition -= MAXLAG;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -119,18 +127,20 @@ void loop(){
|
||||||
static uint8_t switchButtonNumber = 0;
|
static uint8_t switchButtonNumber = 0;
|
||||||
static uint8_t encoderButtonNumber = 0;
|
static uint8_t encoderButtonNumber = 0;
|
||||||
updateKnob();
|
updateKnob();
|
||||||
digitalRead(buttonPins[buttonNumber]) ? Joystick.releaseButton(buttonNumber) : Joystick.pressButton(buttonNumber);
|
digitalRead(buttonPins[buttonNumber]) ? JoystickButtons.releaseButton(buttonNumber) : JoystickButtons.pressButton(buttonNumber);
|
||||||
|
|
||||||
doSwitches(switchNumber);
|
doSwitches(switchNumber);
|
||||||
interpretEncoder(encoderNumber);
|
interpretEncoder(encoderNumber);
|
||||||
|
|
||||||
if (switchButtonState[switchButtonNumber].releaseTime <= millis()) Joystick.releaseButton(switchButtonNumber + SWITCHBUTTONOFFSET);
|
if (switchButtonState[switchButtonNumber].releaseTime <= millis()) JoystickSwitches.releaseButton(switchButtonNumber);
|
||||||
if (encoderButtonState[encoderButtonNumber].releaseTime <= millis()) Joystick.releaseButton(encoderButtonNumber + ENCODERBUTTONOFFSET);
|
if (encoderButtonState[encoderButtonNumber].releaseTime <= millis()) JoystickEncoders.releaseButton(encoderButtonNumber);
|
||||||
|
|
||||||
buttonNumber == BUTTONS-1 ? buttonNumber = 0 : buttonNumber++;
|
buttonNumber == BUTTONS-1 ? buttonNumber = 0 : buttonNumber++;
|
||||||
switchNumber == SWITCHES-1 ? switchNumber = 0 : switchNumber++;
|
switchNumber == SWITCHES-1 ? switchNumber = 0 : switchNumber++;
|
||||||
encoderNumber == ENCODERS-1 ? encoderNumber = 0 : encoderNumber++;
|
encoderNumber == ENCODERS-1 ? encoderNumber = 0 : encoderNumber++;
|
||||||
switchButtonNumber == SWITCHBUTTONS-1 ? switchButtonNumber = 0 : switchButtonNumber++;
|
switchButtonNumber == SWITCHBUTTONS-1 ? switchButtonNumber = 0 : switchButtonNumber++;
|
||||||
encoderButtonNumber == ENCODERBUTTONS-1 ? encoderButtonNumber = 0 : encoderButtonNumber++;
|
encoderButtonNumber == ENCODERBUTTONS-1 ? encoderButtonNumber = 0 : encoderButtonNumber++;
|
||||||
Joystick.sendState();
|
JoystickButtons.sendState();
|
||||||
|
JoystickSwitches.sendState();
|
||||||
|
JoystickEncoders.sendState();
|
||||||
};
|
};
|
Loading…
Reference in New Issue