Errore 'x' was not declared in this scope su sketch

Buongiorno a tutti…
Dopo diversi mesi di tentativi su un progetto che pensavo di riuscire a risolvere da solo leggendo tra siti e forum, mi arrendo chiedendo aiuto a chi è più esperto di me (praticamente TUTTI!!!)

Il mio progetto riguarda la trasformazione di una parabola fissa di tipo SELFSAT (quelle piatte, senza il boom dell’illuminatore, per intenderci) in una motorizzata a comando manuale ed indicazione di alzo e direzione su un display.
Leggendo qui sul forum ho provato un progetto a cui mi sono ispirato per la componentistica, la quale è:
ELEGOO Uno R3
Giroscopio GY-521 MPU 6050
Bussola digitale HW-127 con chip QMC5883L
Display LCD I2C 2004A

Le connessioni le ho realizzate regolarmente, tutte tramite SDA e SCL, i sensori singolarmente con sketch individuali funzionano regolarmente senza alcun problema.
“Unendo” in uno sketch unico però mi esce l’errore del topic, cioè

‘x’ was not declared in this scope

su questa stringa

qmc.read(&x, &y, &z);

Questo errore non mi compare se la stessa stringa è nello sketch che mi gestisce solo la bussola

Allego lo sketch per comprendere meglio il discorso,

Prova_parabola.ino (10.2 KB)

non riesco a capire come cambiare il parametro, penso che sia dovuto al fatto che sia giroscopio che bussola hanno dati relativi ad X, Y, e Z, ma non so come modificarlo.

Come scritto nel mio messaggio di presentazione, sono un neofita di Arduino, ho cercato di documentarmi su Internet, ho acquistato dei libri, ma non sono riuscito a capire il problema…
Graie a tutti, saluti Fabio.

Detto che non posso provarlo perché non ho le librerie che usi installate ma tanto poco cambia.
Il tuo problema è che nell’altroprogramma hai le tre varibili dichiarate e in questo no, tipo:

int x;

Il tipo l’ho messo a caso, potrebbe essere giusto come no (long, float,ecc.) guarda nell’altro codice e riporta nel nuovo codice le definizioni delle variabili che ti servono

Tu hai dichiarato le variabili così
int x1, y1, z1, a1;

Ma poi le usi così

 qmc.read(&x, &y, &z);
  
  rad = atan2(y,x);
  a = rad * (180.0 / PI);
  if (a < 0) {
    a = 360 + a;  
  }
  if (a > 360) {
    a = a - 360;

Le hai rinominate in fase di dichiarazione senza fare lo stesso poi nello sketch
Quindi per il compilatore x,y,z e a non sono dichiarate.

Ho provato a rinominare x, y, e z nello sketch come ho fatto in fase di dichiarazione, ma continua a darmi lo stesso errore… Ho tentato di variare in diversi modi (x1, &x…) sia nella dichiarazione che nello sketch ma l’errore continua a presentarsi.

Le variabili, oltre che con il nome diverso, le hai dichiarate nella funzione di setup e poi cerchi di usarle in loop()

1 Like

Questo è lo sketch da cui ho preso la parte che mi interessava,

#include <Wire.h>
#include <MechaQMC5883.h>

MechaQMC5883 qmc;

void setup() {
Wire.begin();
Serial.begin(9600);
qmc.init();
qmc.setMode(Mode_Continuous,ODR_200Hz,RNG_2G,OSR_256);

}

int x, y, z, a;
float rad;

void loop() {
qmc.read(&x, &y, &z);

rad = atan2(y,x);
a = rad * (180.0 / PI);
if (a < 0) {
a = 360 + a;
}
if (a > 360) {
a = a - 360;
}

Preso singolarmente funziona e non mi dà errore, poi inserito nel mio sketch non funziona più…

Il motivo è stato spiegato e il perché anche rinomimandole non ti funziona ancora l’ha spiegato chiaramente @cotestatnt nel post #5 adesso dovresti metterci un po’ di studio dei suggerimenti forniti e cercare di capire l’errore e correggerlo perché oltre a quanto detto non c’è nulla da aggiungere se non scriverti il codice che, però, è non consentito dal regolamento del forum, IMHO ovviamente

tu hai messo questo

int x1, y1, z1, a1;
float rad;

dentro il setup mentre va tirato fuori. Nell’originale l’hanno messo fra il setup e il loop. Non è bello, e infatti ti ha fatto sbagliare, ma funziona. Tira fuori quelle 2 righe e mettile prima del setup.

Quando unisci 2 sketch devi stare attento a quanto sta fuori dal setup, a quello che sta dentro il setup e a quello che sta dentro al loop.

Ti manca parecchio, dovresti leggere almeno qualcosa sulle basi altrimenti di questi errori ne farai parecchi.

Ecco dove avevo sbagliato… Perdonatemi, ho riguardato i due skecth ed ho notato che ho sbagliato a posizionare la parentesi graffa… Ora mi dice che il codice è ok… Devo ancora correggere alcuni particolari e dovrei aver risolto… rivedere bene gli indirizzi I2C, e impostare bene il parametro per fargli visualizzare la scritta in riferimento all’angolo di puntamento… Ringrazio tutti per l’aiuto, al momento che saprò che tutto funziona, cercherò di pubblicarlo su GitHub. Grazie ancora a tutti… Saluti Fabio.

@fabioxl74 : in conformità REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l’icona </> nella barra degli strumenti per contrassegnarla come codice. Così com’è non è molto leggibile … assicurati inoltre anche di aver correttamente indentato il codice nell’IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmdT su un Mac all’intero del IDE). Grazie.

Guglielmo