Non mi funzionano gli if?

Sto cercando di controllare attraverso un L293D e un modulo wireless un motore che deve girare nei 2 versi, orario e antiorario.

Sono riuscito a far funzionare la parte dell’ L293D ma purtroppo non riesco ad implementare la funzionalità wireless a causa di un errore con gli if e la lettura dei valori analogici. Mi dice che la variabile non è dichiarata per quello scopo ma stando alla documentazione servono gli int. Perciò perché lo sketch non funziona?

Codice:

void setup() {

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(A1, INPUT);

  int stato = 0;
  int gira = 0;
  
}

void loop() {

  stato = analogRead(1);
  if(stato >= 300){
    delay(2000);
    stato = analogRead(1);
    if(stato >= 300){
      delay(2000);
      stato = analogRead(1);
      if(stato >= 300){
        gira = 1;
      };
      if(stato < 300){
        gira = 2;
      };
    };
  };
  
  if(gira == 1){
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  delay(30000);
  digitalWrite(10, LOW);}

  if(gira == 2){
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(2, LOW);
  delay(30000);
  digitalWrite(11, LOW);}
  
}

Errore:

arduino-builder/arduino-builder -compile -core-api-version 10611 -build-path /tmp/304794768 -hardware arduino-builder/hardware -hardware arduino-builder/packages/cores -tools arduino-builder/tools -tools arduino-builder/packages/tools -built-in-libraries arduino-builder/latest -libraries /tmp/038182069/pinned -libraries /tmp/038182069/custom -fqbn arduino:avr:uno -build-cache /tmp -verbose=false /tmp/038182069/Progetto_Porta_Papa
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino: In function 'void loop()':
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino:16:3: error: 'stato' was not declared in this scope
stato = analogRead(1);
^
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino:24:9: error: 'gira' was not declared in this scope
gira = 1;
^
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino:27:9: error: 'gira' was not declared in this scope
gira = 2;
^
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino:32:6: error: 'gira' was not declared in this scope
if(gira == 1){
^
/tmp/038182069/Progetto_Porta_Papa/Progetto_Porta_Papa.ino:40:6: error: 'gira' was not declared in this scope
if(gira == 2){
^
exit status 1

Grazie dell’ aiuto

non credo il problema riguardi gli if...
il compilatore dice che le 2 variabili non sono accessibili nel loop perché dichiarate nel setup...

Geeker:
… Mi dice che la variabile non è dichiarata per quello scopo ma stando alla documentazione servono gli int. Perciò perché lo sketch non funziona?

… perché sarà il caso che prendi un buon libro di ‘C’ e studi il concetto di ‘scopo’ di una variabile, ovvero la sua ‘visibilità’, nonché la differenza tra variabili ‘locali’ e variabili ‘globali’. :slight_smile:

Guglielmo

Ok, grazie capito.

Avevo infatti letto tempo addietro del concetto di locale e globale ma non lo avevo capito. Se posso... come si dichiara la variabile in maniera globale? Grazie comunque delle risposte.

guarda in questo link:

https://www.arduino.cc/en/Reference/Scope

fermo restando il saggio consiglio di guglielmo, ti do un aiutino preso direttamente dal link di orso...

"In the Arduino environment, any variable declared outside of a function (e.g. setup(), loop(), etc.), is a global variable."

Grazie infinite a tutti.

fratt:
"In the Arduino environment, any variable declared outside of a function (e.g. setup(), loop(), etc.), is a global variable."

... direi che ... più che "nell'ambiente Arduno", è priorio nel 'C' che ogni variabile dichiarata fuori da qualsiasi funzione è globale e visibile alle varie funzioni, all'interno è locale e visibile solo a quella funzione :smiling_imp:

Occhio che ... se dentro una funzione si dichiara una variabile con lo stesso nome di una "globale", quest'ultima viene NASCOSTA e si vede solo la "locale" e NON la "globale".

Funzioni "locali" esistono SOLO fino a quando si è nella funzione, dopo di che il loro valore viene perso !!!
Occorrendo, c'è modo di evitare la cosa, ma ... un passo alla volta :wink:

Guglielmo