My functions don´t seem to work: expected primary-expression before 'gamepad'

Hi there Im using the Bluepad32 library to connect my arduino to an Xbox controller & I´m trying to clean up my code. I´ve nested two funcitons within the "void processGamepad(ControllerPtr gamepad) " Function which in the example code Updates the states of the variables assigned to the controller. It fails to compile with this error message:

C:\Users\Bob\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void processGamepad(ControllerPtr)':
C:\Users\Bob\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:93:27: error: expected primary-expression before 'gamepad'
   CheckMode(ControllerPtr gamepad);
                           ^~~~~~~
C:\Users\Bob\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:94:31: error: expected primary-expression before 'gamepad'
   CheckThrottle(ControllerPtr gamepad);
                               ^~~~~~~

exit status 1

Compilation error: expected primary-expression before 'gamepad'

The code Is as follows:

#include <Wire.h>
#include <Bluepad32.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
ControllerPtr myControllers[BP32_MAX_CONTROLLERS];

#define MIN_PULSE_LENGTH 100 // Minimum pulse length in µs
#define MAX_PULSE_LENGTH 200 // Maximum pulse length in µs


float locV, airV;

unsigned long Atime = 0;//AirTime
unsigned long Stime = 0;//SendTime
unsigned long Ltime = 0;//LocalTime

bool mtoggle = false;
bool calibrated = true;
bool vtoggle = false;
bool vtoggle1 = false;

int trim[2]={0,0};//[0]:aileron,[1]:elevon
int a, h, k, j, AileronI, ElevatorI, power = 0;

uint8_t data[3]={0,90,90};//[0]:throtle,[1]:aileron,[2]:elevon

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay(); 
  display.setTextSize(1);
  display.setTextColor(WHITE);

  Stime = millis();
  locV = 0;
  airV = 0;

  const uint8_t* addr = BP32.localBdAddress();
  BP32.setup(&onConnectedController, &onDisconnectedController);
}

void loop() {
  BP32.update();

  for (int i = 0; i < BP32_MAX_CONTROLLERS; i++) {
    ControllerPtr myController = myControllers[i];

    if (myController && myController->isConnected()) {
      processGamepad(myController); 
    }
  }

  ReadVoltage();
  DrawFrame();
  CommsSend();
  PrintData();
}

void onConnectedController(ControllerPtr ctl) {
  bool foundEmptySlot = false;
  for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
    if (myControllers[i] == nullptr) {
      // Serial.print("CALLBACK: Controller is connected, index=");
      // Serial.println(i);
      myControllers[i] = ctl;
      foundEmptySlot = true;
      ControllerProperties properties = ctl->getProperties();
      break;
    }
  }
}

void onDisconnectedController(ControllerPtr ctl) {
  bool foundGamepad = false;
  for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
    if (myControllers[i] == ctl) {
      myControllers[i] = nullptr;
      foundGamepad = true;
      break;
    }
  }
}

void processGamepad(ControllerPtr gamepad) {
  BP32.update();
  CheckMode(ControllerPtr gamepad);
  CheckThrottle(ControllerPtr gamepad);
}

void CheckMode(ControllerPtr gamepad){
  while (calibrated == false){
    display.clearDisplay();

    if (gamepad->miscButtons() == 8){
      data[0]=200;//[0]:throtle
      display.fillRect(3, 24, 61*2, 6, SSD1306_WHITE);
    }
    else{
      data[0]=100;
    }
    
    if (gamepad->miscButtons()-k == -2){
      calibrated = !calibrated;
      data[0]=100;
    }
    k = gamepad->miscButtons();  

    CommsSend();

    display.drawRect(00, 00, 128, 32, SSD1306_WHITE);

    display.setCursor(3, 3);
    display.println("LOCAL");
    display.setCursor(3, 8);
    display.println("-----");
    display.setCursor(3, 14);
    display.print("00.00");

    //display.fillRect(32, 8, 6, 1, SSD1306_WHITE);
    display.fillRect(38, 11, 8, 2, SSD1306_WHITE);
    display.fillRect(39, 11, 6, 10, SSD1306_WHITE);
    display.fillRect(39, 3, 6, 8, SSD1306_WHITE);

    display.setCursor(52, 3);
    display.println("LYNX");
    display.setCursor(96, 3);
    display.println("CRAFT");
    display.setCursor(96, 8);
    display.println("-----");
    display.setCursor(96, 14);
    display.print("00.00");

    display.fillRect(82, 11, 8, 2, SSD1306_WHITE);
    display.fillRect(83, 11, 6, 10, SSD1306_WHITE);
    display.fillRect(83, 3, 6, 8, SSD1306_WHITE);
    //display.fillRect(90, 9, 6, 1, SSD1306_WHITE);

    display.setCursor(49, 14);//(55,14 "CAL")
    display.println("!CAL!");
    display.display(); 
  }

  if (gamepad->miscButtons()-k == -2){
    //Serial.println("CALIBRATED!!");
    calibrated = !calibrated;
    mtoggle = false;
    k = 0;
  }
  k = gamepad->miscButtons();
}

