primi passi, mi date una mano a pulire il codice

grazie in anticipo;

/un semplice programma, che legge i valori di due sensori, e se tali valori non rispettano i miei parametri accende determinati pin digitali di output. inoltre c'è un servomotore che ogni 17280 secondi gira di centoottanta gradi;
// i sensori  da me usato  phidgets temperatura umiditaa analogico,  che si trova in robot italy, mentre è un comune servo analogico da 4,8v;




void setup ()
{ 
  int temperaturaPin = 1; //sensore temperatura pin 1 analogico  int float temperatura = 0;
  int lampadinaPin = 5; // pin digitale uscita che si attiva in caso di una determinata temperatura;
  int umiditaPin = 2;  //sensore umidita pin 2 analogico;
  int pompaPin= 10;  // pin digitale uscita, che si attiva in caso di una determinata umidita;
  int pos = 0;       // variabile posizione servo, che parte da zero gradi
  int temperatura = 0; // variabile di comodo;
  int tempo= 0; // variabile di comodo, che si incrementa di un unita ogni volta che si muove il servo;
  pinMode(temperaturaPin, INPUT);
  pinMode (lampadinaPin, OUTPUT);
  pinMode (umiditaPin, INPUT);
  pinMode (pompaPin, OUTPUT);

  
}


