Go Down

Topic: If o non if , it is the problem... (Read 1 time) previous topic - next topic

salvato

All'interno di un progettino per pilotare delle resistenze elettriche per il riscaldamento mi si pone il seguente problema:
voglio che quando sulla seriale arriva un valore >5 il led (il pin digitale) sia alimentato, quando inferiore invece sia spento.
Però con questo codice funziona solo il primo if... dove sbaglio?
(la questione è talmente banale che non sto neppure a dire che sono pre-beginner...)
Più avanti le cose si complicheranno perché devo gestire 4 stati per diverse resistenze, ma credo che utilizzerò l'istruzione Switch.
Grazie per chi avrà la pazienza di aiutarmi

Ciao, Salvatore


#define led 13  // led connesso al pin n°13
int rx = 0;    // variabile per contenere il carattere ricevuto

void setup()
   {
   Serial.begin(9600); // imposto la UART per lavorare a 9600
   pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
   Serial.flush(); // svuoto il buffer di ricezione seriale
   }

void loop()
     {
           if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
         {
         rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
         Serial.flush(); // svuoto il buffer di ricezione seriale
              if (rx>5) // ho ricevuto un valore maggiore di 5
          {
                    digitalWrite(led,HIGH); // accendo il led
          }
               
        if (rx<4) // il valore è inferiore a 4
          {            
          digitalWrite(led,LOW); // spengo il led
          Serial.println("Led spento");
                    }
         }
          }

qsecofr

imho il secondo if funziona ma funziona solo per il 0,1,2,3... non per il 4 perchè il test è < e non <=

gingardu


All'interno di un progettino per pilotare delle resistenze elettriche per il riscaldamento mi si pone il seguente problema:
voglio che quando sulla seriale arriva un valore >5 il led (il pin digitale) sia alimentato, quando inferiore invece sia spento.
Però con questo codice funziona solo il primo if... dove sbaglio?
(la questione è talmente banale che non sto neppure a dire che sono pre-beginner...)
Più avanti le cose si complicheranno perché devo gestire 4 stati per diverse resistenze, ma credo che utilizzerò l'istruzione Switch.
Grazie per chi avrà la pazienza di aiutarmi

Ciao, Salvatore


#define led 13  // led connesso al pin n°13
int rx = 0;    // variabile per contenere il carattere ricevuto

void setup()
   {
   Serial.begin(9600); // imposto la UART per lavorare a 9600
   pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
   Serial.flush(); // svuoto il buffer di ricezione seriale
   }

void loop()
     {
           if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
         {
         rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
         Serial.flush(); // svuoto il buffer di ricezione seriale
              if (rx>5) // ho ricevuto un valore maggiore di 5
          {
                    digitalWrite(led,HIGH); // accendo il led
          }
               
        if (rx<4) // il valore è inferiore a 4
          {            
          digitalWrite(led,LOW); // spengo il led
          Serial.println("Led spento");
                    }
         }
          }


mah a parte che non si capisce come e  dove   vuoi aiuto  lo sketc è incomprensibile      Serial.flush();  non funziona più

s
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

salvato

Scusate, forse sono stato sintetico o poco chiaro.
Il codice di cui sopra non mi presenta errori formali al debug di verifica del compilatore Arduino.
Ma quando lo carico se digito un valore >5 sul monitor della seriale del programma Arduino il led si accende (corretto), ma se dopo digito un valore <5, per es. 2, il led non si spegne.
Perché?
La sintassi degli if sembra corretta...

Da cosa è stato sostituito Serial.flush ?

Spero di essere stato più chiaro  :~

salvato

Risolto, grazie.

Ora passo allo studio di Case...

Go Up