void CheckThrottle(ControllerPtr gamepad){
  if (gamepad->miscButtons()-j == -4){
    mtoggle = !mtoggle;
    data[0] = 108;
    j =0 ;
  } 
  j = gamepad->miscButtons();  

  if (mtoggle == true){   
    if (gamepad->throttle()>0){
      data[0] += map(gamepad->throttle(),0,1023,0,8);
      if (data[0]>200){
        data[0] = 200;
      }
    }
  
    if (gamepad->brake()>0){
      data[0] -= map(gamepad->brake(),0,1023,0,8);
      if (data[0]<108){
        data[0] = 108;
      }
    }
  }
  else{
    data[0] = 100;
  }

  if(h-gamepad->dpad()==-8){ //Aileron Trim
    if(trim[0]<=6){
      trim[0] += 1;
    }
  }
  else if(h-gamepad->dpad()==-4){ //Aileron Trim
    if(trim[0]>=-6){
      trim[0] -= 1;
    }
  }
  else if(h-gamepad->dpad()==-1){ //Elevon Trim
    if(trim[1]<=15){
      trim[1] += 1;
    }
  }
  else if(h-gamepad->dpad()==-2){ //Elevon Trim
    if(trim[1]>=0){
      trim[1] -= 1;
    }
  }
  h=gamepad->dpad();

  if(abs(gamepad->axisRX())>50){
    data[1]= map(gamepad->axisRX(),-512,512,78,102);
    if(data[1]<78){
      data[1] = 78;
    }
    if(data[1]>102){
      data[1] = 102;
    }
  }
  else{
    data[1] = 90;
  }
  data[1]+=trim[0];
  
  if(abs(gamepad->axisY())>50){
    data[2]= map(gamepad->axisY(),-512,512,60,120);
    if(data[2]<60){
      data[2] = 60;
    }
    if(data[2]>120){
      data[2] = 120;
    }
  }
  else{
    data[2] = 90;
  } 
  data[2]+=trim[1];
}

void CommsSend(){
  if((millis()-Stime)>=50){
    Serial1.write(0x5A);
    Serial1.write((char*) data, sizeof(data));
    Stime = millis();
  }
}

void ReadVoltage(){
  if (Serial1.available()) {
    uint8_t c = Serial1.read();// make sure we find the initial header
    if (c != 0xA5) {
       return;// loop around waiting for the next packet of data
    }
    airV = 2*Serial1.read()/25.1;//Divisor de voltaje es multiplicador*0.251
    Atime = millis();
  }
  if(millis()-Atime>2000){
    airV = 0.00;
    Atime = millis();
  }

  if(millis()-Ltime>2000){
    locV = map(analogRead(A3),0,1023,0,3.30/0.404);//Reads up top 3.3, maps to 8V*0.404V divider
    Ltime=millis();
  }
}

void DrawFrame(){
  display.clearDisplay(); 
  display.drawRect(00, 00, 128, 32, SSD1306_WHITE);

  if(mtoggle == true){
    power = map(data[0],104,200,2,61);
    display.fillRect(64-power, 24, power*2, 6, SSD1306_WHITE);
  }
 
  display.setCursor(3, 3);
  display.println("LOCAL");
  display.setCursor(3, 8);
  display.println("-----");
  display.setCursor(3, 14);
  if(locV<10){
  display.print("0");
  }
  display.println(locV);

  display.setCursor(52, 3);
  display.println("LYNX");
  display.setCursor(96, 3);
  display.println("CRAFT");
  display.setCursor(96, 8);
  display.println("-----");
  display.setCursor(96, 14);
  if(airV<10){
    display.print("0");
  }
  display.println(airV);

  if(locV<7.6 && airV<11.4){
    display.setCursor(48, 14);
    display.println("!!V!!");
  }
  else if(locV>7.6 && airV>11.4){
    display.setCursor(61, 14);
    display.println("V");
  }
  else if(locV<7.6){
    display.setCursor(49, 14);
    display.println("! V");
  }
  else{
    display.setCursor(61, 14);
    display.println("V !");
  }

  ElevatorI=map(data[2],60,120,-9,9);
  if(ElevatorI<=0){
    display.fillRect(39, 12+ElevatorI, 6, abs(ElevatorI), SSD1306_WHITE);
  } 
  else{
    display.fillRect(39, 12, 6, ElevatorI, SSD1306_WHITE);
  } 
  
  display.fillRect(38, 11, 8, 2, SSD1306_WHITE);
  display.fillRect(82, 11, 8, 2, SSD1306_WHITE);

  AileronI=map(data[1],78,102,-9,9);
  if(AileronI<=0){
    display.fillRect(83, 12+AileronI, 6, abs(AileronI), SSD1306_WHITE);
  } 
  else{
    display.fillRect(83, 12, 6, AileronI, SSD1306_WHITE);
  } 
  
  display.display();
}

