Upravljivi semafor

Zadatak

Napravite upravljivi model semafora. Na Arduino spojite crvenu, žutu i zelenu diodu te jedno tipkalo. Kada tipkalo nije pritisnuto neka semafor radi u normalnom načinu rada, a kada je tipkalo pritisnuto neka semafor bude u načinu ručnog upravljanja prometom. Kada je semafor u normalnom načinu rada neka bude uključeno crveno svjetlo na tri sekunde. Potom neka svijetle crveno i žuto zajedno jednu sekundu. Nakon toga neka svijetli zeleno tri sekunde. Naposljetku, neka svijetli samo žuto na jednu sekundu i neka se ciklus ponavlja ispočetka. Kada je semafor u načinu ručnog upravljanja prometom neka na njemu blinka žuto svijetlo – pola sekunde neka bude uključeno pa pola sekunde isključeno.

Prikaz spajanja

Arduino kod
int LedCrvena = 6;
int LedZuta = 7;
int LedZelena = 8;
int Tipkalo = 10;

int StanjeTipkala;

void setup() {
  pinMode(LedCrvena, OUTPUT);      //postavi izvod LedCrvena (6) kao izlazni
  pinMode(LedZuta, OUTPUT);        //postavi izvod LedZuta (7) kao izlazni
  pinMode(LedZelena, OUTPUT);      //postavi izvod LedZelena (8) kao izlazni
  pinMode(Tipkalo, INPUT_PULLUP);  //postavi izvod Tipkalo (10) kao ulazni
}

void loop() {
  //očitaj stanje izvoda i pohrani u varijablu StanjeTipkala
  StanjeTipkala = digitalRead(Tipkalo);
  if (StanjeTipkala == LOW) {         //ako je tipkalo pritisnuto
    digitalWrite(LedCrvena, LOW);     //isključi prvu diodu
    digitalWrite(LedZuta, HIGH);      //uključi drugu diodu
    digitalWrite(LedZelena, LOW);     //isključi treću diodu
    delay(500);                       //čekaj pola sekunde
    digitalWrite(LedCrvena, LOW);     //isključi prvu diodu
    digitalWrite(LedZuta, LOW);       //isključi drugu diodu
    digitalWrite(LedZelena, LOW);     //isključi treću diodu
    delay(500);                       //čekaj pola sekunde
  }
  if (StanjeTipkala == HIGH) {
    //svijetli crveno 3 sekunde
    digitalWrite(LedCrvena, HIGH);    //uključi crveno svjetlo
    digitalWrite(LedZuta, LOW);       //isključi žuto svjetlo
    digitalWrite(LedZelena, LOW);     //isključi zeleno svjetlo
    delay(3000);                      //čekaj 3 sekunde
    //svijetle crveno i žuto 1 sekundu
    digitalWrite(LedCrvena, HIGH);    //uključi crveno svjetlo
    digitalWrite(LedZuta, HIGH);      //uključi žuto svjetlo
    digitalWrite(LedZelena, LOW);     //isključi zeleno svjetlo
    delay(1000);                      //čekaj 1 sekundu
    //svijetli zeleno 3 sekunde
    digitalWrite(LedCrvena, LOW);     //isključi crveno svjetlo
    digitalWrite(LedZuta, LOW);       //isključi žuto svjetlo
    digitalWrite(LedZelena, HIGH);    //uključi zeleno svjetlo
    delay(3000);                      //čekaj 3 sekunde
    //svijetli žuto 1 sekundu
    digitalWrite(LedCrvena, LOW);     //isključi crveno svjetlo
    digitalWrite(LedZuta, LOW);       //uključi žuto svjetlo
    digitalWrite(LedZelena, HIGH);    //isključi zeleno svjetlo
    delay(1000);                      //čekaj 1 sekundu
  }
}