Programma semaforo intelligente

Salve. Ho bisogno del vostro aiuto per correggere un codice che ho trovato in questo forum, che allego qui di seguito.

#define ledGreen1 11
#define ledYellow1 12
#define ledRed1 13
#define ledGreen2 8
#define ledYellow2 9
#define ledRed2 10

int count=0;

void setup(){
  pinMode(ledGreen1, OUTPUT);
  pinMode(ledYellow1, OUTPUT);
  pinMode(ledRed1, OUTPUT); 
  pinMode(ledGreen2, OUTPUT);
  pinMode(ledYellow2, OUTPUT);
  pinMode(ledRed2, OUTPUT); 
}

void loop(){
  if(count<=6)
  {
    digitalWrite(ledGreen1, HIGH);  
    digitalWrite(ledYellow1, LOW);  
    digitalWrite(ledRed1, LOW);   
    digitalWrite(ledGreen2, LOW);   
    digitalWrite(ledYellow2, LOW);  
    digitalWrite(ledRed2, HIGH);  
    delay(14000);
    digitalWrite(ledGreen1, LOW);  
    digitalWrite(ledYellow1, HIGH);  
    digitalWrite(ledRed1, LOW);   
    digitalWrite(ledGreen2, LOW);   
    digitalWrite(ledYellow2, LOW);  
    digitalWrite(ledRed2, HIGH);
    delay(2000);
    digitalWrite(ledGreen1, LOW);  
    digitalWrite(ledYellow1, LOW);  
    digitalWrite(ledRed1, HIGH);   
    digitalWrite(ledGreen2, HIGH);   
    digitalWrite(ledYellow2, LOW);  
    digitalWrite(ledRed2, LOW);
    delay(14000);
    digitalWrite(ledGreen1, LOW);  
    digitalWrite(ledYellow1, LOW);  
    digitalWrite(ledRed1, HIGH);   
    digitalWrite(ledGreen2, LOW);   
    digitalWrite(ledYellow2, HIGH);  
    digitalWrite(ledRed2, LOW);
    delay(2000);
    count++;
  }
if((count>6)&&(count<30))
  {
    digitalWrite(ledGreen1, LOW);  
    digitalWrite(ledYellow1, HIGH);  
    digitalWrite(ledRed1, LOW);   
    digitalWrite(ledGreen2, LOW);   
    digitalWrite(ledYellow2, HIGH);  
    digitalWrite(ledRed2, LOW);   // set the LED on  
    delay(500);              // wait for a second
    digitalWrite(ledGreen1, LOW);  
    digitalWrite(ledYellow1, LOW);  
    digitalWrite(ledRed1, LOW);   
    digitalWrite(ledGreen2, LOW);   
    digitalWrite(ledYellow2, LOW);  
    digitalWrite(ledRed2, LOW);   // set the LED on 
    delay(500); 
    count++; 
  }
}

Siccome quando a finito il secondo ciclo c'è il count++ che fa andare avanti il conteggio, come faccio a dirgli di iniziare di nuovo il conteggio da 0. Io pensavoa una cosa del genere

digitalWrite(ledYellow2, LOW);  
    digitalWrite(ledRed2, LOW);   // set the LED on 
    delay(500); 
    count++; 
  }
if((count<=30)&&(count-30))
}

Grazie per il vostro aiuto.

Tommaso02:
Siccome quando a finito il secondo ciclo c'è il count++ che fa andare avanti il conteggio, come faccio a dirgli di iniziare di nuovo il conteggio da 0. Io pensavoa una cosa del genere

Ciao
non ci sono due cicli. L'unico ciclo presente nello sketch è il loop, che viene ripetuto all'infinito.
All'interno di questo loop ci sono due controlli if che vengono sempre effettuati in serie, sarà l'incremento di count che fa verificare una o l'altra condizione (in questo caso, modificando i controlli potrebbe anche farli entrambi...).

inizia
se count è inferiore o uguale a 6
fai delle cose
incrementa count
se count è superiore a 6 e inferiore uguale a 30
fai altre cose
incrementa count
torna all'inizio

La cosa che manca (credo, perchè non so cosa vuoi fare con lo sketch) è di dirgli che una volta raggiunto il valore di 30 bisogna ricominciare da zero.

appunto, come devo fare per dirgli di azzerare il count?
ciao, tommaso

poi ti rispondo ]:smiley:
prima però cerca di metter giù almeno lo chema logico (il diagramma di flusso) di cosa vorresti fare, partendo da quello che ho scritto prima. Poi se hai problemi per scrivere il codice, ti diamo una mano.
Farsi risolvere il problema dagli altri non ti aiuta a imparare :wink:

Io controllerei se il valore di count è maggiore di 30, allora lo reimposto al valore iniziale. :wink:

Dato che il progetto di un semaforo ce l'ho a cuore in quanto lo portai alla maturità, posso consigliarti di inserire una fase in cui entrambi i semafori sono rossi, per lo stesso tempo del giallo.
Così facendo eviti gli incidenti. 8)

Se vuoi sviluppare maggiormente il progetto, e renderlo un semaforo intelligente, come passo successivo ti consiglio di inserire un interruttore per il controllo del giallo lampeggiante, e non farlo fare in sequenza come è ora.
Se questo interruttore non è premuto, il semaforo funziona normalmente. All'atto della pressione, il semaforo finisce il ciclo e poi inizia a lampeggiare il giallo.
Quando l'interruttore viene riportato nella posizione iniziale, i semafori diventano tutti rossi, e poi si riparte con il ciclo di lavoro.

Un ulteriore sviluppo potrebbe essere la presenza delle chiamate pedonali, che dovrai gestire a modo, ma quelle le vedremo più avanti.

Un impianto semaforico sembra semplice, ma in realtà c'è ben da lavorare la parte SW, sempre che si voglia fare un lavoro fatto bene. 8)