Étape 6: Faire le programme
Feux de circulation Lumières {vert, jaune, rouge, PEDGREEN, PEDRED} Boutons {lumière [0], [1]} Minuteries
Par Ben Hovinga http://ben.hovinga.me/
int lumière [2], [5] = {{2,3,4,6,7}, {8,9,10,12,13}} ;
int btn [] = {5,11} ;
int tgreen = 30000 ; 30 s
int tyellow = 3000 ; 3 s
tred int = 3000 ; 3 s
int tpedwarn = 5000 ; 5 s (doit être inférieur à tgreen)
int tpedwarnint = 500 ; 0. 5 s (doit être inférieur à tpedwarn)
Autres Vals. Ne changez pas
int btnval = 0 ;
pedwait Boolean [] = {false, false} ;
pedactive Boolean [] = {false, false} ;
direct int = 0 ;
int stp = 1 ;
stpset booléen = false ;
unsigned long maintenant = 0 ;
unsigned long changeat = -1 ;
unsigned long changeatped = -1 ;
Boolean pedredon = true ;
PROGRAMME D’INSTALLATION
void setup() {}
Affecter toutes les broches
pour (int x = 0; x < 2; x ++) {}
pour (int y = 0; y < 5; y ++) {}
pinMode (lumière [x] [y], sortie) ;
}
Démarrez tout arrêté (rouge)
digitalWrite (lumière [x] [2], haut) ;
digitalWrite (lumière [x] [4], HIGH) ;
}
Assigner des boutons
pour (int x = 0; x < 2; x ++) {}
pinMode (btn [x], d’entrée) ;
}
}
COURIR
void loop() {}
Mise à jour de temps
maintenant = millis() ;
Vérifiez si la touche enfoncée
pour (int x = 0; x < 2; x ++) {}
btnval = digitalRead(btn[x]) ;
Si (btnval == HIGH) {}
pedwait [x] = true ; Nous avons quelqu'un qui attend de franchir
}
}
Y entrer
commutateur (stp) {}
Vert
cas 1 :
Programme d’installation
Si (stpset == false) {}
changeat = maintenant + tgreen - tpedwarn ; Réglez le minuteur
Allumez les Ped
Si (pedwait [directement] == true) {}
Lumières changent pour ped
digitalWrite (lumière [directement] [3], HIGH) ;
digitalWrite (lumière [directement] [4], faible) ;
La valeur de certains vars
pedwait [directement] = false ;
pedactive [directement] = true ;
pedredon = false ;
}
S’allume vert
digitalWrite (lumière [directement] [0], HIGH) ;
Mettez hors tension rouge
digitalWrite (lumière [directement] [2], faible) ;
stpset = true ; Nous sommes le programme d’installation
}
Courir
else {}
Si (maintenant > changeat) {/ / fois vers le haut
Si (pedactive [directement] == true) {}
Désactiver la Ped
digitalWrite (lumière [directement] [3], faible) ;
digitalWrite (lumière [directement] [4], HIGH) ;
pedredon = true ;
}
Prochaine étape
STP ++ ;
stpset = false ;
}
}
rupture ;
Avertir les ped (si possible)
cas 2 :
Programme d’installation
Si (stpset == false) {}
changeat = maintenant + tpedwarn ;
changeatped = maintenant + tpedwarnint ;
stpset = true ;
}
Courir
else {}
Flash rouge Ped
Si (pedactive [directement] == true) {}
Si (pedredon == true & & changeatped < maintenant) {}
digitalWrite (lumière [directement] [4], faible) ;
pedredon = false ;
changeatped = maintenant + tpedwarnint ;
}
Si (pedredon == false & & changeatped < maintenant) {}
digitalWrite (lumière [directement] [4], HIGH) ;
pedredon = true ;
changeatped = maintenant + tpedwarnint ;
}
}
Si (maintenant > changeat) {/ / fois vers le haut
Désactiver
digitalWrite (lumière [directement] [0], faible) ;
digitalWrite (lumière [directement] [4], HIGH) ;
pedredon = true ;
pedactive [directement] = false ;
Prochaine étape
STP ++ ;
stpset = false ;
}
}
rupture ;
Jaune
cas 3 :
Programme d’installation
Si (stpset == false) {}
changeat = maintenant + tyellow ;
digitalWrite (lumière [directement] [1], HIGH) ;
stpset = true ;
}
Courir
else {}
Si (maintenant > changeat) {/ / fois vers le haut
Désactiver
digitalWrite (lumière [directement] [1], faible) ;
Prochaine étape
STP ++ ;
stpset = false ;
}
}
rupture ;
Rouge
cas 4 :
Programme d’installation
Si (stpset == false) {}
changeat = maintenant + tred ;
digitalWrite (lumière [directement] [2], haut) ;
stpset = true ;
}
Courir
else {}
Si (maintenant > changeat) {/ / fois vers le haut
Recommencer
STP = 1 ;
stpset = false ;
Changer de Direction
Si (direct == 1) {}
direct = 0 ;
}
else {}
direct = 1 ;
}
}
}
rupture ;
}
}