void loop(){
  { temperatura= analogRead(temperaturaPin);   //leggiamo il sensore temperatura, e inseriamo il valore nella variabile temperatura ;
  temperatura = (temperatura*0.0,22222)-61.111; //trasformo attraverso la formula che trovo nel datasheet, i valori letti dalla sonda in volt in gradi centigradi;
  temperatura= floor(temperatura); //approssimo per difetto il valore che ottengo
  if temperatura <37 {      
       {digitalWrite(lampadinaPin, HIGH); // se la temperatura è minore di 37, accendo il pin digitale lampadinapin;
       }
     else {if temperatura >38      // se la temperatura è maggiore di 37, e maggiore di 38 spengo la il pin lampadina;
           {then digitalWrite(lampadinaPin, LOW);}}
  }
  delay(20000)};//aspetto 20 secondi prima di ripetere il ciclo temperatura;
 
  {umidita = analogRead(umiditapin);   //leggo l'umidita dal sensore umidita, e inserisco il valore in una variabile;
  umidita = (umidita*0,1906)-40,2;// attraverso una formula che trovo nel datasheet trasformo il valore in V della sonda in valori umidita;
  umidita = floor(umidita);// approssimo per difetto il valore umidita;
  if umidita< 52{
      {then digitalWrite(pompaPin, HIGH);}// se il valore dell'umidita è minore di 52 attivo il pin digitale pompapin;
      {else {if umidita>53//  se invece l'umidita è maggiore di 52, ma maggiore di 53, allora spengo il pin;
       else digitalWrite(pompaPin, LOW);}}
  delay(30000)};//aspetto 30 secondi e poi ripartiamo con il ciclo umidita;
  
{servomotore.attach(servopin3); //il servo motore analogico si trova nel pin tre analogico;
posizioneservo=analogRead(servomotore); //leggo la posizione del servo motore, e inserisco tale valore in una variabile;
tempo = tempo +1;   //contatore di questo ciclo, che esce nel caso se è di valore nove cinque
{if tempo = 95
   {else    // se il tempo non è 95 allora
   {   if posizioneservo =0 //se la posizioneservo è zero allora sposta il servo di centoottantagradi;
       {then
          servomotore.write(180)}
       {else   // in caso contrario sposta il servo a zero gradi;
       servomotore.write(0)}}}
          end}

delay(17280000);*} //asetta diciasettamiladuecendoottanda secondi e poi riparti con tale ciclo;

Ma Tu hai compilato il codice o solo scritto?

La dichiarazione delle variabili va fuori di qualisiasi funzione senó valgono solo in quella funzione.

int temperaturaPin = 1; //sensore temperatura pin 1 analogico  int float temperatura = 0;
  int lampadinaPin = 5; // pin digitale uscita che si attiva in caso di una determinata temperatura;
  int umiditaPin = 2;  //sensore umidita pin 2 analogico;
  int pompaPin= 10;  // pin digitale uscita, che si attiva in caso di una determinata umidita;
  int pos = 0;       // variabile posizione servo, che parte da zero gradi
  int temperatura = 0; // variabile di comodo;
  int tempo= 0; // variabile di comodo, che si incrementa di un unita ogni volta che si muove il servo;

Tutto questo va fuori dal setup()

Che numero é questo 0.0,22222? 0,022222 oppure 0,22222?

Controlla il numero di parentesi graffe aperte con il numero di parentesi chiuse; devono corrispondere.

if umidita< 52{

dove sono le parentesi rotonde del if?

"then" non esiste in C.

servomotore.attach(servopin3); //il servo motore analogico si trova nel pin tre analogico;

va nella funzione setup() ma manca sia l'include della libreria che l' inizializzazione.

Perché aspetti 4,8 ore? Il delay(17280000); Ti blocca il programma per quel tempo. la temperatura sicuramente é totalmente fuori range. L'arduino non é un sistema multitaking dove ogni funzione viene esegiuta in paralello alle altre. Una funziona fa aspettare le altre. Il Tuo codice una volta tolto tutti gli errori di sintassi accende il riscaldamento accende o no la pompa a secondo dell' umiditá e frigge per 4,8 ore e 50 secondi le uova che vuoi covare.

non ci siamo.
Quel codice dimostra che non hai la minima idea di c, e che non hai neanche provato di compilarlo.

Impara attraverso un tutorial o un libro la programmazione di arduino, poi riscrivi il Tuo programma e poi ci riparliamo.

Ciao Uwe

temperatura= floor(temperatura); //approssimo per difetto il valore che ottengo

è una funzione non dichiarata o mi sfugge qualcosa???

Sono Luisa comincio presto, finisco presto e di solito non pulisco il water.

Perché aspetti 4,8 ore? Il delay(17280000); Ti blocca il programma per quel tempo. la temperatura sicuramente é totalmente fuori range. L'arduino non é un sistema multitaking dove ogni funzione viene esegiuta in paralello alle altre. Una funziona fa aspettare le altre. Il Tuo codice una volta tolto tutti gli errori di sintassi accende il riscaldamento accende o no la pompa a secondo dell' umiditá e frigge per 4,8 ore e 50 secondi le uova che vuoi covare.

non ci siamo.
Quel codice dimostra che non hai la minima idea di c, e che non hai neanche provato di compilarlo.

Perchè, può essere che l'obbiettivo è proprio quello di friggere le uova. :stuck_out_tongue:

La parola ripulire il codice si usa quando hai un codice funzionante ma poco leggibile, quindi si riscrivono alcune cose poco chiare o si commentano. Il tuo codice non necessita di una azione di pultitura ma una serie di fasi di sviluppo e collaudo, dopo quando tutto funge allora puoi darti alle pulizie. :slight_smile:

Ciao.

grazie per i consigli, sicuramente prendero in mano qualche libro di programmazio per arduino.
non mi aspettavo che fosse perfertto, essendo il primo programma.

Non ho capito riguardo cosa mi dici a della libreria e e l'include per controllare il servo.

A riguardo i delay ho capito che sarebbe meglio metterne uno solo alla fine del loop, ipotizziamo circa di 20 secondi.

Dopo di che, per muovere il servo avevo pensato che potrei utilizzare la funzione mills accoppiata ad una variabile, oppure una inserirei un contatore che ogni volta che fa il loop si incrementa e il servo si muove se viene rispettata una condizione tipo (20secondi*contatore) è uguale ad x, se è vera oltre a muovere il servo resetta il contatore.

Usi delle funzioni per pilotare il servo che fanno parte di una libreria che non viene aggiunta automaticamente. Devi aggiungerla con il include.

e

nella descrizione della libreria trovi anche degli esempi.

Il delay é da evitare. È meglio gestire dei tempi di attesa controllando il tempo trascorso con milli()
vedi http://arduino.cc/en/Tutorial/BlinkWithoutDelay . Questo vale sia per la misura della temperatura che per l'umiditá che per il servo.

Azionerei la pompa per tempi minori di quello di controllo visto che l'umiditá si equalizza in qualche minuto. Piccolo spruzzo oppure spruzzo dipendente dall umiditá che rilevi e poi aspettare 10 minuti per vedere a quanto arrivi ecc.

Ciao Uwe

Grazie per i consigli, ho riscritto il programma. Il programma è ancora incentrato con la funzione dalay.
l'unico problema che ho che non sono capace :astonished: di correggere i vari errori sintattici, o meglio quando lo comopilo e verifico produce una serie di errori che non riesco a risolvere.

#include <Servo.h>//libreria per il controllo del servo;


//un semplice programma, che legge i valori di due sensori, e se tali valori non rispettano i miei parametri accende determinati pin digitali di output. inoltre c'è un servomotore che ogni 17280 secondi gira di centoottanta gradi;
// i sensori  da me usato  phidgets temperatura umiditaa analogico,  che si trova in robot italy, mentre è un comune servo analogico da 4,8v;

  int temperaturaPin = 1; //sensore temperatura pin 1 analogico  int float temperatura = 0;
  int lampadinaPin = 5; // pin digitale uscita che si attiva in caso di una determinata temperatura;
  int umiditaPin = 2;  //sensore umidita pin 2 analogico;
  int pompaPin= 10;  // pin digitale uscita, che si attiva in caso di una determinata umidita;
  int pos = 0;       // variabile posizione servo, che parte da zero gradi;
  int temperatura = 0; // variabile di comodo;
  int temposervo= 0; // variabile di che si incrementa di uno, che si incrementa di un unita ogni volta che si muove il servo;
  int tempoumidita = 0; //variabile che si incrementa di uno ogni 3 secondi;

void setup ()
{ 
  
  pinMode(temperaturaPin, INPUT);
  pinMode (lampadinaPin, OUTPUT);
  pinMode (umiditaPin, INPUT);
  pinMode (pompaPin, OUTPUT);
  servomotore.attach (3,0,180); //il servo motore analogico si trova nel pin tre analogico, minimo rotazione 0 massima 180 gradi

  
}


void loop(){
  
  { temperatura = analogRead(temperaturaPin);   //leggiamo il sensore temperatura, e inseriamo il valore nella variabile temperatura ;
    temperatura = (temperatura*.0,22222)-61.111; //trasformo attraverso la formula che trovo nel datasheet del sensore, i valori letti dalla sonda analogica in volt in gradi centigradi;
    temperatura = floor(temperatura); //approssimo per difetto il valore che ottengo, e inserisco il valore nella stessa variabile;
    if (temperatura <37)     
       digitalWrite(lampadinaPin, HIGH); // se la temperatura è minore di 37, accendo il pin digitale lampadinapin;
       else 
            if (temperatura >38)    
              digitalWrite(lampadinaPin, LOW);//e la temperatura è maggiore di 38 spengo  il pin lampadina;
  }
 
 
  {tempoumidita= tempoumidita +1;//variabile che incrementa di di uno unita  ogni tre secondi (cioe ogni volta che si ripete il ciclo); 
   umidita = analogRead(umiditapin);   //leggo l'umidita dal sensore umidita, e inserisco il valore in una variabile;
   umidita = (umidita*0,1906)-40,2;// attraverso una formula che trovo nel datasheet del sensore  trasformo il valore in V della sonda in valori umidita;
   umidita = floor(umidita);// approssimo per difetto il valore umidita e inserisco il valore nella stessa variabile;
   if (umidita< 52)
           if (tempoumidita== 200)
                 digitalWrite(pompaPin, HIGH);}// se l'umidita è minore di 52 e se il tempo trascorso è di 10 minuti cioe 200=(60sec*10min)\3..... la variabile tempoumidita si incrementa di uno ogni tre secondi, ACCENDO LA POMPA
           if (tempoumidita == 230)  // 
                          tempoumidita = 0//se sono passati dieciminuti e trenta secondi e ancora l umidita è bassa, resetto il tempo e spengo la pompa
                          digitalWrite(pompapin, LOW);
                        else
                          digitalWrite(pompapin, HIGH);//se non sono passati ancora quei 30 secondi dall accensione della pompa, la pompa rimane accesa;
                 else 
                    digitalWrite(pompapin, LOW); //spengo la pompa;
}
  

{ posizioneservo = servomotore.read()); //leggo la posizione del servo motore, e inserisco tale valore in una variabile;
  temposervo = temposervo +1;   //una variabile contatore che aumenta di un unita ogni 3 secondi, cioe ad ogni ciclo;
 if (temposervo == 6000)//se sono passate 5 ore, cioe 6000=(60sec*60min*5ore) diviso tre secondi
     if (posizioneservo = 180)
         servomotore.write(0);//se la posizione servo è 180 allora sposta il servo a zero gradi;
         temposervo = 0;
         else 
           servomotore.write(180);  // se la posizione servo è zero allora spostalo di 180 gradi;
           temposervo=0;
}
       


delay(3000);//aspetta tre secondi e rifai il ciclo

ps: sto ridisegnando e riscrivendo il programma partendo come consigliatomi da te facendolo girare attraverso la funzione mills
grazie

Sto provando a riscrivere il programma con le funzioni mills(), mi è venuto questo:

{  currentmills = mills()
   umidita = analogRead(umiditapin);   //leggo l'umidita dal sensore umidita, e inserisco il valore in una variabile;
   umidita = (umidita*0,1906)-40,2;// attraverso una formula che trovo nel datasheet del sensore  trasformo il valore in V della sonda in valori umidita;
   umidita = floor(umidita);// approssimo per difetto il valore umidita e inserisco il valore nella stessa variabile;
   if (umidita< 52)
           if ((currentMillis - tempoumidita)=>intervalloumidita)
                 digitalWrite(pompaPin, HIGH);}// se l'umidita è minore di 52 e se il tempo trascorso è di 10 minuti accendo la pompa;
                          tempoumidita = currentMills//assegno alla variabile il valore del tempo attuale;
                          if ((currentMillis - tempoumidita)=>20000)
                              digitalWrite(pompaPin, LOW); // se l umidta è ancora sotto i 52 e il pin e la pompapin e accesa, e dalla sua accensione sono passati venti secondi spegni;
                              else
                               digitalWrite(pompaPin, HIGH);//se l'umidita è ancora sotto i 52 e il pin è acceso, ma dalla sua accensione non sono passati ancora 20 secondi lasciala accesa;
 
                  else
                          digitalWrite(pompapin, LOW);//se l umidita è uguale o sopra i 52 allora tieni spenta la pompa;
                 
}
  

{ posizioneservo = servomotore.read()); //leggo la posizione del servo motore, e inserisco tale valore in una variabile;
 if ((currentMillis-temposervo)==intervallo servo)// se il tempo trascorso fino adesso meno il tempo della variabile temposervo (che è zero all inizio, ma che poi se la condizione è esatta sara ugauale al tempo attuale) è uguale all intervallo da noi prefissato cioe 18000 allora muovi il servo;
     if (posizioneservo = 180)
         servomotore.write(0);//se la posizione servo è 180 allora sposta il servo a zero gradi;
         temposervo = currentMillis;
         else 
           servomotore.write(180);  // se la posizione servo è zero allora spostalo di 180 gradi;
           temposervo=currentMillis;
}
}

