byte quart_secondes = 0;
byte intP = 0;
bool intReset = 0;
void setup() {
DDRB = 0x1F; //initie les ports 8 a 12 en sortie
DDRD = 0x7C; //initie les ports 2 a 6 en sortie
PORTB = 0b00; //PORTB tout etteint
PORTD = 0b00; // PORTD tout etteint
TIMSK1 = 0b00000001; //- Initialiser l'interruption de débordement du compteur 1 de générer une interruption à une fréquence de 1 Hz approximativement (Registres TCCR1A & TCCR1B).
TCCR1A = 0;
TCCR1B = 0b00000011; //(/64)- Activer les interruptions de débordement du compteur 1.
TCNT1 = 3035;
Serial.begin(9600);
}
void loop() {
while (intReset == 0) {
loopReset();
} quart_secondes = 0;
while (quart_secondes <= 76) {
loopdebut();
}
if (intP == 0) {
while (quart_secondes <= 152) {
loopSP();
}
quart_secondes = 0;
} else {
while (quart_secondes <= 212) {
loopAP();
}
quart_secondes = 0;
}
}
ISR(TIMER1_OVF_vect) {
Serial.println(quart_secondes);
if (quart_secondes >= 213) {
quart_secondes = 0;
} else {
quart_secondes = ++quart_secondes;
}
}
void loopReset() {
if (quart_secondes % 2 == 0) {
PORTB = 0x00; //etteindre les dels EW
PORTD = 0x00; // eteindre les dels NS
} else {
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
}
if (digitalRead(A2) == HIGH) {
intReset++;
}
}
void loopdebut() {
PORTB = 0x00; //etteindre les dels EW
PORTD = 0x00; // eteindre les dels NS
if (quart_secondes <= 32) { //etat 1 == si la variable est egale ou inferieur à 8 sec
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
if (quart_secondes % 2 == 0) { // si la variable est divisable par 2
PORTB = 0x6; //allumée la del verte EW et la del Rouge pieton EW
} else PORTB = 0x2; //sinon, eteindre la del EW et allumer la del Rouge pieton EW
} else if (quart_secondes <= 64) { //etat 2
PORTB = 0x6; //allumée la del verte EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
} else if (quart_secondes <= 72) { // etat 3
PORTB = 0xA; //allumer la jaune EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
} else if (quart_secondes <= 76) { //etat 4
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
}
if (digitalRead(A0) == HIGH) {
intP++;
}
if (digitalRead(A1) == HIGH) {
intP++;
}
}
void loopSP() { //sequence sans pieton
if (quart_secondes <= 92) { //etat 5 == si la variable est egale ou inferieur à 23 sec
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
if (quart_secondes % 2 == 0) { // si la variable est divisable par 2
PORTD = 0x44; //allumer la del vert NS et la del Rouge pieton NS
} else PORTD = 0x40; // sinon, eteindre la del verte NS et garder la del Rouge pieton NS
} else if (quart_secondes <= 140) { //etat 6 == si la variable est egale ou inferieur à 35 sec
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x44; //allumer la verte NS et la del Rouge pieton NS
} else if (quart_secondes <= 148) { //etat 7 == si la variable est egale ou inferieur à 37 sec
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x48; //allumé la del jaune NS et la del Rouge pieton NS
} else if (quart_secondes <= 152) { //etat 8 == si la variable est egale ou inferieur à 38 sec
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
}
if (digitalRead(A0) == HIGH) {
intP++;
}
if (digitalRead(A1) == HIGH) {
intP++;
}
}
void loopAP() { //sequence avec pietons
if (quart_secondes <= 116) { //etat 4.1
PORTB = 0x11; //allumer la del pieton verte et le feu rouge EW
PORTD = 0x30; //allumer la del pieton verte et le feu rouge NS
} else if (quart_secondes <= 128) { //etat 4.2
PORTB = 0x11; //allumer la del pietons verte et le feu rouge EW
PORTD = 0x10; //allumer la del pietons verte et le feu rouge NS
if (quart_secondes % 2 == 0) { // si la variable est divisable par 2
PORTB = 0x11; //allumer les del pietons vertes et le feu rouge EW
PORTD = 0x30; //allumer les del pietons vertes et le feu rouge NS
} else PORTB = 0x10; //eteindre la del pieton vertes et allumer le feu rouge EW
PORTD = 0x10; //etteindre la del pieton verte et allumer le feu rouge NS
} else if (quart_secondes <= 136) { //etat 4.3
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
intP = 0;
} else if (quart_secondes <= 152) { //etat 5
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
if (quart_secondes % 2 == 0) { // si la variable est divisable par 2
PORTD = 0x44; //allumer la del vert NS et la del Rouge pieton NS
} else PORTD = 0x40; // sinon, eteindre la del verte NS et garder la del Rouge pieton NS
} else if (quart_secondes <= 200) { //etat 6
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x44; //allumer la verte NS et la del Rouge pieton NS
} else if (quart_secondes <= 208) { //etat 7
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x48; //allumé la del jaune NS et la del Rouge pieton NS
} else if (quart_secondes <= 212) { //etat 8
PORTB = 0x12; //allumer la del Rouge EW et la del Rouge pieton EW
PORTD = 0x50; //allumer la del Rouge NS et la del Rouge pieton NS
}
if (digitalRead(A0) == HIGH) {
intP++;
}
if (digitalRead(A1) == HIGH) {
intP++;
}
}