Go Down

Topic: switch case e interferenza serial print (Read 818 times) previous topic - next topic

aspi

seraaaa
è possibile che lo switch case in automatico scriva il numero di case nel monitor seriale?
allego uno stralcio
Code: [Select]


void loop() {

  if (cont_pagina== 0) {  Serial.println("display di default");  scrivi_su_led(); }

  switch (cont_pagina)
  {
   case 1:     
  //  Serial.print("indirizzo attuale");
  //  Serial.println(indirizzo);                 
  //scrivi_su_led();
  // enter_state=digitalRead(enter);
  //  if (enter_state != enter_laststate )  {  if (enter_state==HIGH)  _indirizzo(); Serial.print("indirizzo nuovo"); leggi_indirizzo();   }   break;

  case 2:   
    lc.clearDisplay(0);
    Serial.println(cont_pagina);
    lc.setDigit(0,1, cont_pagina ,false); 
    break;

  case 3:   
    lc.clearDisplay(0);
    Serial.println(cont_pagina);
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  case 4:   
    Serial.println(cont_pagina);
    lc.clearDisplay(0);     
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  case 5:   
    Serial.println(cont_pagina);
    lc.clearDisplay(0);     
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  default:


mettendo come commento "case 1:" sul serial monitor non appare piu il numero di case
voi che dite?

uwefed

switch non scriverá niente in automatico.
Perché non stampi la variabile cont_pagina prima del switch?
Ciao Uwe

gpb01

Occhio perché così come lo hai commentato, sia per case 1: che per case 2: esegue comunque il codice del case 2: ... manca difatti una break per interrompere il case 1:

Guglielmo
Search is Your friend ... or I am Your enemy !

aspi

no nel primo case alla fine c'è il break...
perchè questo codice speravo di cusarlo come menu ma non credo possa andar bene

leo72

Nell'attuale codice che hai postato non c'è il break  :P
Code: [Select]

case 1:     
  //  Serial.print("indirizzo attuale");
  //  Serial.println(indirizzo);                 
  //scrivi_su_led();
  // enter_state=digitalRead(enter);
  //  if (enter_state != enter_laststate )  {  if (enter_state==HIGH)  _indirizzo(); Serial.print("indirizzo nuovo"); leggi_indirizzo();   }   break;

Il break è in fondo ad una linea commentata, quindi è ignorato.
Ah, altra cosa: non prendere il vizio di scrivere più istruzioni su una stessa riga. Il codice diventa illeggibile.
Ogni istruzione va su una riga.

gpb01

#5
May 06, 2013, 02:47 pm Last Edit: May 06, 2013, 02:58 pm by gpb01 Reason: 1

no nel primo case alla fine c'è il break...
...


Ohi ...

Code: [Select]

  case 1:    
 //  Serial.print("indirizzo attuale");
 //  Serial.println(indirizzo);                
 //  scrivi_su_led();
 //  enter_state=digitalRead(enter);
 //  if (enter_state != enter_laststate )  {  if (enter_state==HIGH)  _indirizzo(); Serial.print("indirizzo nuovo"); leggi_indirizzo();   }   break;


... questo è il codice che hai postato, ed al mio paese TUTTO quello che segue i //, sulla stessa riga, è considerato commento quindi ... il break NON c'è e case 1: e case 2: eseguono lo stesso codice ;)

Allora posta il VERO codice che ti da il problema e poi cerchiamo di capire cosa c'è ....

Guglielmo

@Leo : Ahahahahah ... ci siamo sovrapposti con la risposta ;)
Search is Your friend ... or I am Your enemy !

aspi

osti c avete ragione pure voi  :smiley-roll:
riallego il codice vero... avevo messo tutto su una riga per occupare meno spazio sul forum

Code: [Select]


void loop() {

  //cont_pagina=encoderValue;
  if (cont_pagina== 0) {  Serial.println("display di default");  scrivi_su_led(); }

/*
  up_state= digitalRead(up);
  if (up_state != up_laststate )
  { 
    if (up_state==HIGH)
    {
      (cont_pagina++) ;
    }
  }

  down_state=digitalRead(down);
  if (down_state != down_laststate)
  {
    if (down_state==HIGH )
    {
      (cont_pagina--) ;
    }
  }

*/

  switch (cont_pagina)
  {
case 1:     
  //  Serial.print("indirizzo attuale");
  //  Serial.println(indirizzo);                //    se premi exit esci su schermata default   
  //scrivi_su_led();
 
  // enter_state=digitalRead(enter);
  // if (enter_state != enter_laststate )  {
  //           if (enter_state==HIGH)
  //            _indirizzo();
  //           Serial.print("indirizzo nuovo");
  //           leggi_indirizzo();   
    }   break;

  case 2:   
    lc.clearDisplay(0);
    Serial.println(cont_pagina);
    lc.setDigit(0,1, cont_pagina ,false); 
    break;

  case 3:   
    lc.clearDisplay(0);
    Serial.println(cont_pagina);
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  case 4:   
    Serial.println(cont_pagina);
    lc.clearDisplay(0);     
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  case 5:   
    Serial.println(cont_pagina);
    lc.clearDisplay(0);     
    lc.setDigit(0,1,cont_pagina,false); 
    break;

  default:

    up_laststate = up_state;
    down_laststate= down_state;
    up_state=0;
    up_laststate=0;
 
  }     
 
}


gpb01

MENTI SAPENDO DI MENTIRE !!!   XD  XD  XD  XD

Neanche quello che hai allegato è il codice "vero", perché NON ci credo che compila senza errori ...

Code: [Select]

case 1:     
  //  Serial.print("indirizzo attuale");
  //  Serial.println(indirizzo);                //    se premi exit esci su schermata default   
  //  scrivi_su_led();
 
  //  enter_state=digitalRead(enter);
  //  if (enter_state != enter_laststate )  {
  //           if (enter_state==HIGH)
  //            _indirizzo();
  //           Serial.print("indirizzo nuovo");
  //           leggi_indirizzo();   
    }   break;


... con quella graffa prima del break;   :smiley-mr-green: :smiley-mr-green: :smiley-mr-green:

Guglielmo
Search is Your friend ... or I am Your enemy !

leo72

Sì ma hai sbagliato ancora perché la graffa prima del break fa parte del blocco del precedente if  ;)

Comunque, a parte questo, fai come ti ha detto Uwe, o metti un print prima dello switch oppure metti un print in ogni case.

edit:
Guglielmo stasera ci sovrapponiamo  ;)


gpb01


invece compila :P


NO guarda ... hai di nuovo modificato qualche cosa perché, prima di scrivere il messaggio, mi sono tolto lo sfizio di provare a compilare e da errore esattamente su quella graffa (... come è logico che sia), quindi ...

Guglielmo
Search is Your friend ... or I am Your enemy !

aspi

vero scusa mi era scappata però ho provato a mettere il break come commento e andava lo stesso.
ho riprovato con questo codice che ho postato e sul monitor seriale mi scrive ancora il numero del contatore del primo case...

gpb01

Aspi ...
perdona, ma ... o pubblichi IL VERO CODICE che possiamo esaminare e cercare di capire o è inutile che continuiamo a discutere !

Ora fai un bel copia e incolla (racchiudendolo tra i tag "code") del codice che stai provando e poi vediamo ... :)

Guglielmo

Search is Your friend ... or I am Your enemy !

Go Up