# Making a F1 wheel. Keep getting error expected unqualified-id before '.' token

**URL:** <https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689>\
**Category:** Jobs and Paid Consultancy\
**Created:** [May 24, 2020, 1:34am UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689 "2020-05-24T01:34:22Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rickwr88](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rickwr88](https://forum.arduino.cc/u/rickwr88)\
**Post date:** [May 24, 2020, 1:34am UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/1 "2020-05-24T01:34:22Z")

</div>

Hello everyone. I'll start by saying thank you for providing so much info on this forum. I am building a sim racing wheel and now that I am at the programming step I am stuck. I found a sketch on the web but I keep getting error expected unqualified-id before '.' token.  
I've tried couple of things to fix it but I am a newbie in this language so I am limited on ,what I can do about it.  
I have all the libraries downloaded. I am using Arduino 1.8.12 with Arduino Pro Micro

so this is the sketch that I ma trying to work with.

```cpp
//BUTTON BOX 
//USE w ProMicro
//Tested in WIN10 + Assetto Corsa
//AMSTUDIO
//20.8.17

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

#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 24
#define NUMROWS 5
#define NUMCOLS 5

byte buttons[NUMROWS][NUMCOLS] = {
  {0,1,2,3,4},
  {5,6,7,8,9},
  {10,11,12,13,14},
  {15,16,17,18,19},
  {20,21,22,23},
};

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,15}; 
byte colPins[NUMCOLS] = {14,16,10,9,8}; 

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);
    };
  }
}

```

The other thing is that I can't find Arduino Pro Micro in the list.  
There is Micro and there is Pro & Pro mini.

Ho and when I copy the error message this is what I have.

```cpp
Arduino: 1.8.12 (Windows 10), Board: "Arduino Micro"

ARDUINO_BUTTON_BOXV2:95:9: error: expected unqualified-id before '.' token

 Joystick. Joystick(JOYSTICK_DEFAULT_REPORT_ID,

         ^

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':

ARDUINO_BUTTON_BOXV2:102:11: error: expected unqualified-id before '.' token

   Joystick.begin();

           ^

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':

ARDUINO_BUTTON_BOXV2:123:39: error: expected unqualified-id before '.' token

                               Joystick.setButton(buttbx.key[i].kchar, 1);

                                       ^

ARDUINO_BUTTON_BOXV2:127:39: error: expected unqualified-id before '.' token

                               Joystick.setButton(buttbx.key[i].kchar, 0);

                                       ^

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':

ARDUINO_BUTTON_BOXV2:158:15: error: expected unqualified-id before '.' token

       Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

               ^

ARDUINO_BUTTON_BOXV2:158:70: error: expected unqualified-id before '.' token

       Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

                                                                      ^

ARDUINO_BUTTON_BOXV2:161:15: error: expected unqualified-id before '.' token

       Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

               ^

ARDUINO_BUTTON_BOXV2:161:69: error: expected unqualified-id before '.' token

       Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

                                                                     ^

Multiple libraries were found for "Joystick.h"
 Used: C:\Users\RickStuff\Documents\Arduino\libraries\Joystick
 Not used: C:\Users\RickStuff\Documents\Arduino\libraries\AxisJoystick
exit status 1
expected unqualified-id before '.' token

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

```

Any help will be very appreciated.  
Rick

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 24, 2020, 3:28am UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/2 "2020-05-24T03:28:46Z")

</div>

(deleted)

---

<div class="post-metadata">

