istruzione switch case

ahh sto impazzendo, mi da errore nell istruzione switch case che non capisco!!

questo e l errore

sketch_dec25a.ino: In function 'void loop()':
sketch_dec25a:16: error: switch quantity not an integer

e questo e il codice:

void setup()
{
  Serial.begin(9600);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
}

void loop()
{
  int temperatura = analogRead(A3);
  float volt = (temperatura/1024.0) * 5.0;
  float treale = (volt - .5) * 100;
  Serial.println(treale);
  delay(250);
  switch  (treale)
  {
    case 10.0 :
     digitalWrite (11, HIGH);
     break;  
    case 10.0 : 
     digitalWrite (12, HIGH);
     break;
    case  20.0:
     digitalWrite (13, HIGH);
     break;
  }

grazie dell aiuto

Data la nota imprecisione dei float ... la sintassi del C semplicemente ne proibisce l'uso nello switch :grin:

Guglielmo

Edit : Notoriamente, anche se il compilatore non ti da errore, non devi neanche aspettarti che funzioni un IF (float == float) visto che non sai come un determinato numero viene convertito, memorizzato e arrotondato ...
... es. tu assegni ad una variabile il valore 2.51000000, ma nessuno ti dice se in realtà, quel valore viene memorizzato come 2.50999998 o come 2.51000011 ... a secondo di come fa la conversione il compilatore :wink:

Che si legge: switch funziona solo con numeri interi, nientr'altro.

ahh okay, ma switch non funziona neanche se io mettessi dei case come per esempio "case >10.0&&<20.0??

non fucilatemi se sparo delle _______ :slight_smile:

Come già detto :

leo72:
Che si legge: switch funziona solo con numeri interi, nientr'altro.

Guglielmo

Solo interi.

Potresti convertire il float in intero.
Visto che è una temperatura con 1 solo decimale di precisione, moltiplichi il numero per 10 e fai il confronto con 100, 200 e 300.

E poi che senso hanno 2 case con stesso valore 10.0 ?