Go Down

Topic: Problema nel codice [If, else] (Read 400 times) previous topic - next topic

EnigmaAren92

Ragazzi è da circa due giorni che sto cercando di capire quale diavoleria è mai questa, non riesco a capire dove sbaglio e come mai il programma cambi una variabile senza che io glie lo dica.
Premetto col dire che ho comprato il simulatore originale di arduino dal sito, Non ho ancora comprato l'arduino perchè ancora non è arrivato in negozio, quindi per ora sto progettando il codice scritto sul simulatore, E' davvero ben fatto e però caz c'e questa bega che non riesco a risolvere, potete aiutarmi? Posto la parte di codice interessata.
Code: [Select]

void loop()
{

 if(Scarico = 1){
   GrillettoPremuto = digitalRead(Grilletto);
     if(GrillettoPremuto == HIGH){
             if(Ammo>0){
               Ammo = Ammo - 1;
               digitalWrite(LaserELED_Laser, HIGH);
               lcd.setCursor(7, 1);
               lcd.print("AMMO: ");
               lcd.setCursor(12,1);
               lcd.print(Ammo);
                 if(Ammo<10){
                   lcd.setCursor(13,1);
                   lcd.print(" ");
                 }
             }
             else
             {
               digitalWrite(Riserva, HIGH);
               Scarico = 0;    
             }
     }
     else
     {
       digitalWrite(LaserELED_Laser, LOW);
     }
 }
 else
 {
   RicaricoPremuto = digitalRead(Ricarico);
    if(RicaricoPremuto == HIGH){
     Scarico = 1;
     digitalWrite(Riserva, LOW);
    }
     else
     {
     Scarico = 0;
    }
 }
}


Ecco dove sta il problema? Voi non preoccupatevi di tutte le altre istruzioni, in pratica la parte di codice che non mi va è questa:
Code: [Select]

 else
 {
   RicaricoPremuto = digitalRead(Ricarico);
    if(RicaricoPremuto == HIGH){
     Scarico = 1;
     digitalWrite(Riserva, LOW);
    }
     else
     {
     Scarico = 0;
    }
 }


Da come avete notato,  dovrebbe saltare in questa parte di codice solo quando Scarico non è 1 (In pratica 0) se notate, qualche riga più in alto ho scritto l'istruzione: "Scarico = 0;" lui la legge, e memorizza lo 0 ma il problema sta nel fatto che si che tiene lo 0, ma quando lo testo step by step e torno alla prima riga del void loop "if(Scarico = 1){" lui riporta quella variabile "Scarico" a 1! Non capisco il perchè!! Sto uscendo pazzo perfavore aiutatemi a capire dove è che sbaglio...

leo72

Code: [Select]
if(Scarico = 1)
Questa è un'assegnazione, non un confronto.  ;)
I confronti si fanno con 2 segni "=="
Code: [Select]
if(Scarico == 1)

EnigmaAren92

Basta, un bacio sulla bocca non te lo leva nessuno! Ahaha scherzo, oh ma non sai quante ne ho tirate. Oh grazie davvero! Dio santo. E dire che li ho anche usati in altre occasioni come vedi, ma non pensavo andassero anche nel controllo di una variabile. Vabbè niente dai ti faccio una bella statua. Ciaociao grazie! <3

leo72


Basta, un bacio sulla bocca non te lo leva nessuno! Ahaha scherzo, oh ma non sai quante ne ho tirate. Oh grazie davvero! Dio santo. E dire che li ho anche usati in altre occasioni come vedi, ma non pensavo andassero anche nel controllo di una variabile. Vabbè niente dai ti faccio una bella statua. Ciaociao grazie! <3

Quella del "=" diverso da "==" è un errore in cui sono cascato anch'io all'inizio. Abituato al Basic dove è il compilatore che distingue a seconda del contesto in cui trova il segno di "uguale" se deve fare un'assegnazione oppure un confronto, la distinzione fatta dal C mi fregava diverse volte  :D

EnigmaAren92

Madò veramente! Anche io infatti che provengo dal basic son cascato in sto tranello maledetto che mi ha quasi fatto inventare parolaccie nuove xD Vabbè menomale dai ;) Grazie ancora bye ;)

Go Up