Ciao,
potresti iniziare a leggerti questa guida: http://programmazione.html.it/guide/leggi/34/guida-c/
dal listato sembra che stia programmando in basic e non in C++: mancano i punti e virgola e le parentesi graffe un pò ovunque.

a parte parentesi graffe e punti e virgola che sto correggendo, il programma una volta compilato non puo essere eseguito da arduino?

non capisco la Tua domanda. In che senso non puó essere eseguito da Arduino?
Ciao Uwe

Io ho programmato in gioventù con quick basic e poi basic 7.1, e so cosa ti frulla per la testa.

Il richiede studio e rigore e fatto a posta per accedere all'intimo della macchina ed ci vuole un'attimo per combinare fesserie, che ti portano fuori strada. Per come la vedo io non si può imparare a programmare come lo si fa con il basic sul PC.

Poi il compilatore è permaloso non si lascia scappare nulla da sotto il naso, perfino le ambiguità vengono segnalate ed in alcuni casi impediscono il completamento della compilazione.

Ora io non dico questo per scoraggiarti, ma le cose stanno così, il compilatore C è un software molto complesso, arduino ti semplifica il lavoro a patto che tu abbia un minimo di conoscenza del linguaggio e rispetto per questo.

void loop(){
  
  { temperatura =

Qui tu apri un nuovo blocco di codice senza apparente motivo questo se è fatto con cognizione di causa permette di isolare del codice in un blocco {} dove le variabili interne non sono visibili all'esterno.

Sembra brutto dire, studia un poco di C, almeno le basi e poi ci risentiamo, purtroppo io direi di molto peggio, sempre con l'intento di aiutarti, si ma come?.

Disintossicati dal quick basic, il C è un linguaggio serio e complesso da domare. Dotati di un compilatore per pc o un IDE chesso visual studio se sei su windows è segui un libro dall'inizio per finire almeno alle funzioni, sperimanta il tutto sul pc e poi vai su arduino è riscrivi del semplice codice per far lampeggiare un led in vari modi, usa mills(), poi posta sul forum i tuoi quesiti.

Torna sul PC e fai esperimenti con le funzioni, i puntatori a, i riferimenti a, gli array, il passagio di varibili per valore o per riferimento ecc.

Prendi esempio da codice scritto da altri, perche la forma è fondamentale per scrivere buon codice, specie perchè così lo capiscono tutti.

Questo ad esempio non può funzionare:

if ((currentMillis-temposervo)==intervallo servo)    
     if (posizioneservo = 180)
         servomotore.write(0);
         temposervo = currentMillis;
         else 
           servomotore.write(180);  // se la posizione servo è zero allora spostalo di 180 gradi;
           temposervo=currentMillis;
}

E il tuo codice illegibili e non funzionante ed è un tormento leggerlo per capirci qualcosa.

if ((currentMillis-temposervo) == intervallo servo) // gli spazi migliorano la leggibilità ")==interv..."
if (posizioneservo = 180) { // apre il blocco primario della condizione qui non si capisce se vuoi verificare l'avvenuta assegnazioni di 180 a posizioneservo (che è illegibile) oppure vuoi fare un confronto come nel caso precedente e allora devi usare ==
servomotore.write(0);
temposervo = currentMillis;
} else { // chiudi il primo blocco e riapri quello dello "else"
servomotore.write(180); // se la posizione servo è zero allora spostalo di 180 gradi;
temposervo=currentMillis;
}

Ciao.

sto provando questo codice, per far muovere il servo, ma non riesco a capire perche si muove ogni 9 secondi non di 180 gradi ma poco meno.

//
#include <Servo.h>//libreria per il controllo del servo;
Servo myservo;
int pos = 0;       // variabile posizione servo, che parte da zero gradi;
unsigned long temposervo= 0; // variabile di che si incrementa di uno, che si incrementa di un unita ogni 
int posizioneservo = 0;
void setup (){
 myservo.attach (3,0,180); //il servo motore analogico si trova nel pin tre analogico, minimo rotazione 0 massima 180 gradi

  
}


void loop(){
myservo.write(pos);
posizioneservo = myservo.read(); //leggo la posizione del servo motore, e inserisco tale valore in una variabile;
temposervo = (temposervo +1);   //una variabile contatore che aumenta di un unita ogni 3 secondi, cioe ad ogni ciclo;
if (temposervo == 3)//aspetta 9 secondi;
     if (posizioneservo >160){
         pos = 0;
         myservo.write(pos);//se la posizione servo è 180 allora sposta il servo a zero gradi;
         temposervo = 0;}
         else {
         pos = 180;
         myservo.write(180);  // se la posizione servo è zero allora spostalo di 180 gradi;
         temposervo=0;}
delay(3000);}//aspetta tre secondi e rifai il ciclo

Stai migliorando
L' unico cosa che vedo sbagliato é un commento:
"//il servo motore analogico si trova nel pin tre analogico," é il pin 3 Digitale PWM.

Il primo "myservo.write(pos);" lo meterei nel setup non dopo il loop()

ma non riesco a capire perche si muove ogni 9 secondi non di 180 gradi ma poco meno.

non capisco cosa vuoi dire; Ti gira un angolo minore di 180 gradi? Di quanto di meno?

Ciao Uwe

gira per 120 gradi circa e poi dopo 9 secondi torna a zero.

Inoltre gia che ci siamo non riesco a trovare la soluzione a questo problema. Cioè:

-quando il servo è a zero gradi e deve rimanerci per parecchie ore non c'è problema (il servo si comporta come se fosse spento, penso che ci sia pochissima corrente quindi non si surriscalda per tenere tale angolazione)

  • mentre quando il servo è a 180, il servo è continuamente acceso, per mantenere il braccio in tale angolazione, di conseguenza la corrente è massima e quindi il servo si surriscalda fino ad andare in corto e bruciarsi penso(mettendo in pericolo lo stesso arduino ]:D).

