Simulatore di un semaforo

In questo progetto simuliamo un semaforo per auto e quello per i pedoni. Il semaforo per i pedoni funziona solamente se viene premuto il pulsante, infatti alla fine del ciclo del semaforo delle auto, il semaforo dei pedoni si attiverà. Se il pulsante dei pedoni non viene mai premuto, il semaforo dei pedoni rimarrà sempre rosso e ciclerrà soltante quello delle auto.

Lista materiale:

Descrizione del codice:

Inizialmente dichiariamo tutte le variabili per i led e i bottoni. Successivamente indichiamo che i led definiscono un OUTPUT, mentre il bottone indica un INPUT. I due led rossi all'inizo sono accesi. Il metodo isPushh controlla se il pedone schiaccia il bottone. Nel loop con un while facciamo andare il semaforo delle auto. Sempre nel while con un if facciamo andare il semaforo dei pedoni se il pulsante viene premuto, una volta finito il ciclo del semaforo delle auto.

Schema:

Codice:

/**
* @author Mattia Lazzaroni & Peter Catania
* @version 20/11/2017
*/

/**
* Dichiararo le porte dei led Pedoni "P" e delle auto "A".
*/
int greenA = 44;
int greenP = 45;
int orangeA = 52;
int orangeP = 53;
int redA = 5;
int redP = 4;
/**
* Dichiararo la porta del Bottone.
*/
int button = 11;

int isPush = false;

/**
* Faccio il setup delle porte.
*/
void setup() {
  Serial.begin(9600);
  pinMode(greenA, OUTPUT);
  pinMode(greenP, OUTPUT);
  pinMode(orangeA, OUTPUT);
  pinMode(orangeP, OUTPUT);
  pinMode(redA, OUTPUT);
  pinMode(redP, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(redA, HIGH);
  digitalWrite(redP, HIGH);
}

/**
* Controlla se il pedone schiaccia il bottone.
*/
void isPushh() {
  int serialButton = digitalRead(button);
  
  if(serialButton == HIGH && isPush == false){
    isPush = true;
    Serial.println(isPush);
  }
}

/**
* Faccio andare i semafori nel loro ordine.
*/
void loop() {

  isPushh();

  /**
  * Faccio andare il semaforo delle auto.
  */
  while(isPush == false){
    for(int i = 0; i < 300; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(redA, LOW);
    digitalWrite(orangeA,HIGH);
    for(int i = 0; i < 300; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(orangeA, LOW);
    digitalWrite(greenA, HIGH);
    for(int i = 0; i < 700; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(greenA, LOW);
    digitalWrite(orangeA, HIGH);
    for(int i = 0; i < 300; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(orangeA, LOW);
    digitalWrite(redA, HIGH);
    for(int i = 0; i < 700; i = i + 10){
       isPushh();
       delay(i);
    }
  }

  /**
  * Faccio andare il semafore dei pedoni. 
  */
  if(isPush == true){
    isPush = false;
    digitalWrite(redP, LOW);
    digitalWrite(greenP, HIGH);
    for(int i = 0; i < 1000; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(greenP, LOW);
    digitalWrite(orangeP, HIGH);
    for(int i = 0; i < 700; i = i + 10){
       isPushh();
       delay(i);
    }
    digitalWrite(orangeP, LOW);
    digitalWrite(redP, HIGH);
  }
}