Code used to compile, no changes and now wont?

Hello, my name is Nick and about 2 years ago build a button box. Recently I needed an Arduino for physics class and my second one didn't work, so I stole the Arduino I had been using in my button box and re codded it. Ever since then when taking the original button box code unmodified, it won't recompile and be saved onto the board I was using previously. Any ideas on why it won't compile anymore?

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

//DEFINITIONS
#define ENABLE_PULLUPS
#define NUMROTARIES 0 //replace "?" with number of rotary encoders you are using
#define NUMBUTTONS 32 //replace "?"with number of buttong you are using
#define NUMROWS 6 //replace "?" with number of rows you have
#define NUMCOLS 6 //replace "?" with number of columns you have

//BUTTON MATRIX
//first change number of rows and columns to match your button matrix, 
//then replace all "?" with numbers (starting from 0)
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},
  {24,25,26,27,28,29},
  {30,31,32,33,34,35}
  
 
 
};

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

//ROTARY ENCODERS
//each line controls a different rotary encoder
//the first two numbers refer to the pins the encoder is connected to 
//the second two are the buttons each click of the encoder wil press 
//do NOT exceed 31 for the final button number
rotariesdef rotaries[NUMROTARIES] {


};

#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

//BUTTON MATRIX PART 2
byte rowPins[NUMROWS] = {A5,A4,A3,A2,A1,A0}; //change "?" to the pins the rows of your button matrix are connected to
byte colPins[NUMCOLS] = {8,9,10,11,12,13}; //change "?" to the pins the rows of your button matrix are connected to

Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);

//JOYSTICK SETTINGS
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
  JOYSTICK_TYPE_JOYSTICK,
  32, //number of buttons
  0, //number of hat switches
  //Set as many axis to "true" as you have potentiometers for
  false, // y axis
  false, // x axis
  false, // z axis
  false, // rx axis
  false, // ry axis
  false, // rz axis
  false, // rudder
  false, // throttle
  false, // accelerator
  false, // brake
  false); // steering wheel

const int numReadings = 20;
 
int readings[numReadings];      // the readings from the analog input
int index = 0;              // the index of the current reading
int total = 0;                  // the running total
int currentOutputLevel = 0;

//POTENTIOMETERS PART 1
//add all the axis' which are enabled above
int zAxis_ = 0;
int RxAxis_ = 0;   

               
//POTENTIOMETERS  PART 2
//Which pins are your potentiometers connected to?
int potentiometerPin1 = 0; //Change "?" to the pin your potentiometer is connected to
int potentiometerPin2 = 0;
const bool initAutoSendState = true;


void setup() {
  Joystick.begin();
  rotary_init();
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}

void loop() {

  CheckAllEncoders();
  CheckAllButtons();
  CheckAllPotentiometers();
 
}

//POTENTIOMETERS PART 3
//change the details to match teh details above for each potentiometer you are using
void CheckAllPotentiometers(){
                           
  //potentiometer 1
  currentOutputLevel = getAverageOutput(potentiometerPin1);
  zAxis_ = map(currentOutputLevel,0,1023,0,255);
  Joystick.setZAxis(zAxis_); 

  //potentiometer 2
  currentOutputLevel = getAverageOutput(potentiometerPin2);
  RxAxis_ = map(currentOutputLevel,0,1023,0,255);
  Joystick.setRxAxis(RxAxis_);


}

int getAverageOutput(int pinToRead){
  index = 0;
  total = 0; 
 
  while (index < numReadings){
    readings[index] = analogRead(pinToRead);
    total = total + readings[index];
    index = index + 1;
    //delay (1);
  }
  return total / numReadings;
}


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) {
  //Serial.print("Processing rotary: ");
  //Serial.println(_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) {
  Serial.println("Checking rotaries");
  for (int i=0;i<NUMROTARIES;i++) {
    unsigned char result = rotary_process(i);
    if (result == DIR_CCW) {
      Serial.print("Rotary ");
      Serial.print(i);
      Serial.println(" <<< Going CCW");
      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
    };
    if (result == DIR_CW) {
      Serial.print("Rotary ");
      Serial.print(i);
      Serial.println(" >>> Going CW");
      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
    };
  }
  Serial.println("Done checking");
}

