Trafikljus [nybörjare Arduino projekt] (6 / 7 steg)
Steg 6: Se programmet
Trafikljus Lights {grön, gul, röd, PEDGREEN, PEDRED} Knappar {ljus [0], ljus [1]} Timers
Av Ben Hovinga http://ben.hovinga.me/
int ljus [2] [5] = {{2,3,4,6,7}, {8,9,10,12,13}};
int btn [] = {5,11}.
int tgreen = 30000; 30s
int tyellow = 3000; 3S
int tred = 3000; 3S
int tpedwarn = 5000; 5s (måste vara mindre än tgreen)
int tpedwarnint = 500. 0.5s (måste vara mindre än tpedwarn)
Andra Vals. Ändra inte
int btnval = 0;
booleska pedwait [] = {false, false};
booleska pedactive [] = {false, false};
int direkt = 0;
int stp = 1;
booleska stpset = false;
osignerade långa nu = 0;
osignerade långa changeat = -1;
osignerade långa changeatped = -1;
booleska pedredon = sant;
SETUP
void setup() {
Tilldela alla stift
för (int x = 0, x < 2, x ++) {
för (int y = 0; y < 5; y ++) {
pinMode (ljus [x] [y], OUTPUT);
}
Starta allt stannade (röd)
digitalWrite (ljus [x] [2], hög);
digitalWrite (ljus [x] [4], hög);
}
Tilldela knappar
för (int x = 0, x < 2, x ++) {
pinMode (btn [x], ingång);
}
}
KÖRA
void loop() {
Uppdateringstid
nu = millis();
Kontrollera om knappen nedtryckt
för (int x = 0, x < 2, x ++) {
btnval = digitalRead(btn[x]);
om (btnval == hög) {
pedwait [x] = true; Vi har någon som väntar att korsa
}
}
Komma in i det
Växla (stp) {
Grön
fall 1:
Setup
om (stpset == false) {
changeat = nu + tgreen - tpedwarn; Ställ in timer
Slå på Ped
om (pedwait [direkt] == true) {
Lamporna ändrar för ped
digitalWrite (ljus [direkt] [3], hög);
digitalWrite (ljus [direkt] [4], låg);
Ange några vars
pedwait [direkt] = false;
pedactive [direkt] = true;
pedredon = false;
}
Slå på Green
digitalWrite (ljus [direkt] [0], hög);
Stänga av röda
digitalWrite (ljus [direkt] [2], låg);
stpset = sant; Vi är inställda
}
Köra
annat {
om (nu > changeat) {/ / gånger upp
om (pedactive [direkt] == true) {
Stänga av Ped
digitalWrite (ljus [direkt] [3], låg);
digitalWrite (ljus [direkt] [4], hög);
pedredon = sant;
}
Nästa steg
STP ++;
stpset = false;
}
}
bryta;
Varna ped (om möjligt)
fall 2:
Setup
om (stpset == false) {
changeat = nu + tpedwarn;
changeatped = nu + tpedwarnint;
stpset = sant;
}
Köra
annat {
Flash Ped röd
om (pedactive [direkt] == true) {
om (pedredon == true & & changeatped < nu) {
digitalWrite (ljus [direkt] [4], låg);
pedredon = false;
changeatped = nu + tpedwarnint;
}
om (pedredon == false & & changeatped < nu) {
digitalWrite (ljus [direkt] [4], hög);
pedredon = sant;
changeatped = nu + tpedwarnint;
}
}
om (nu > changeat) {/ / gånger upp
Stäng av
digitalWrite (ljus [direkt] [0], låg);
digitalWrite (ljus [direkt] [4], hög);
pedredon = sant;
pedactive [direkt] = false;
Nästa steg
STP ++;
stpset = false;
}
}
bryta;
Gul
fall 3:
Setup
om (stpset == false) {
changeat = nu + tyellow;
digitalWrite (ljus [direkt] [1], hög);
stpset = sant;
}
Köra
annat {
om (nu > changeat) {/ / gånger upp
Stäng av
digitalWrite (ljus [direkt] [1], låg);
Nästa steg
STP ++;
stpset = false;
}
}
bryta;
Röd
fall 4:
Setup
om (stpset == false) {
changeat = nu + tred;
digitalWrite (ljus [direkt] [2], hög);
stpset = sant;
}
Köra
annat {
om (nu > changeat) {/ / gånger upp
Börja om
STP = 1;
stpset = false;
Ändra riktning
om (direkt == 1) {
Direct = 0;
}
annat {
Direct = 1;
}
}
}
bryta;
}
}