Buonasera gente. Come da titolo ho creato con thinkercad un progetto di un incrocio semaforico a 4 postazioni (lo so che è semplicissimo,ma mettete in conto che io sto cominciando ora a smanettare con arduino).
Il progetto è completo e funzionante,ma il codice è molto lungo....ho impostato i pin con #define,nel setup ho assegnato i 12 led (3 per semaforo),mentre nel loop ho immesso tutta la sequenza di accensione sincronizzata per tutti i led....
Ora,per esercitarmi e capire meglio le funzioni,vorrei rendere più snello il codice...
Allego le immagini del codice (ovviamente non funziona,perciò vorrei capire cosa sbaglio e come procedere). Grazie.
#define RossoS1 2 //Il rosso del semaforo1 è il pin 2
#define GialloS1 3 //Il giallo del semaforo1 è il pin 3
#define VerdeS1 4 //Il Verde del semaforo1 è il pin 4
#define RossoS2 7 //Il rosso del semaforo2 è il pin 7
#define GialloS2 6 //Il giallo del semaforo2 è il pin 6
#define VerdeS2 5 //Il verde del semaforo2 è il pin 5
#define RossoS3 8 //Il rosso del semaforo3 è il pin 8
#define GialloS3 9 //Il giallo del semaforo3 è il pin 9
#define VerdeS3 10 //Il verde del semaforo3 è il pin 10
#define RossoS4 11 //Il rosso del semaforo4 è il pin 11
#define GialloS4 12 //Il giallo del semaforo4 è il pin 12
#define VerdeS4 13 //Il verde del semaforo4 è il pin 13
int Semaforo1[6] = {VerdeS1, GialloS1, RossoS1, RossoS1, RossoS1, RossoS1}; //array per accendere i led nell'ordine stabilito
int Semaforo2[6] = {RossoS2, RossoS2, RossoS2, VerdeS2, GialloS2, RossoS2}; //array per accendere i led nell'ordine stabilito
int Semaforo3[6] = {VerdeS3, GialloS3, RossoS3, RossoS3, RossoS3, RossoS3}; //array per accendere i led nell'ordine stabilito
int Semaforo4[6] = {RossoS4, RossoS4, RossoS4, VerdeS4, GialloS4, RossoS4}; //array per accendere i led nell'ordine stabilito
int conteggio = 0 //variabile per accendere i semafori in sequenza
void setup(){
for (int i = 0; i < 6; i++) pinMode(Semaforo1[i], OUTPUT); //dichiaro che i pin dei led dell'array Semaforo1 sono OUTPUT
for (int i = 0; i < 6; i++) pinMode(Semaforo2[i], OUTPUT); //dichiaro che i pin dei led dell'array Semaforo2 sono OUTPUT
for (int i = 0; i < 6; i++) pinMode(Semaforo3[i], OUTPUT); //dichiaro che i pin dei led dell'array Semaforo3 sono OUTPUT
for (int i = 0; i < 6; i++) pinMode(Semaforo4[i], OUTPUT); //dichiaro che i pin dei led dell'array Semaforo4 sono OUTPUT
}
void loop(){
digitalWrite(Semaforo1[conteggio], HIGH); //accendo il led presente nella variabile conteggio dell'array Semaforo1
digitalWrite(Semaforo2[conteggio], HIGH); //accendo il led presente nella variabile conteggio dell'array Semaforo2
digitalWrite(Semaforo3[conteggio], HIGH); //accendo il led presente nella variabile conteggio dell'array Semaforo3
digitalWrite(Semaforo4[conteggio], HIGH); //accendo il led presente nella variabile conteggio dell'array Semaforo4
long tempo = 4000 + millis(); //la variabile tempo assume il valore della funzione millis() + 4000
while (tempo >= millis()) { //aspetto 4 secondi nel ciclo while
}
digitalWrite(Semaforo1[conteggio], LOW); //spengo il led presente nella variabile conteggio dell'array Semaforo1
digitalWrite(Semaforo2[conteggio], LOW); //spengo il led presente nella variabile conteggio dell'array Semaforo2
digitalWrite(Semaforo3[conteggio], LOW); //spengo il led presente nella variabile conteggio dell'array Semaforo3
digitalWrite(Semaforo4[conteggio], LOW); //spengo il led presente nella variabile conteggio dell'array Semaforo4
if (conteggio > 6) { //se il conteggio è 7 devo riazzerarlo
conteggio = 0 //azzero il conteggio
}else{
conteggio++; //altrimenti se il conteggio è minore di 6 incremento il conteggio di 1
}
}