Looking for help for connecting and coding simracing button box

Hey everyone

I'm looking for some help for connecting an two way toggle switch with LED and extra Push button.
I'm building a simracing button box with even more buttons.
The switch that i'm trying to connect is this one:

The board that i'm using as an Arduino Pro Micro.
I have 16 other pushbuttons which i already connected and coded. They are working perfect. But now i'm stuck with the starter.. and i have no cleu how to figure this in out.

PS i'm not a pro, i'm just a newbee ( or noob ) who just started with this new adventure and verry verry motivated to learn even more. I do not want to stop if this box is ready.

Thank you in advane for your help;

Tell me if I'm wrong but it sound to me that this is an application problem on the PC and not an Arduino problem. I guess you have to figure out which keycode has to be transmitted that the application thinks the starter was hit. You either have to ask the software developer or sniff what the part you linked to transmits if the starter was hit.

Hi Pylon.
No its not a problem with the pc.

i didn't even wired the switch or connected it to the arduino bord. because i do not know how :smiley: the 16 standard buttons where easy. But the switch with the LED's in etc.. thats to high end for me to figgure out on myself

Post the code.

Post the schematic.

Post your attempts to add one button and one LED was it?

a7

2 Likes

Hi A7

I didnt even made one attempt to connect the start/stop switch and button to the board because i simply do not know how to start. :smiley:

Below is the drawing like a have the 16 standard buttons now. They work perfectly btw, already test it.

image

Here is the code that i'm using. I know it's messy. Probably a lot of stuff in it that i do not nood. But i took this one from the internet and tryed to adjust it myself. I'm still new at all of this :slight_smile:

#include <Key.h>
#include <Keypad.h>
#include <Joystick.h>


#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 16
#define NUMROWS 4
#define NUMCOLS 4

byte buttons[NUMROWS][NUMCOLS] = {
  { 0, 1, 2, 3 },
  { 4, 5, 6, 7 },
  { 8, 9, 10, 11 },
  { 12, 13, 14, 15 },
};

struct rotariesdef {
  byte pin1;
  byte pin2;
  int ccwchar;
  int cwchar;
  volatile unsigned char state;
};

rotariesdef rotaries[NUMROTARIES]{
  { 0, 1, 24, 25, 0 },
  { 2, 3, 26, 27, 0 },
  { 4, 5, 28, 29, 0 },
  { 6, 7, 30, 31, 0 },
};

#define DIR_CCW 0x10
#define DIR_CW 0x20
#define R_START 0x0

#ifdef HALF_STEP
#define R_CCW_BEGIN 0x1
#define R_CW_BEGIN 0x2
#define R_START_M 0x3
#define R_CW_BEGIN_M 0x4
#define R_CCW_BEGIN_M 0x5
const unsigned char ttable[6][4] = {
  // R_START (00)
  { R_START_M, R_CW_BEGIN, R_CCW_BEGIN, R_START },
  // R_CCW_BEGIN
  { R_START_M | DIR_CCW, R_START, R_CCW_BEGIN, R_START },
  // R_CW_BEGIN
  { R_START_M | DIR_CW, R_CW_BEGIN, R_START, R_START },
  // R_START_M (11)
  { R_START_M, R_CCW_BEGIN_M, R_CW_BEGIN_M, R_START },
  // R_CW_BEGIN_M
  { R_START_M, R_START_M, R_CW_BEGIN_M, R_START | DIR_CW },
  // R_CCW_BEGIN_M
  { R_START_M, R_CCW_BEGIN_M, R_START_M, R_START | DIR_CCW },
};
#else
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6

const unsigned char ttable[7][4] = {
  // R_START
  { R_START, R_CW_BEGIN, R_CCW_BEGIN, R_START },
  // R_CW_FINAL
  { R_CW_NEXT, R_START, R_CW_FINAL, R_START | DIR_CW },
  // R_CW_BEGIN
  { R_CW_NEXT, R_CW_BEGIN, R_START, R_START },
  // R_CW_NEXT
  { R_CW_NEXT, R_CW_BEGIN, R_CW_FINAL, R_START },
  // R_CCW_BEGIN
  { R_CCW_NEXT, R_START, R_CCW_BEGIN, R_START },
  // R_CCW_FINAL
  { R_CCW_NEXT, R_CCW_FINAL, R_START, R_START | DIR_CCW },
  // R_CCW_NEXT
  { R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START },
};

