Závora se semaforem

Tato úloha slouží k procvičení doposud nabytých znalostí. Procvičí ovládání LED, detekci stisku tlačítka, výpis po sériové lince a řízení servo motoru. Tzn. užití proměnných, funkcí, podmínky, cyklů, PWM, knihovny atp.

Cílem je sestavit a naprogramovat závoru se semaforem. V běžném životě je analogií vjezd na placené parkoviště.

Po zapnutí svítí červené světlo (červ. LED) a závora (servo) je spuštěna. Po stisku tlačítka se závora začne zvedat a do sér. linky se vypíše „Závora se otevírá.“. Když je závora plně otevřena, rozsvítí se zelené světlo (zel. LED) a čeká se 5 vteřin, aby se mohlo vjet na myšlené parkoviště. Po uplynututí 5 sec limitu se semafor přepne na červenou a závora se začně spouštět. S tím se do sér. linky vypíše „Závora se zavírá.“.

Zapojení závory se semaforem

Kód

#include <Servo.h> // připojení knihovny
#define nahore 170 // stupňů
#define dole 90 // stupňů
#define cervena 4 // pin 4
#define zelena 7 // pin 7
int pos;
Servo zavora; // inicializace závory

void setup()
{
Serial.begin(9600);
zavora.attach(9);
pinMode(12, INPUT_PULLUP);
pinMode(cervena,OUTPUT);
pinMode(zelena,OUTPUT);
// start se závorou dole a červenou
zavora.write(dole);
digitalWrite(cervena,HIGH);
digitalWrite(zelena,LOW);
Serial.println("Program byl spusten.");
}

void loop() // fce čeká na stisk tlačítka
{ // stisk tlačítka (autorizace vjezdu)
if (digitalRead(12)==LOW){
// hlášení jako ve výtahu
Serial.println("Zavora se otevira.");
// otevírá závoru
for(pos=dole;pos<=nahore;pos+=1){
zavora.write(pos);
delay(15);
}
// zelená na semaforu
digitalWrite(cervena,LOW);
digitalWrite(zelena,HIGH);
delay(5000); // 5 sekund na průjezd
// červená na semaforu
digitalWrite(cervena,HIGH);
digitalWrite(zelena,LOW);
// zavírá závoru
Serial.println("Zavora se zavira.");
for(pos=nahore;pos>=dole;pos-=1){
zavora.write(pos);
delay(15);
}
} /* pokud není stisknuto,
nic se neděje */
}