Preuzmi .fzz Preuzmi .ino
Preuzmi shemu spajanja u Fritzingu    Preuzmi programski kod za Arduino

 

 

POGLAVLJE 9 - Zadatak 45:

Na mikrokontroler spojite pet svjetlećih dioda, crvenu, žutu i zelenu za automobile te crvenu i zelenu za pješake. Osim dioda na mikrokontroler spojite jednu zujalicu i jednu sklopku. Napišite program koji će diode uključivati i isključivati na sljedeći način – na početku je uključeno crveno svjetlo i ono traje tri sekunde. Potom crveno i žuto svjetlo svijetle zajedno jednu sekundu. Nakon toga svijetli samo zeleno svjetlo tri sekunde. Naposljetku svijetli samo žuto svjetlo jednu sekundu. Po završetku ciklus kreće ispočetka. Zeleno svjetlo za pješake svijetli kada je na semaforu za automobile crveno svjetlo, a crveno svjetlo za pješake svijetli u svim ostalim situacijama. Dok svijetli crveno svjetlo za pješake na zujalici se generira zvuk od 1000 Hz koji traje 250 milisekundi, a nakon svakog tona postoji pauza od 250 milisekundi. Dok svijetli zeleno svjetlo za pješake na zujalici se generira zvuk od 1000 Hz koji traje 100 milisekundi, a nakon svakog tona postoji pauza od 100 milisekundi. Sklopka omogućava prebacivanje semafora u ručni rad. Kada je sklopka otvorena semafor normalno radi kako je prethodno opisano, a kada je sklopka zatvorena na semaforu za automobile blinka žuta dioda s intervalom od pola sekunde, a svjetla za pješake i zujalica su isključeni. Pri prebacivanju iz normalnog u ručni način rada semafor mora završiti ciklus i sigurno propustiti automobile i pješake na raskrižju prije početka blinkanja žute diode.

SHEMA:

EKSPERIMENTALNA PLOČICA:

RJEŠENJE:

int ledCrvena = 2;                	//definiraj ledCrvena = 2
int ledZuta = 3;                  	//definiraj ledZuta = 3
int ledZelena = 4;                	//definiraj ledZelena = 4
int ledCrvenaP = 5;              	//definiraj ledCrvenaP = 5
int ledZelenaP = 6;              	//definiraj ledZelenaP = 6
int sklopka = 8;                   	//definiraj sklopka = 8
int zuj = 9;                       	//definiraj zuj = 9
int brojac;                        	//definiraj varijablu brojac

void setup() {
  pinMode(ledCrvena, OUTPUT);     	//postavi izvod ledCrvena kao izlazni
  pinMode(ledZuta, OUTPUT);       	//postavi izvod ledZuta kao izlazni
  pinMode(ledZelena, OUTPUT);     	//postavi izvod ledZelena kao izlazni
  pinMode(ledCrvenaP, OUTPUT);   	//postavi izvod ledCrvenaP kao izlazni
  pinMode(ledZelenaP, OUTPUT);   	//postavi izvod ledZelenaP kao izlazni
  pinMode(sklopka, INPUT_PULLUP);  	//postavi izvod sklopka kao ulazni
  pinMode(zuj, OUTPUT);            	//postavi izvod zuj kao ulazni
  digitalWrite(ledCrvena, LOW);   	//isključi crvenu LED diodu - početno stanje
  digitalWrite(ledZuta, LOW);     	//isključi žutu LED diodu - početno stanje
  digitalWrite(ledZelena, LOW);   	//isključi zelenu LED diodu - početno stanje
  digitalWrite(ledCrvenaP, LOW); 	//isključi crvenu LED diodu zapješake - početno stanje
  digitalWrite(ledZelenaP, LOW); 	//isključi zelenu LED diodu za pješake - početno stanje
}

void loop() { 
  
  if (digitalRead(sklopka)==HIGH){
  digitalWrite(ledCrvena, HIGH);  	//uključi crvenu LED diodu
  digitalWrite(ledZelenaP, HIGH);	//uključi zelenu LED diodu za pješake
  for (brojac=0; brojac<6; brojac++){	//aktiviraj ton 250-250 ms
    tone(zuj, 1000);               	//generiraj ton 1000 Hz
    delay(250);                    	//čekaj 250 ms
    noTone(zuj);                   	//isključi ton
    delay(250);                    	//čekaj 250 ms
  }                                	//ukupno traje 3 sekunde
  digitalWrite(ledZelenaP, LOW); 	//isključi zelenu LED diodu za pješake
  digitalWrite(ledCrvenaP, HIGH);	//uključi crvenu LED diodu za pješake

  digitalWrite(ledZuta, HIGH);    	//uključi žutu LED diodu
  for (brojac=0; brojac<6; brojac++){	//aktiviraj ton 100-100 ms
    tone(zuj, 1000);               	//generiraj ton 1000 Hz
    delay(100);                    	//čekaj 250 ms
    noTone(zuj);                   	//isključi ton
    delay(100);                    	//čekaj 250 ms
  }                                	//ukupno traje 1 sekundu
  digitalWrite(ledCrvena, LOW);   	//isključi crvenu LED diodu
  digitalWrite(ledZuta, LOW);     	//isključi žutu LED diodu

  digitalWrite(ledZelena, HIGH);  	//uključi zelenu LED diodu
  for (brojac=0; brojac<18; brojac++){	//aktiviraj ton 100-100 ms
    tone(zuj, 1000);               	//generiraj ton 1000 Hz
    delay(100);                    	//čekaj 250 ms
    noTone(zuj);                   	//isključi ton
    delay(100);                    	//čekaj 250 ms
  }                                	//ukupno traje 1 sekundu
  digitalWrite(ledZelena, LOW);   	//isključi zelenu LED diodu

  digitalWrite(ledZuta, HIGH);    	//uključi žutu LED diodu
  for (brojac=0; brojac<6; brojac++){	//aktiviraj ton 100-100 ms
    tone(zuj, 1000);               	//generiraj ton 1000 Hz
    delay(100);                    	//čekaj 250 ms
    noTone(zuj);                   	//isključi ton
    delay(100);                    	//čekaj 250 ms
  }                                	//ukupno traje 1 sekundu
  digitalWrite(ledZuta, LOW);     	//isključi žutu LED diodu

  digitalWrite(ledCrvenaP, LOW); 	//isključi crvenu LED diodu za pješake
  } else {
    digitalWrite(ledZuta, HIGH);    	//uključi žutu LED diodu
    delay(500);                      	//čekaj 500 ms
    digitalWrite(ledZuta, LOW);     	//isključi žutu LED diodu
    delay(500);                      	//čekaj 500 ms
  }  
}

Autor: Paolo Zenzerović