Hi,
Hoping someone can help with the continuing saga of my first attempt at a repair job on a sim racing button box...
After various trials and errors I'm so tied up in knots I don't even know where to go now. To cut a long story short, I have managed to program a Teensy LC as per my schematic attached. All buttons are working except the rotary switches. These are the CTS288V which I have attached a tech document for. This button box will be used on iRacing and had requested help there, and was informed by a staff member there that the CTS288V is not a quadrature encoder so I should just program the PIN for each directional rotation as a button. The problem I'm finding is that when I rotate the switch it does register a button press (so yeah its working), but it also will register the other pin for the anticlockwise rotation, so its not very helpful as the switch is kind of giving me two button presses and not really doing what I need.
I've tried to educate myself on inputs and input pullups but I have to be honest and say I don't really understand it. I'm guessing there is something not quite right with how the rotary resets the button press and it holds that button/PIN in/on but I'm not sure how to go about rectifying it. The main point is should this be a button press or using encoder in the script...I'm so lost its not even funny!
As mentioned I have attached my schematic, data sheet for the rotary and I'll copy my code below.
Hoping someone can help with the continuing saga of my first attempt at a repair job on a sim racing button box...
After various trials and errors I'm so tied up in knots I don't even know where to go now. To cut a long story short, I have managed to program a Teensy LC as per my schematic attached. All buttons are working except the rotary switches. These are the CTS288V which I have attached a tech document for. This button box will be used on iRacing and had requested help there, and was informed by a staff member there that the CTS288V is not a quadrature encoder so I should just program the PIN for each directional rotation as a button. The problem I'm finding is that when I rotate the switch it does register a button press (so yeah its working), but it also will register the other pin for the anticlockwise rotation, so its not very helpful as the switch is kind of giving me two button presses and not really doing what I need.
I've tried to educate myself on inputs and input pullups but I have to be honest and say I don't really understand it. I'm guessing there is something not quite right with how the rotary resets the button press and it holds that button/PIN in/on but I'm not sure how to go about rectifying it. The main point is should this be a button press or using encoder in the script...I'm so lost its not even funny!
As mentioned I have attached my schematic, data sheet for the rotary and I'll copy my code below.
Code:
#include <Bounce.h>
Bounce button0 = Bounce(0, 10);
Bounce button1 = Bounce(1, 10);
Bounce button2 = Bounce(2, 10);
Bounce button3 = Bounce(3, 10);
Bounce button4 = Bounce(4, 10);
Bounce button5 = Bounce(5, 10);
Bounce button6 = Bounce(6, 10);
Bounce button7 = Bounce(7, 10);
Bounce button8 = Bounce(8, 10);
Bounce button9 = Bounce(9, 10);
Bounce button13 = Bounce(13, 10);
Bounce button14 = Bounce(14, 10);
Bounce button15 = Bounce(15, 10);
Bounce button16 = Bounce(16, 10);
Bounce button17 = Bounce(17, 10);
Bounce button18 = Bounce(18, 10);
void setup() {
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
pinMode(16, INPUT_PULLUP);
pinMode(17, INPUT_PULLUP);
pinMode(18, INPUT_PULLUP);
}
void loop() {
button0.update();
button1.update();
button2.update();
button3.update();
button4.update();
button5.update();
button6.update();
button7.update();
button8.update();
button9.update();
button13.update();
button14.update();
button15.update();
button16.update();
button17.update();
button18.update();
if (button0.fallingEdge()) {
Joystick.button(1, 1);
}
if (button1.fallingEdge()) {
Joystick.button(2, 1);
}
if (button2.fallingEdge()) {
Joystick.button(3, 1);
}
if (button3.fallingEdge()) {
Joystick.button(4, 1);
}
if (button4.fallingEdge()) {
Joystick.button(5, 1);
}
if (button5.fallingEdge()) {
Joystick.button(6, 1);
}
if (button6.fallingEdge()) {
Joystick.button(7, 1);
}
if (button7.fallingEdge()) {
Joystick.button(8, 1);
}
if (button8.fallingEdge()) {
Joystick.button(9, 1);
}
if (button9.fallingEdge()) {
Joystick.button(10, 1);
}
if (button13.fallingEdge()) {
Joystick.button(14, 1);
}
if (button14.fallingEdge()) {
Joystick.button(15, 1);
}
if (button15.fallingEdge()) {
Joystick.button(16, 1);
}
if (button16.fallingEdge()) {
Joystick.button(17, 1);
}
if (button17.fallingEdge()) {
Joystick.button(18, 1);
}
if (button18.fallingEdge()) {
Joystick.button(19, 1);
}
if (button0.risingEdge()) {
Joystick.button(1, 0);
}
if (button1.risingEdge()) {
Joystick.button(2, 0);
}
if (button2.risingEdge()) {
Joystick.button(3, 0);
}
if (button3.risingEdge()) {
Joystick.button(4, 0);
}
if (button4.risingEdge()) {
Joystick.button(5, 0);
}
if (button5.risingEdge()) {
Joystick.button(6, 0);
}
if (button6.risingEdge()) {
Joystick.button(7, 0);
}
if (button7.risingEdge()) {
Joystick.button(8, 0);
}
if (button8.risingEdge()) {
Joystick.button(9, 0);
}
if (button9.risingEdge()) {
Joystick.button(10, 0);
}
if (button13.risingEdge()) {
Joystick.button(14, 0);
}
if (button14.risingEdge()) {
Joystick.button(15, 0);
}
if (button15.risingEdge()) {
Joystick.button(16, 0);
}
if (button16.risingEdge()) {
Joystick.button(17, 0);
}
if (button17.risingEdge()) {
Joystick.button(18, 0);
}
if (button18.risingEdge()) {
Joystick.button(19, 0);
}
}