Sto cercando qualche soluzione logica, che riesca via programmazione a bypassare tale problema(in fin dei conti il braccio del servo non deve tenere nessun peso, ma solo girare un asse(essendo il servo posizionato orizzontalmente con il braccio orizzontale anch esso, tipo roulett), ma niente.
Per adesso sono arrivato a pensare che la soluzione piu facile, sarebbe implementare il circuito a cui è collegato il servo attraverso un transitor.

ps: ho riscritto il programma come mi avevi consigliato incentrato sulla mia funzione mills. Ho corretto gli errori , domani lo testo XD
by

  • mentre quando il servo è a 180, il servo è continuamente acceso, per mantenere il braccio in tale angolazione, di conseguenza la corrente è massima e quindi il servo si surriscalda fino ad andare in corto e bruciarsi penso(mettendo in pericolo lo stesso arduino smiley-twist).

Molto strano. Che modello di servo hai?
Ciao Uwe

dino83:
mentre quando il servo è a 180, il servo è continuamente acceso, per mantenere il braccio in tale angolazione, di conseguenza la corrente è massima e quindi il servo si surriscalda fino ad andare in corto e bruciarsi penso(mettendo in pericolo lo stesso arduino ]:D).

Se non c'è nessun carico meccanico il servo non assorbe corrente, salvo quella normale di stand by che sono pochi mA, per mantenere la posizione.
Mi sa tanto che in realtà arrivi al limite meccanico della corsa e il servo va in stallo sforzando per arrivare alla posizione richiesta che però è irraggiungibile.
Tieni presente che non tutti i servo hanno gli stessi limiti meccanici di corsa e gli stessi valori come durata impulso in funzione della posizione, a seconda del produttore e del modello possono variare notevolmente rispetto ai valori comunemente definiti come standard.

