Valori per digitalWrite()

Ciao a tutti
Vorrei utilizzare una semplice logica AND sul digitalWrite per dare un consenso di accensione a tutti i LED interessati.

Se ON=1 significa che i LED si possono accendere,
mentre ON=0 significa che i LED non devono accendersi qualunque cosa accada

è possibile, ad esempio scrivere: digitalWrite(13, HIGHON)
oppure: digitalWrite(13, 1
ON)

oppure bisogna per forza usare metodi più prolissi, ad esempio:
if (ON==1)
{digitalWrite(13, 1)};

Grazie
Gianluca

byte ON = 1;
opp
bool ON = true;

digitalWrite(13, ON); sarà high


byte ON = 0;
opp
bool ON = false;

digitalWrite(13, ON); sarà low

digitalWrite(13, 1*ON) si, è possibile
ma ti bastava provarlo però

Ciao Pablos

Sto modificando uno sketch di 540 linee che è già funzionante e non ho la scheda Arduino Uno sotto mano per fare prove.

Grazie.
Gianluca

Datman:
è possibile, ad esempio scrivere: digitalWrite(13, HIGH*ON)

In questo modo no perché se ON vale 1 quando usi digitalWrite(13, LOW*ON) il led rimane acceso, o si accende. Devi eseguire una operazione booleana e non un normale prodotto, la sintassi è digitalWrite(13, STATO & ON), STATO è il variabile che determina se il led è acceso/spento, ovviamente puoi usare direttamente HIGH e LOW, e ON è la variabile che abilita/disabilita l'accensione dei led, puoi accendere il led solo se tutti e due i valori sono a 1.

Potrei usare la variabile LED al posto di HIGH: digitalWrite(13, LED)
se LED ha valore HIGH, il led si accende; se LED ha valore LOW, invece si spegne.
Posso mettere int LED = HIGH? Il compilatore non da errore...

Certo, creala come boolean

astrobeed:
In questo modo no perché se ON vale 1 quando usi digitalWrite(13, LOW*ON) il led rimane acceso, o si accende.

0*1 fa 0, quindi LOW * ON fa 0.

Con int LED=HIGH funziona tutto! È un prova cavi audio (sto alla v2.3s...). La modifica serve per spegnere tutti i LED dopo 10 secondi.

Grazie a tutti!
Gianluca

HIGH è una costante che vale 1.
Usare un tipo int per memorizzare un dato che non avrà mai un valore numerico molto grande. Usa un tipo byte oppure un tipo boolean, entrambi occupano solo 1 cella di RAM contro le 2 del tipo int.

leo72:
0*1 fa 0, quindi LOW * ON fa 0.

Hai ragione :slight_smile:

Si però scriverlo così
digitalWrite(13, STATO & ON)
è più tecnico assai :slight_smile: ,

poi bisogna vedere a livello macchina quale dei 2 usa meno cicli, ma penso il primo

bool STATO
bool ON

digitalWrite(13, STATO & ON)
digitalWrite(13, STATO * ON)

Boh, le moltiplicazioni sono supportate in hardware quindi è giusto un'istruzione come l'AND bit a bit.
Diciamo che il primo è il modo a logica più corretto per fare un test di quel genere.