Go Down

Topic: digitalWrite di > 1 elementi (Read 367 times) previous topic - next topic

adm91

Mar 29, 2019, 05:34 pm Last Edit: Mar 29, 2019, 07:46 pm by adm91
Buonasera,

ringrazio tutti quelli che mi aiuteranno a risolvere il seguente dubbio:
ho 6 led che accendo con l'istruzione digitalWrite passandogli come parametro la variabile di tipo intero (il led che voglio accendere) e un bit 0 o 1 (acceso o spento).
La domanda è:
se io volessi accendere TUTTI i led con un'unica istruzione (devo accenderli più volte nel mio void loop)
invece che fare una funzione esterna al void loop dove eseguo il digitalWrite di ogni singolo led,
è possibile passare >1 argomenti al digitalWrite in modo da snellire il codice?

avevo pensato una cosa del genere con un array ma ovviamente non funziona:
Code: [Select]

#define ledRosso 10
#define ledBlu 11

int vettoreLed[]{ledRosso, ledBlu};

void setup() {
  pinMode(ledRosso, OUTPUT);
  pinMode(ledBlu, OUTPUT);
 
  }

void loop() {
  digitalWrite(vettoreLed, HIGH);

}

posso creare una variabile di typo byte eseguire lo shift dei bit? <<?

scusate se ho un pochino di confusione ma vorrei scrivere il codice in modo corretto.


Grazie a tutti

gpb01

>adm91:   ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code]
 così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

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

gpb01

#2
Mar 29, 2019, 06:09 pm Last Edit: Mar 29, 2019, 06:09 pm by gpb01
In attesa che tu sistemi il codice ti dico già che NON si può fare con la digitalWrite(), ma si può fare manipolando direttamente le "porte" di I/O della MCU.

Puoi studiare come fare QUI.

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

adm91

In attesa che tu sistemi il codice ti dico già che NON si può fare con la digitalWrite(), ma si può fare manipolando direttamente le "porte" di I/O della MCU.

Puoi studiare come fare QUI.

Guglielmo
Grazie per la dritta Gugliemo e ho modificato il codice!

maubarzi

puoi anche fare un ciclo for
se ho capito bene vuoi evitare di scrivere 20 volte la stessa istruzione con un indice differente non eseguire l'operazione nel tempo macchina più breve possibile, giusto?

Una cosa del tipo:
Code: [Select]

// 2 è la dimensione massima del vettore.
for (byte i = 0; i < 2; i++) {
  pinMode(vettoreLed[i], OUTPUT);
}
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Go Up