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 } }