#endif

byte rowPins[NUMROWS] = {
  21,
  20,
  19,
  18,
};
byte colPins[NUMCOLS] = {
  14,
  15,
  16,
  10,
};
Keypad buttbx = Keypad(makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
                   JOYSTICK_TYPE_JOYSTICK, 32, 0,
                   false, false, false, false, false, false,
                   false, false, false, false, false);

void setup() {
  Joystick.begin();
  rotary_init();
}

void loop() {
  CheckAllEncoders();
  CheckAllButtons();
}
void CheckAllButtons(void) {
  if (buttbx.getKeys()) {
    for (int i = 0; i < LIST_MAX; i++)
      if (buttbx.key[i].stateChanged) {
        switch (buttbx.key[i].kstate) {
          case PRESSED:
          case HOLD:
            Joystick.setButton(buttbx.key[i].kchar, 1);
            break;
          case RELEASED:
          case IDLE:
            Joystick.setButton(buttbx.key[i].kchar, 0);
            break;
        }
      }
  }
}

void rotary_init() {
  for (int i = 0; i < NUMROTARIES; i++) {
    pinMode(rotaries[i].pin1, INPUT);
    pinMode(rotaries[i].pin2, INPUT);
#ifdef ENABLE_PULLUPS
    digitalWrite(rotaries[i].pin1, HIGH);
    digitalWrite(rotaries[i].pin2, HIGH);
#endif
  }
}
unsigned char rotary_process(int _i) {
  unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
  rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
  return (rotaries[_i].state & 0x30);
}
void CheckAllEncoders(void) {
  for (int i = 0; i < NUMROTARIES; i++) {
    unsigned char result = rotary_process(i);
    if (result == DIR_CCW) {
      Joystick.setButton(rotaries[i].ccwchar, 1);
      delay(50);
      Joystick.setButton(rotaries[i].ccwchar, 0);
    };
    if (result == DIR_CW) {
      Joystick.setButton(rotaries[i].cwchar, 1);
      delay(50);
      Joystick.setButton(rotaries[i].cwchar, 0);
    };
  }
}

I also added a picture from the back of the start/stop switch.

image

We all started out knowing nothing. Some of us couldn't even walk or talk.

Edit your previous post, please.

First, use Tools/Auto Format in the IDE to make your code pretty.

The use Edit / Copy for Forum in the IDE to copy your code, and come here and paste it where your code is now.

It will end up looking like this.

void setup()
{

}

void loop()
{

}

a7

Et Voila :slight_smile: i adjusted my post. i hope its bether readable now

1 Like

You should tell us if you don't know how to wire that stuff!

The component you chose is for real cars, it expects 12V. Do you have 12V available in your project? Otherwise the LED(s) may not light up. The connections to light it up are visible in your photo. If you connect everything that way you get a 12V signal when the start button is hit. You can use a simple voltage divider to bring that to a 5V level your Arduino can consume. That's a 33k resistor in series with a 22k to GND and you get the signal for the Arduino in between them.

Perfect. THX.

So, is that a SPDT temporary switch (pushbutton) and a SPDT toggle switch? And an LED?

Looks like. Just a bit annoying that the digram on the back assumes that we are going to use it for its intended functionality.

The momentary pushbutton is no problem.

The LED may be a problem as @pylon as described.

The switch that stays where yo put it must be handled a bit differently. But I have actually kept my beach buddy waiting, there'll be hell to pay, as she does not like that, no, not one little bit.

L8R

a7

1 Like

I did mentioned it in a previous replay here that i do not know how to wire it :). The LED will give light but not as bright as with 12V. According to other topics that i found here :).
And i have no clue how to work with resisoters etc. I do not have an electrical diploma, i have no knowledge. I'm just a new guy who's trying to figure things out :).

That is correct sir :slight_smile:

I can't get your code to compile, looks like a library issue.

What exact <Joystick.h< library are you using?

Might as well also say what are the versions of the other libraries while you are at it.

a7

For the Keypad: If you search in your "Manage Libraries" for Keypad and then install the one created by Mark Stanley And Alexander Brevig.
For the Joystick Library: GitHub - MHeironimus/ArduinoJoystickLibrary: An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support..

I compiled and uploaded that code. The 16 pushbottons worked. I checked it in windows

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.