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

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.

//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.

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

(deleted)

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?

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" 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

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.

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.

#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.

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