Lo so che dovrei starmene zitto e buono, ma non posso fare a meno di notare che questo qui non fa nemmeno i compiti a casa. Mette del codice alla membro di segugio e dice "non capisco perché non va". Gli si dice il pin 3 è pwm non analogico e lui non corregge nemmeno i commenti. Gli si dice indenta il codice ma... qualcuno ha parlato ?
Ne ho già visti diversi di ceffi così. Di solito li ignoro perché vedere uno che non mostra alcuni impegno e nonostante questo pretende risposte mi irrita terribilmente. Sono però curioso di sapere se qui sul forum c'è qualcun altro con il mio stesso "problema"...

mromani, stai esagerando.
dino83 ha capito la lezione ed adesso ha un problema col Servo.
Se vuole risposte sensate da noi deve rispondere alle domande che gli sono stati posti.

Ciao Uwe Federer

Non mi pare proprio che abbia capito, comunque chiedo scusa se il mio intervento è stato sopra le righe. Non si ripeterà.

Per farmi perdonare :slight_smile: posto una versione indentata dell'ultimo codice postato...

#include <Servo.h>//libreria per il controllo del servo;

Servo myservo;
unsigned int temposervo= 0;
int posizioneservo = 0;

void setup() {
    //il servo motore analogico si trova nel pin tre, minima rotazione 0 massima 180 gradi
    myservo.attach (3, 0, 180);

    // parti dalla posizione zero
    myservo.write(0);
}


void loop() {
    posizioneservo = myservo.read();    // leggo la posizione del servo motore, e inserisco tale valore in una variabile;
    temposervo = temposervo +1;         // una variabile contatore che aumenta di un unita ogni 3 secondi, cioè ad ogni ciclo;
    if (temposervo == 3) {                      // aspetta 9 secondi;
        temposervo = 0;                           // riparte con il conteggio dei cicli
        if (posizioneservo > 160) {
            myservo.write(0);        //se la posizione servo è 180 allora sposta il servo a zero gradi;
        }
        else {
            myservo.write(180);  // se la posizione servo è zero allora spostalo di 180 gradi;
        }
    }
    delay(3000);    //aspetta tre secondi e rifai il ciclo
}

Alcune osservazioni:

  • non è obbligatorio passare alla funzione write() una variabile: si può utilizzare direttamente un numero;
  • non si capiva a cosa servisse definire due variabili (pos e posizioneservo) per contenere lo stesso dato: una delle due è stat eliminata
  • non serve usare un long per memorizzare un valore da 0 a 3.

Con questo spero di essere stato d'aiuto.