essendo circa alle prime armi con arduino, mi interessava sapere se e possibile comandare un array di led in base allo stato di un altro array, ossia, ponendo l condizione che in un array di "stato" ci siano 1 o 0, far accendere e poi spegnere i led associati ad un altro array in base al valore 0 o 1 dell altro array.
Quindi se nella posizione 1 dell array di "controllo" è presente 1 il relativo led del dell altro array in posione 1 ledArray [1] si accenda; questo e il ciclo che ho tentato di imbastire
int ledpins[] = {39,41,43};
for (p=0; p<lednum; p++){
pinMode(ledpins[p], OUTPUT);}
.
.
.
for (n=0; n<=blocks; n++)
{
for (r=0; r<= 8; r++)
{
if (arraycontrollo[n] > 0){
arraycontrollo[n] = ledpins[r];
digitalWrite(ledpins[r], HIGH);
}
else {digitalWrite(ledpins[r], LOW);}
}
Scusa @Brado, ma la sizeof() ti dice quanti byte occupa in totale ledpins. Quindi 3 celle * 2 byte ogni int = 6
"When sizeof is applied to the name of a static array (not allocated through malloc), the result is the size in bytes of the whole array"
Quindi devi ancora dividere per due
sizeof(ledpins)/2
oppure diviso dimensione della prima cella
sizeof(ledpins)/sizeof(ledpins[0])
chiaro, il mio problema e che i valori del mio array di controllo non sono fissi ma variano in base a quello che la camera mi rileva, quindi quando mi rileva l oggetto mette a uno una delle posizioni relative nel array di controllo, per esempio
Quindi ?
Basta che non inizializzi l'array ledvalue a valori a caso ma tutto a zero. Poi decidi tu da codice cosa metterci dentro.
int ledvalue[] ={0,0,0};
L'importante è che ledvalue e ledpins abbiano lo stesso numero di celle
L'indice che usi su ledpins così è lo stesso di ledvalue, hai una corrispondenza 1 a 1
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
nid69ita:
Scusa @Brado, ma la sizeof() ti dice quanti byte occupa in totale ledpins. Quindi 3 celle * 2 byte ogni int = 6
"When sizeof is applied to the name of a static array (not allocated through malloc), the result is the size in bytes of the whole array"
Quindi devi ancora dividere per due
sizeof(ledpins)/2
oppure diviso dimensione della prima cella
sizeof(ledpins)/sizeof(ledpins[0])
Hai ragione Nid, mi sono perso che erano byte! Mannaggia mannaggia!
prima definisco gli intervalli che mi interessano, poi assegno le variabili, vedo se ricadono negli intervalli voluti, e metto a 1 o 0 le posizioni dell array
Se array non contiene degli 1, allora o quello che leggi non è nell'intervallo ( i vari a1,a2, che sono ? )
oppure leggi sbagliato i vari vm2,vm3,etc.
Quindi nel codice aggiungi la stampa su seriale di a1,a2, etc. per verificare i valori.
Poi quei pezzi di codice potrai commentarli in versione definitiva.
le prime due righe sono i valori relativi ad a1 e a2 quindi quelli me li vede e me li stampa pure, ma poi come si vede non mi salva nell array i valori 1 e 0 o meglio me ne salva soltanto 1!
Ti salva il primo 1 nel primo elemento perchè relativi a a1 e a2. Ma gli altri ?
Perchè allora non c'e' stampa di a3,a4,etc. ?
Pezzi come questo sono corretti (usa CTRL+T nell'IDE, li incolonna meglio):