//https://github.com/stevemarple/AsyncDelay/blob/master/examples/AsyncDelay_example/AsyncDelay_example.ino
#include <AsyncDelay.h>
//izdelaj program za semafor. Ukaz "start" zažene semafor, ukaz "stop" naj izvede utripanje rumene ukaz "reset" pa ugasne vse luči in čaka
//MORAM ŠE DODELATI
int rdecaPin = 13;
int rumenaPin = 12;
int zelenaPin = 11;
AsyncDelay dly;
void setup() {
pinMode(rdecaPin, OUTPUT);
pinMode(rumenaPin, OUTPUT);
pinMode(zelenaPin, OUTPUT);
Serial.begin(9600);
Serial.setTimeout(250);
//odpremo serijski monitor v wokwi
Serial.println("uporabljaš lahko samo komande start, stop ali reset");
dly.start(3000, AsyncDelay::MILLIS);
}
String cmd = "";
int korak = 0;
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0)
{
cmd = Serial.readString();
//izloči znak za novo vrstico \n -oz. ga zamenja z ničemer
cmd.replace("\n", "");
Serial.println(cmd);
//koračenje
//intersekcija ukazov
if (cmd == "start")
{
korak = 10;
cmd = "";
}
else if (cmd == "stop")
{
korak = 100;
cmd = "";
}
else if (cmd == "reset")
{
korak = 0;
}
else {
Serial.println("neznana komanda");
}
}
//izvedba ukazov
switch (korak)
{
//prvi korak čakamo ukaz start, nato skočimo na naslednji korak
case 0:
{
digitalWrite(rdecaPin, LOW);
digitalWrite(rumenaPin, LOW);
digitalWrite(zelenaPin, LOW);
dly.start(3000, AsyncDelay::MILLIS);
break;
}
//RDEČA
case 10: //korak 10
{
//krmiljenje pinov
digitalWrite(rdecaPin, HIGH);
digitalWrite(rumenaPin, LOW);
digitalWrite(zelenaPin, LOW);
if (dly.isExpired()) //če se čas izteče
{
korak = 20; //postavimo korak na 20
dly.start(1000,1); //korak 20 bo prešel čez 1s
Serial.println("korak: "+String(korak));
}
break; //obvezen člen "case" strukture
}
//RDEČA + RUMENA
case 20:
{
digitalWrite(rdecaPin, HIGH);
digitalWrite(rumenaPin, HIGH);
digitalWrite(zelenaPin, LOW);
if (dly.isExpired())
{
korak = 30;
dly.start(3000, AsyncDelay::MILLIS); //korak 30 bo prešel čez 3s
Serial.println("korak: "+String(korak));
}
break;
}
//ZELENA
case 30:
{
digitalWrite(rdecaPin, LOW);
digitalWrite(rumenaPin, LOW);
digitalWrite(zelenaPin, HIGH);
if (dly.isExpired())
{
korak = 40;
dly.start(1000, AsyncDelay::MILLIS);
Serial.println("korak: "+String(korak));
}
break;
}
//RUMENA
case 40:
{
digitalWrite(rdecaPin, LOW);
digitalWrite(rumenaPin, HIGH);
digitalWrite(zelenaPin, LOW);
if (dly.isExpired())
{
korak = 20;
dly.start(3000, AsyncDelay::MILLIS);
Serial.println("korak: "+String(korak));
}
break;
}
//utripanje
case 100:
{
dly.start(1000, AsyncDelay::MILLIS);
korak = 101;
break;
}
case 101:
{
digitalWrite(rdecaPin, LOW);
digitalWrite(rumenaPin, HIGH);
digitalWrite(zelenaPin, LOW);
if (dly.isExpired())
{
korak = 102;
dly.start(1000, AsyncDelay::MILLIS);
Serial.println("korak: "+String(korak));
}
break;
}
case 102:
{
digitalWrite(rdecaPin, LOW);
digitalWrite(rumenaPin, LOW);
digitalWrite(zelenaPin, LOW);
if (dly.isExpired())
{
korak = 101;
dly.start(1000, AsyncDelay::MILLIS);
Serial.println("korak: "+String(korak));
}
break;
}
}
//zakasnitev, med koraki
delay(200);
}