Problema cicli for UP e DOWN

Ciao, domanda pobabilmente sciocca sciocca, ma non ne vengo a capo per il momento.

ho questo codice che cicla prima in su e poi in giu con due cicli for:

void loop() {

  for (byte i = 25; i < 256; i++) {
    analogWrite(LED_R, i);
    delay(4);
  }
  for (byte i = 255; i > 24; i--) {
    analogWrite(LED_R, i);
    delay(4);
  }

}

Ma non mi funziona, va solo in su e poi torna bruscamente a zero come se il secondo blocco non venisse eseguito.

Cosa strana, i due blocchi eseguiti separatamente funzionano bene.

Semplice, tu qui fai:

  • for (byte i = 25; i < 256; i++) {*

questo significa che dopo 255 quando esegue i++ poiché la variabile è di tipo byte non può gestire valori maggiori di 255, per cui 255+1 diventa zero e non esce mai da lì perché “i” sarà sempre minore di 256!

Quindi ti basta usare una variabile intera:

  • for (int i = 25; i < 256; i++) {*

… o lasciare il “byte” e fare “for (byte i = 25; i < 255; i++) {:slight_smile:

Guglielmo

Grazie, svista sul 255, scusate

gpb01:
… o lasciare il “byte” e fare “for (byte i = 25; i < 255; i++) {:slight_smile:

No, perché non eseguirebbe il valore massimo 255.

Eh si devo mettere <= 256

dukeluca86:
Eh si devo mettere <= 256

No, non “<=256” perché l’analogWrite() deve andare da 0 a 255, non puoi mettere 256.

Devi fare come ti ho indicato:

  • for (int i = 25; i < 256; i++) {*

docdoc:
No, perché non eseguirebbe il valore massimo 255.

... e capirai che grande perdita ... manco se ne accorge a livello di LED :smiley: :smiley: :smiley:

Guglielmo

Guglielmo... Qui è un LED, ma è bene trovare una soluzione sempre valida, utilizzabile anche quando sono elementi di cui neanche uno può essere trascurato. Poi si valuta se nella specifica applicazione l'assenza dell'ultimo valore è trascurabile. :slight_smile:

Datman ... le soluzione vanno sempre date per i problemi reali in esame ... grandi teorie sempre valide NON servono a nulla se non a sprecare memoria ... ogni caso è a se stante e, se si può ottimizzare perché qualche cosa è inifluente, lo si fa :slight_smile:

Guglielmo

Questo è il caso del led. Grazie a tutti.

gpb01:
... e capirai che grande perdita ... manco se ne accorge a livello di LED :smiley: :smiley: :smiley:

Hehehe, ok, vero, ma con lo stesso criterio posso anche dirti che per 1 byte in più sul totale del compilato se ne accorge ancora meno... :wink:

docdoc:
Hehehe, ok, vero, ma con lo stesso criterio posso anche dirti che per 1 byte in più sul totale del compilato se ne accorge ancora meno... :wink:

Vero ... ma "ottimizzare" è una questione di principio ;D ;D ;D

Guglielmo

gpb01:
Vero ... ma "ottimizzare" è una questione di principio ;D ;D ;D

Ok, Furio. ;D