These are the initial errors I get.

/usr/local/bin/arduino-cli compile --fqbn arduino:avr:leonardoeth --build-cache-path /tmp --output-dir /tmp/1594083658/build --build-path /tmp/arduino-build-D7C569E98392A802056C2AF4F8B58814 /tmp/1594083658/Large_Button_Box_-_Code_File

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-Code_File.ino:101:1: error: 'Joystick' does not name a type; did you mean 'Joystick'?

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,

^~~~~~~~~

Joystick

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino: In function 'void setup()':

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:139:11: error: expected unqualified-id before '.' token

Joystick.begin();

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino: In function 'void CheckAllPotentiometers()':

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:161:11: error: expected unqualified-id before '.' token

Joystick.setZAxis(zAxis_);

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:166:11: error: expected unqualified-id before '.' token

Joystick.setRxAxis(RxAxis_);

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino: In function 'void CheckAllButtons()':

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:195:39: error: expected unqualified-id before '.' token

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

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:199:39: error: expected unqualified-id before '.' token

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

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino: In function 'void CheckAllEncoders()':

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:236:15: error: expected unqualified-id before '.' token

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

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:236:70: error: expected unqualified-id before '.' token

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

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:242:15: error: expected unqualified-id before '.' token

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

^

/tmp/1594083658/Large_Button_Box_-Code_File/Large_Button_Box-_Code_File.ino:242: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: /home/builder/opt/libraries/joystick_1_0_0

Not used: /home/builder/opt/libraries/joystick_module_1_0_0

Not used: /home/builder/opt/libraries/bluevga_library_for_bluepill_0_1_3

Not used: /home/builder/opt/libraries/axisjoystick_2_2_3

Multiple libraries were found for "Keypad.h"

Used: /home/builder/opt/libraries/keypad_3_1_1

Not used: /home/builder/opt/libraries/acemenu_0_1_3

Error during build: exit status 1
Blockquote

Is it just not able to find the libraries needed?

you use two libraries

have those been changed/updated in the past 2 years? (did you keep the source code of the libraries back then?)

Im not sure, back when I made the box, I had compiled it on the same pc I am using now. How would I go about updating them?

It might not be the case that you need to update them as it is possible that you already updated the libraries and your existing code does not work with the new version of the library. In that case you need to remember what library version you used.

Did you update just your libraries, Arduino IDE or board manager?

did you reinstall or update the libraries in the past 2 years ?

Keypad does not feel it got changed
Joystick had some changes last year


side note, which arduino do you have?

When doing that I was using the web editor, I just tried using the Arduino IDE Windows client and it worked! Thanks! I guess I'll never update my client that way I can keep using this code lol. Or in the future is there a way to update the code so it also works with the web editor? I need to rebuild the button box as it has gotten beaten up and needs a remake. Thanks for all your help though!

I have an Arduino Leonardo ETH but now it's working since I used the downloaded IDE software. Thank you for the help though!

You need to keep version control on each project, make a note whenever you make project changes, what changes were made on what date. Also keep a note of the board, board manager version, library version and IDE version used on each project.

I've never used the web editor but I guess you will run into compatibility problems if it uses different IDE/library/board manager versions than your pc.

Okay yeah I will definitely make sure to do that from now on thank you again!

This is not related to avrdude, bootloader etc; hence moved to a more suitable location on the forum.

ah OK - the Joystick Library is probably not available on line

1 Like

Ahhh okay coolio cause when I was tryinh before it wouldn't work on my desktop since my com ports are messed up, idk lol some of them do and don't work so I guess I finally found one that did! Hopefully should be building a new PC soon!

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