void PrintData(){
  Serial.println("----");
    for (int i=0; i <=2 ; i++) {
        Serial.println(data[i]);
    }
  Serial.println(airV);
}

A thousand thanks!!
Do I also have to call my Controller when deffining the function?

void CheckMode(myController){.....

Ok, Ive tried to apply what you said & errors keep appearing:/

I changed the code to:

void processGamepad(ControllerPtr gamepad) {

  CheckMode(myController);
  CheckThrottle(myController);
}

void CheckMode(){
  BP32.update();
  while (calibrated == false){
    display.clearDisplay();
...

& Errors appear:

C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void processGamepad(ControllerPtr)':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:93:13: error: 'myController' was not declared in this scope
   CheckMode(myController);
             ^~~~~~~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:93:13: note: suggested alternative: 'myControllers'
   CheckMode(myController);
             ^~~~~~~~~~~~
             myControllers
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void CheckMode()':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:102:9: error: 'gamepad' was not declared in this scope
     if (gamepad->miscButtons() == 8){
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:102:9: note: suggested alternative: 'Gamepad'
     if (gamepad->miscButtons() == 8){
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:110:9: error: 'gamepad' was not declared in this scope
     if (gamepad->miscButtons()-k == -2){
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:110:9: note: suggested alternative: 'Gamepad'
     if (gamepad->miscButtons()-k == -2){
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:114:9: error: 'gamepad' was not declared in this scope
     k = gamepad->miscButtons();
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:114:9: note: suggested alternative: 'Gamepad'
     k = gamepad->miscButtons();
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:151:7: error: 'gamepad' was not declared in this scope
   if (gamepad->miscButtons()-k == -2){
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:151:7: note: suggested alternative: 'Gamepad'
   if (gamepad->miscButtons()-k == -2){
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:157:7: error: 'gamepad' was not declared in this scope
   k = gamepad->miscButtons();
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:157:7: note: suggested alternative: 'Gamepad'
   k = gamepad->miscButtons();
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void CheckThrottle()':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:161:7: error: 'gamepad' was not declared in this scope
   if (gamepad->miscButtons()-j == -4){
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:161:7: note: suggested alternative: 'Gamepad'
   if (gamepad->miscButtons()-j == -4){
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:166:7: error: 'gamepad' was not declared in this scope
   j = gamepad->miscButtons();
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:166:7: note: suggested alternative: 'Gamepad'
   j = gamepad->miscButtons();
       ^~~~~~~
       Gamepad

exit status 1

Compilation error: 'myController' was not declared in this scope

A million thanks for your help!, Ive tried to apply what you said & errors keep appearing:/

I changed the code to:

void processGamepad(ControllerPtr gamepad) {

  CheckMode(myController);
  CheckThrottle(myController);
}

void CheckMode(){
  BP32.update();
  while (calibrated == false){
    display.clearDisplay();
...

& Errors appear:

C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void processGamepad(ControllerPtr)':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:93:13: error: 'myController' was not declared in this scope
   CheckMode(myController);
             ^~~~~~~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:93:13: note: suggested alternative: 'myControllers'
   CheckMode(myController);
             ^~~~~~~~~~~~
             myControllers
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void CheckMode()':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:102:9: error: 'gamepad' was not declared in this scope
     if (gamepad->miscButtons() == 8){
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:102:9: note: suggested alternative: 'Gamepad'
     if (gamepad->miscButtons() == 8){
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:110:9: error: 'gamepad' was not declared in this scope
     if (gamepad->miscButtons()-k == -2){
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:110:9: note: suggested alternative: 'Gamepad'
     if (gamepad->miscButtons()-k == -2){
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:114:9: error: 'gamepad' was not declared in this scope
     k = gamepad->miscButtons();
         ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:114:9: note: suggested alternative: 'Gamepad'
     k = gamepad->miscButtons();
         ^~~~~~~
         Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:151:7: error: 'gamepad' was not declared in this scope
   if (gamepad->miscButtons()-k == -2){
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:151:7: note: suggested alternative: 'Gamepad'
   if (gamepad->miscButtons()-k == -2){
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:157:7: error: 'gamepad' was not declared in this scope
   k = gamepad->miscButtons();
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:157:7: note: suggested alternative: 'Gamepad'
   k = gamepad->miscButtons();
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino: In function 'void CheckThrottle()':
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:161:7: error: 'gamepad' was not declared in this scope
   if (gamepad->miscButtons()-j == -4){
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:161:7: note: suggested alternative: 'Gamepad'
   if (gamepad->miscButtons()-j == -4){
       ^~~~~~~
       Gamepad
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:166:7: error: 'gamepad' was not declared in this scope
   j = gamepad->miscButtons();
       ^~~~~~~
C:\Users\santi\Documents\Arduino\ActualThing_1_0TX.ino\ActualThing_1_0TX.ino.ino:166:7: note: suggested alternative: 'Gamepad'
   j = gamepad->miscButtons();
       ^~~~~~~
       Gamepad

exit status 1

Compilation error: 'myController' was not declared in this scope

Ok, I´ll try that

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