Stai usando male il confronto. In C si usando due segni di uguale, non uno
if(stanza2[ia]=1)
è sbagliato. Questo è giusto:
if(stanza2[ia]==1)
nibbio99:
Domanda: la luce si accenderà se almeno uno dei valori di array sara uguale ad 1 o se tutti i valori dell'array devono essere uguali ad 1?
Dipende da come vuoi farlo tu, il check. Attualmente si accende quando trova un valore a 1 e si spenge nell'altro caso ma la luce resterà accesa solo se l'ultimo valore è pari a 1.
nibbio99:
Allego subilto la parte di sketch interessata:
Domanda: la luce si accenderà se almeno uno dei valori di array sara uguale ad 1 o se tutti i valori dell'array devono essere uguali ad 1?
La if agisce solo sull'elemento selezionato dal valore di "ia" quindi se è 1 si accende la luce, se è zero si spegne.
Attenzione che l'eguaglianza nella if si fa con "==" e non con "=".
Quindi se ho capito bene (e tralasciando l'errore del confronto) basta che un valore qualunque di array sia uguale a uno per accendere il led, mentre per spegnerlo devono essere tutti diversi da uno.
@ leo 72
potresti essere + chiaro non capisco il motivo di questa affermazione:
ma la luce resterà accesa solo se l'ultimo valore è pari a 1. smiley-wink
Per come l'hai scritto, and ogni giro del for testerà un elemento e accenderà e spegnerà il led a seconda di come troverà il valore nell'array (quindi il led si accedenderà e spegnerà mano mano che il for gira), dopo di che, in uscita dal for, manterrà l'ultimo valore incontrato ....
Spiega quello che tu vorresti e vediamo di correggere quel ciclo ...
Quello che vorrei è che sia sufficiente anche un solo valore dell'array uguale ad 1 per accendere il led, mentre per spegnerlo tutti i valori dell'array devono essere uguali a 0.
nibbio99:
Quello che vorrei è che sia sufficiente anche un solo valore dell'array uguale ad 1 per accendere il led, mentre per spegnerlo tutti i valori dell'array devono essere uguali a 0.
se ho capito bene....
...potresti spezzare il codice in 2 parti:
1. ciclo for per recuperare le informazioni dall'array e aggiornare 1-2 variabili (una per identificare la condizione "almeno un elemento==1"; l'altra per la condizione "tutti gli elementi == 0") 2. fuori dal ciclo esegui l'istruzione/le istruzioni conseguenti
Siccome non ti interessa quale elemento è eventualmente == 1, nell'ipotesi che gli elementi abbiano valori 1/0, le 2 condizioni potrebbero essere rappresentate da una sola variabile "somma" di tutti i valori degli elementi:
---> se la somma è zero allora "tutti gli elementi == 0" --> LOW
---> se la somma è > 0 allora "almeno un elemento == 1" --> HIGH
... oppure, altra soluzione, se non vuoi fare l'addizione ( ... che comunque è la strada più veloce perché si evita un if a ogni ciclo) :
metti una variabile che chiamiamo "accendi" a LOW
byte accendi = LOW;
fai il tuo ciclo di for nel quale, se, e solo se, l'elemento dell'array è uguale 1 metti la variabile "accendi" a HIGH (così basta che uno solo sia diverso da 0 e la variabile di appoggio diventa HIGH)
Forse si può fare anche con un ciclo while, con 2 controlli (contatore e variabile "accendi") in modo che si esca subito appena si incontra un elemento == 1
Così che il confronto lo fa while, senza if e for.
Il numero di cicli sarebbe uguale o inferiore ai cicli di un for.
andreino:
Forse si può fare anche con un ciclo while, con 2 controlli (contatore e variabile "accendi") in modo che si esca subito appena si incontra un elemento == 1
Per quello non serve un ciclo while ... basta usare la break appena si incontra un elemento == 1 ... ma così però non riempie più l'array e magari ... a lui i valori nell'array servono (... altrimenti .. che lo crea a fare ??? )
gpb01:
Per quello non serve un ciclo while ... basta usare la break appena si incontra un elemento == 1 ... ma così però non riempie più l'array e magari ... a lui i valori nell'array servono (... altrimenti .. che lo crea a fare ??? )
Guglielmo
Si è vero, avevo ignorato la necessità di riempire l'array, sicuramente per un uso successivo esterno al ciclo for
Ok grazie a tutti, ma penso che la soluzione della somma sia la più semplice e veloce.
Effettivamente solo l'ultimo valore dell'array era decisivo per l'accensione del led.
Io immaginavo tutti i valori concatenati tra loro con un or o un and, invece di una lista di if else collegati tutti allo stesso led, di cui solo l'ultimo lo comandava