Hi, I ve got a question concerning traffic lights. I d like to know how to use attachinterrupt on my program to allow it to run correctly. Here the program so far :
//Déclaration des variable temps
unsigned long temps_init;
unsigned long temps_act;
//Affectation des numéros de Pin aux LEDs
const int FeuVert1=4;
const int FeuRouge1=8;
const int FeuOrange1=3;
const int FeuVert2=7;
const int FeuRouge2=5;
const int FeuOrange2=6;
//Affectation un pin au bouton
const int Button=2;
//Initilisation de variable qui récupère l'etat du bouton
int etatButton=0;
void setup() {
Serial.begin(9600);
//Déclaration des LEDs en sortie
pinMode(FeuVert1,OUTPUT);
pinMode(FeuRouge1,OUTPUT);
pinMode(FeuOrange1,OUTPUT);
pinMode(FeuVert2,OUTPUT);
pinMode(FeuRouge2,OUTPUT);
pinMode(FeuOrange2,OUTPUT);
//Déclaration du bouton en entrée
pinMode(Button,INPUT);
}
void loop() {
int temps_act=millis();
//Lecture de l'etat du bouton et stockage dans etatButton
etatButton=digitalRead(Button);
Serial.print("Temps : \n");
Serial.println(temps_act);// on affiche le temps
Serial.print("Temps : ");
Serial.println(etatButton);// on affiche l'état du bouton
if((etatButton==HIGH) && digitalRead(FeuRouge1)==HIGH ){
temps_init=temps_act;
}
if((etatButton==HIGH) && digitalRead(FeuOrange1)==HIGH ){
temps_init=temps_act;
}
if((etatButton==HIGH) && digitalRead(FeuVert1)==HIGH ){
temps_init=temps_act-10000;
}
if (temps_act-temps_init<=4000) // 1er étape
{
digitalWrite(FeuRouge1,HIGH);
digitalWrite(FeuOrange1,LOW);
digitalWrite(FeuVert1,LOW);
digitalWrite(FeuVert2,HIGH);
digitalWrite(FeuRouge2,LOW);
digitalWrite(FeuOrange2,LOW);
}
if(((temps_act-temps_init)>4000) && ((temps_act-temps_init)<=6000)) // 2eme étape
{
digitalWrite(FeuVert1,LOW);
digitalWrite(FeuOrange1,LOW);
digitalWrite(FeuRouge1,HIGH);
digitalWrite(FeuVert2,LOW);
digitalWrite(FeuRouge2,LOW);
digitalWrite(FeuOrange2,HIGH);
}
if(((temps_act-temps_init)>6000)&& ((temps_act-temps_init)<10000)){
digitalWrite(FeuRouge1,LOW);
digitalWrite(FeuOrange1,LOW);
digitalWrite(FeuVert1,HIGH);
digitalWrite(FeuVert2,LOW);
digitalWrite(FeuRouge2,HIGH);
digitalWrite(FeuOrange2,LOW);
}
if (((temps_act-temps_init)>10000) && ((temps_act-temps_init)<=12000)){
digitalWrite(FeuRouge1,LOW);
digitalWrite(FeuOrange1,HIGH);
digitalWrite(FeuVert1,LOW);
digitalWrite(FeuVert2,LOW);
digitalWrite(FeuRouge2,HIGH);
digitalWrite(FeuOrange2,LOW);
}
if ((temps_act-temps_init)>12000)
{
temps_init = temps_act;
}
}
I found a program like this on a website, here the link