'Joystick_' does not name a type; did you mean 'Joystick'?

I have in the past uploaded this exact code to a Pro Micro and had no issues.

I am trying to upload the exact same sketch to a twin of the 1st board (By twin of the first board, I simply mean an identicial board, purchased at the same time of the same type), and get the above mentioned error

HOpeing that I properly posted the code for the sketch. I did n ot write the sketch, and the author seems as mystified as I am, possibly more so.

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

Joystick.h (458 Bytes)

please read how to use the forum and edit+correct the post above using code tags.

what's a twin of Pro Micro? and please put a link to the Joystick.h library you are using (look in the console when you compile in verbose mode to see if there is any mention of multiple libraries found)

I believe I have the correct joystick library attached. For testing purposes, I installed Arduino IDE on a different machine (PC), one that hadn't ever had a project on it. No versions of libraries or any software installed to get confused over.

The author of the sketch, a struggling-to-understand-arduino hardware guy like myself sent me the absolute newest version of his sketch last night, together via teamviewer we watched as it failed the same way.

It wouldn't surprise me one bit to learn this problem is self-inflicted due to not having a full grasp of Arduino, running before walking and crawling. The fact that it worked the first time was either luck or just something fundamental I've overlooked this time.

When I look at the verbose output a message is displayed :

Button_Box_Final:95:1: error: 'Joystick_' does not name a type; did you mean 'Joystick'?

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,

^~~~~~~~~

Joystick

C:\Users\AV\Documents\Arduino\Button_Box_Final\Button_Box_Final.ino: In function 'void setup()':

Button_Box_Final:101:11: error: expected unqualified-id before '.' token

Joystick.begin();

^

C:\Users\AV\Documents\Arduino\Button_Box_Final\Button_Box_Final.ino: In function 'void CheckAllButtons()':

Button_Box_Final:123:21: error: expected unqualified-id before '.' token

Joystick.setButton(buttbx.key*.kchar, 1);*

  • ^*
    Button_Box_Final:127:21: error: expected unqualified-id before '.' token
    _ Joystick.setButton(buttbx.key*.kchar, 0);_
    _
    ^_
    C:\Users\AV\Documents\Arduino\Button_Box_Final\Button_Box_Final.ino: In function 'void CheckAllEncoders()':
    Button_Box_Final:158:15: error: expected unqualified-id before '.' token
    Joystick.setButton(rotaries_.ccwchar, 1); delay(50); Joystick.setButton(rotaries.ccwchar, 0);
    ^
    Button_Box_Final:158:70: error: expected unqualified-id before '.' token
    Joystick.setButton(rotaries.ccwchar, 1); delay(50); Joystick.setButton(rotaries.ccwchar, 0);
    ^
    Button_Box_Final:161:15: error: expected unqualified-id before '.' token
    Joystick.setButton(rotaries.cwchar, 1); delay(50); Joystick.setButton(rotaries.cwchar, 0);
    ^
    Button_Box_Final:161:69: error: expected unqualified-id before '.' token
    Joystick.setButton(rotaries.cwchar, 1); delay(50); Joystick.setButton(rotaries.cwchar, 0);
    ^
    Using library Keypad at version 3.1.1 in folder: C:\Users\AV\Documents\Arduino\libraries\Keypad
    Using library Joystick at version 1.0.0 in folder: C:\Users\AV\Documents\Arduino\libraries\Joystick
    exit status 1_

    'Joystick_' does not name a type; did you mean 'Joystick'?[/quote]*

Please post the full error message so that the exact error line can be identified and examined

There might be an error prior to that

You have installed the "Joystick" library from Library Manager. That library has nothing to do with emulating a USB joystick. You need this one:

Since they both define "Joystick.h" you will probably have to delete the currently installed library to make sure the correct library is used.

3 Likes

Well, thanks to John and J-M-L the error has been corrected. I guess that's what happens when you try to run before you can crawl.

The first batch of these i did worked without a hitch, so I guess I was a bit over confident.

Thanks again all...

S~
Iracing Muskoka (Y/T)