Go Down

Topic: è possibile una variabile per più pin? (Read 336 times) previous topic - next topic

csalvo1570

Jan 17, 2019, 01:34 pm Last Edit: Jan 17, 2019, 01:37 pm by csalvo1570
Volevo sapere se è possibile comandare 2,3 o più pin contemporaneamente con una sola istruzione invece di ripeterla nel loop più volte come nell'esempio allegato:

Code: [Select]

int rosso = 13;
int verde = 12;
int giallo = 11;

void setup() {
pinMode (rosso, OUTPUT);
pinMode (verde, OUTPUT);  
pinMode (giallo, OUTPUT);    
}

void loop()
{
  digitalWrite (rosso, HIGH);
  digitalWrite (verde, HIGH);
  digitalWrite (giallo, HIGH);
  delay(1000);
  digitalWrite (rosso, LOW);
  digitalWrite (verde, LOW);
  digitalWrite (giallo, LOW);
  delay(1000);
 }

uwefed

1) fai una funzione che setta i 3 LED e chiama quella.
2) cerca port malipulation  https://www.arduino.cc/en/Reference/PortManipulation

Ciao Uwe

docdoc

Aggiungo:

3) ma qual è il problema? L'esecuzione è talmente veloce che non è in alcun modo visibile la sequenza di accensione dei 3 led...
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

csalvo1570

#3
Jan 21, 2019, 06:01 am Last Edit: Jan 21, 2019, 06:04 am by csalvo1570
era per cercare di snellire il codice...Port Registers già lo conoscevo, ma non credo che funzioni su arduino mega  sui pin 22-53.

Claudio_FF

#4
Jan 21, 2019, 07:02 am Last Edit: Jan 21, 2019, 07:25 am by Claudio_FF
era per cercare di snellire il codice...
Quindi non è una questione di velocità/contemporaneità...
Per cui, snellire in che senso?
Renderlo più chiaro o usare meno righe?
Spesso queste sono due cose opposte.

A me ad esempio sembra più "snello" usando delle funzioni:
Code: [Select]
void loop()
{
  accendi();
  delay(1000);
  spegni();
  delay(1000);
}
* * * *    if non è un ciclo   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *

csalvo1570

#5
Jan 21, 2019, 11:23 pm Last Edit: Jan 21, 2019, 11:24 pm by csalvo1570
Si intendevo usare meno righe. Puoi farmi un esempio con le funzioni più dettagliato usando il mio codice con i tre led per favore...

Quindi non è una questione di velocità/contemporaneità...
Per cui, snellire in che senso?
Renderlo più chiaro o usare meno righe?
Spesso queste sono due cose opposte.

A me ad esempio sembra più "snello" usando delle funzioni:
Code: [Select]
void loop()
{
  accendi();
  delay(1000);
  spegni();
  delay(1000);
}



Claudio_FF

#6
Jan 22, 2019, 08:48 am Last Edit: Jan 22, 2019, 08:52 am by Claudio_FF
Si intendevo usare meno righe. Puoi farmi un esempio con le funzioni più dettagliato usando il mio codice con i tre led per favore...
Difficile usare meno righe in un codice così semplice. Le funzioni rendono il loop più corto e chiaro, ma vanno aggiunte prima aumentando il numero di righe complessive.
Code: [Select]
void accendi() {
    digitalWrite (rosso, HIGH);
    digitalWrite (verde, HIGH);
    digitalWrite (giallo, HIGH);
}

void spegni() {
    digitalWrite (rosso, LOW);
    digitalWrite (verde, LOW);
    digitalWrite (giallo, LOW);
}

Il loro uso inizia a diventare interessante se quelle operazioni sono da compiere in diversi punti, allora si che si ottiene un consistente risparmio di righe.
* * * *    if non è un ciclo   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *

Go Up