Should be ready for testing.
This commit is contained in:
parent
dad952c9a5
commit
f60e44e79c
84
src/main.cpp
84
src/main.cpp
@ -8,6 +8,9 @@
|
|||||||
//numPCFButtons is greater than 8, its expected to be using 2 PCF8572 chips (multiples of 8)
|
//numPCFButtons is greater than 8, its expected to be using 2 PCF8572 chips (multiples of 8)
|
||||||
const int numPCFButtons = 8;
|
const int numPCFButtons = 8;
|
||||||
const int numRotaries = 3;
|
const int numRotaries = 3;
|
||||||
|
const int rotJoy[numRotaries] = {
|
||||||
|
32,30,28
|
||||||
|
};
|
||||||
unsigned long btnTime[numPCFButtons] = {0};
|
unsigned long btnTime[numPCFButtons] = {0};
|
||||||
unsigned long rotTime[numRotaries] = {0};
|
unsigned long rotTime[numRotaries] = {0};
|
||||||
unsigned long btnPressedTime[numPCFButtons] = {0};
|
unsigned long btnPressedTime[numPCFButtons] = {0};
|
||||||
@ -16,15 +19,16 @@ int btnState[numPCFButtons] = {0};
|
|||||||
int rotState[numRotaries] = {0};
|
int rotState[numRotaries] = {0};
|
||||||
const unsigned long gButtonDelta = 15;
|
const unsigned long gButtonDelta = 15;
|
||||||
const unsigned long gButtonPressedDelta = 100;
|
const unsigned long gButtonPressedDelta = 100;
|
||||||
bool debug = false;
|
|
||||||
|
|
||||||
//Setup I/O Expander Chips
|
//Setup I/O Expander Chips
|
||||||
PCF8574 pcf1(0x20);
|
PCF8574 pcf1(0x20);
|
||||||
|
|
||||||
//Setup Rotary Encoders
|
//Setup Rotary Encoders
|
||||||
Rotary r1 = Rotary(4, 5);
|
Rotary r[numRotaries] = {
|
||||||
Rotary r2 = Rotary(6, 7);
|
Rotary (4, 5),
|
||||||
Rotary r3 = Rotary(8, 9);
|
Rotary (6, 7),
|
||||||
|
Rotary (8, 9)
|
||||||
|
};
|
||||||
|
|
||||||
//Setup Joystick
|
//Setup Joystick
|
||||||
Joystick_ joy(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
|
Joystick_ joy(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
|
||||||
@ -39,7 +43,9 @@ void setup() {
|
|||||||
pinMode(LED_BUILTIN, OUTPUT); //debug LED
|
pinMode(LED_BUILTIN, OUTPUT); //debug LED
|
||||||
|
|
||||||
//INIT Rotary Encoder
|
//INIT Rotary Encoder
|
||||||
r1.begin(true);
|
for (int i = 0; i < numRotaries; i++){
|
||||||
|
r[i].begin(true);
|
||||||
|
}
|
||||||
|
|
||||||
//INIT PCF8574
|
//INIT PCF8574
|
||||||
pcf1.begin();
|
pcf1.begin();
|
||||||
@ -57,7 +63,6 @@ void setup() {
|
|||||||
//Joystick start
|
//Joystick start
|
||||||
joy.begin();
|
joy.begin();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void processBtn1(int i) {
|
void processBtn1(int i) {
|
||||||
@ -120,6 +125,40 @@ void processBtn1(int i) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void processRot1(int i) {
|
||||||
|
unsigned char en1 = r[i].process();
|
||||||
|
if (en1) {
|
||||||
|
//Serial.println(en1 == DIR_CW ? "Right" : "Left");
|
||||||
|
if (en1 == DIR_CW) {
|
||||||
|
Serial.println("RIGHT");
|
||||||
|
rotState[i] = 1;
|
||||||
|
rotTime[i] = millis() + gButtonDelta;
|
||||||
|
joy.releaseButton(rotJoy[i]);
|
||||||
|
joy.pressButton(rotJoy[i]);
|
||||||
|
digitalWrite(LED_BUILTIN, LOW); //This can be written for joystick.letgo. This is in case the button is still being pressed, it will let go before pressing it again
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
} else {
|
||||||
|
Serial.println("LEFT");
|
||||||
|
rotState[i] = 1;
|
||||||
|
rotTime[i] = millis() + gButtonDelta;
|
||||||
|
joy.releaseButton(rotJoy[i-1]);
|
||||||
|
joy.pressButton(rotJoy[i-1]);
|
||||||
|
digitalWrite(LED_BUILTIN, LOW); //This can be written for joystick.letgo. This is in case the button is still being pressed, it will let go before pressing it again
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rotState[i] == 1) {
|
||||||
|
if (millis() >= rotTime[1]) {
|
||||||
|
Serial.println("Encoder Off");
|
||||||
|
digitalWrite(LED_BUILTIN,LOW);
|
||||||
|
joy.releaseButton(rotJoy[i]);
|
||||||
|
joy.releaseButton(rotJoy[i-1]);
|
||||||
|
rotState[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void specialBtnOnStart(int i) {
|
void specialBtnOnStart(int i) {
|
||||||
//this sample assumes the button is pressed during startup
|
//this sample assumes the button is pressed during startup
|
||||||
//once the button is not pressed any more, it will simulate a button press.
|
//once the button is not pressed any more, it will simulate a button press.
|
||||||
@ -173,33 +212,10 @@ void loop()
|
|||||||
for (int i = 0; i < numPCFButtons; i++) {
|
for (int i = 0; i < numPCFButtons; i++) {
|
||||||
processBtn1(i);
|
processBtn1(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Rotary Encoder
|
|
||||||
unsigned char en1 = r1.process();
|
|
||||||
if (en1) {
|
|
||||||
//Serial.println(en1 == DIR_CW ? "Right" : "Left");
|
|
||||||
if (en1 == DIR_CW) {
|
|
||||||
Serial.println("RIGHT");
|
|
||||||
rotState[1] = 1;
|
|
||||||
rotTime[1] = millis() + gButtonDelta;
|
|
||||||
digitalWrite(LED_BUILTIN, LOW); //This can be written for joystick.letgo. This is in case the button is still being pressed, it will let go before pressing it again
|
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
|
||||||
} else {
|
|
||||||
Serial.println("LEFT");
|
|
||||||
rotState[1] = 1;
|
|
||||||
rotTime[1] = millis() + gButtonDelta;
|
|
||||||
digitalWrite(LED_BUILTIN, LOW); //This can be written for joystick.letgo. This is in case the button is still being pressed, it will let go before pressing it again
|
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rotState[1] == 1) {
|
|
||||||
if (millis() >= rotTime[1]) {
|
|
||||||
Serial.println("Encoder Off");
|
|
||||||
digitalWrite(LED_BUILTIN,LOW);
|
|
||||||
rotState[1] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//End PCF8574 Button Pressed detection section
|
//End PCF8574 Button Pressed detection section
|
||||||
|
|
||||||
|
for (int i = 0; i < numRotaries; i++) {
|
||||||
|
processRot1(i);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user