**Author:** ![wildbill](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wildbill/32/1126438_2.png) [@wildbill](https://forum.arduino.cc/u/wildbill)\
**Post date:** [May 24, 2020, 1:18pm UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/3 "2020-05-24T13:18:11Z")

</div>

The error line looks like you're trying to declare a joystick object. There are two issues: there's a period ('.') that shouldn't be there. Also, you're apparently declaring a variable Joystick of type Joystick. The two things can't have the same name - check your library examples to see how to do it - which one are you using?

---

<div class="post-metadata">

**Author:** ![rickwr88](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rickwr88](https://forum.arduino.cc/u/rickwr88)\
**Post date:** [May 25, 2020, 1:03pm UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/4 "2020-05-25T13:03:38Z")

</div>

Hello guys. Thanks for the quick answer. As I said I am a newbie in all of this so I am not sure of all the terms you are using. I've start reading on the "[w3shcools.com](http://w3shcools.com)" website so I can learn what I can but I don't understand much so far.  
Since my knowledge in C++ language is far from writing a sketch I looked and found this sketch from 2 different YouTube channel where it seems to work fine. I've contacted them both and I obviously haven' t received any answer.  
The Joystick library that I am using is "Joystick" from Giuseppe Martini V1.0.0  
When you said "the two things can't have the same name" I am not sure what things you are talking about.  
Sorry. Very noob...  
Rick

---

<div class="post-metadata">

**Author:** ![wildbill](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wildbill/32/1126438_2.png) [@wildbill](https://forum.arduino.cc/u/wildbill)\
**Post date:** [May 25, 2020, 1:19pm UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/5 "2020-05-25T13:19:39Z")

</div>

The first Joystick on the line is defining the type of a variable. The second is the name of the variable. They cannot be the same. In the example that comes with the library the second one has a lower case 'j' i.e joystick.

Delete the dot, change the second Joystick to joystick and when you recompile you'll get some new errors to fix.

---

<div class="post-metadata">

**Author:** ![rickwr88](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rickwr88](https://forum.arduino.cc/u/rickwr88)\
**Post date:** [May 25, 2020, 11:45pm UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/6 "2020-05-25T23:45:49Z")

</div>

Hello WildBill. Thanks again for your help.  
I did changed the second Joystick for joystick and remove the dot.  
Now I have the error 'JOYSTICK\_REPORT\_ID' was not declared in this scope.  
This is what look the sketch at the moment.

```cpp
#include <Joystick.h>
#include <XInverterJoystick.h>
#include <XYReplacerJoystick.h>
#include <YInverterJoystick.h>

//BUTTON BOX 
//USE w ProMicro
//Tested in WIN10 + Assetto Corsa
//AMSTUDIO
//20.8.17

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

#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 24
#define NUMROWS 5
#define NUMCOLS 5

byte buttons[NUMROWS][NUMCOLS] = {
  {0,1,2,3,4},
  {5,6,7,8,9},
  {10,11,12,13,14},
  {15,16,17,18,19},
  {20,21,22,23},
};

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,15}; 
byte colPins[NUMCOLS] = {14,16,10,9,8}; 

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);
    };
  }
}

```

an this is my error report.

```cpp
Arduino: 1.8.12 (Windows 10), Board: "Arduino Micro"

ARDUINO_BUTTON_BOXV2:103:19: error: 'JOYSTICK_DEFAULT_REPORT_ID' was not declared in this scope

 Joystick Joystick(JOYSTICK_DEFAULT_REPORT_ID,

                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~

ARDUINO_BUTTON_BOXV2:104:3: error: 'JOYSTICK_TYPE_JOYSTICK' was not declared in this scope

  JOYSTICK_TYPE_JOYSTICK, 32, 0,

  ^ ~~~~~~~~~~~~~~~~~~~~~

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':

ARDUINO_BUTTON_BOXV2:110:12: error: expected ';' before 'begin'

  Joystick begin();

            ^ ~~~~

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':

ARDUINO_BUTTON_BOXV2:131:40: error: expected ';' before 'setButton'

                              Joystick setButton(buttbx.key[i].kchar, 1);

                                        ^ ~~~~~~~~

ARDUINO_BUTTON_BOXV2:135:40: error: expected ';' before 'setButton'

                              Joystick setButton(buttbx.key[i].kchar, 0);

                                        ^ ~~~~~~~~

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':

ARDUINO_BUTTON_BOXV2:166:16: error: expected ';' before 'setButton'

      Joystick setButton(rotaries[i].ccwchar, 1); delay(50); joystick.setButton(rotaries[i].ccwchar, 0);

                ^ ~~~~~~~~

ARDUINO_BUTTON_BOXV2:166:62: error: 'joystick' was not declared in this scope

      Joystick setButton(rotaries[i].ccwchar, 1); delay(50); joystick.setButton(rotaries[i].ccwchar, 0);

                                                              ^ ~~~~~~~

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino:166:62: note: suggested alternative: 'Joystick'

      Joystick setButton(rotaries[i].ccwchar, 1); delay(50); joystick.setButton(rotaries[i].ccwchar, 0);

                                                              ^ ~~~~~~~

                                                              Joystick

ARDUINO_BUTTON_BOXV2:169:16: error: expected ';' before 'setButton'

      Joystick setButton(rotaries[i].cwchar, 1); delay(50); joystick.setButton(rotaries[i].cwchar, 0);

                ^ ~~~~~~~~

ARDUINO_BUTTON_BOXV2:169:61: error: 'joystick' was not declared in this scope

      Joystick setButton(rotaries[i].cwchar, 1); delay(50); joystick.setButton(rotaries[i].cwchar, 0);

                                                            ^ ~~~~~~~

E:\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino:169:61: note: suggested alternative: 'Joystick'

      Joystick setButton(rotaries[i].cwchar, 1); delay(50); joystick.setButton(rotaries[i].cwchar, 0);

                                                            ^ ~~~~~~~

                                                            Joystick

Multiple libraries were found for "Joystick.h"
 Used: C:\Users\RickStuff\Documents\Arduino\libraries\Joystick
 Not used: C:\Users\RickStuff\Documents\Arduino\libraries\AxisJoystick
Using library Joystick at version 1.0.0 in folder: C:\Users\RickStuff\Documents\Arduino\libraries\Joystick 
Using library AxisJoystick at version 2.2.3 in folder: C:\Users\RickStuff\Documents\Arduino\libraries\AxisJoystick 
Using library Keypad at version 3.1.0 in folder: C:\Users\RickStuff\Documents\Arduino\libraries\Keypad 
exit status 1
'JOYSTICK_DEFAULT_REPORT_ID' was not declared in this scope

```

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 6, 2021, 12:28pm UTC](https://forum.arduino.cc/t/making-a-f1-wheel-keep-getting-error-expected-unqualified-id-before-token/656689/7 "2021-05-06T12:28:22Z")

</div>

Closed on May 6, 2021, 12:28pm UTC


