L'arduino est une carte programmable (
http://arduino.cc/en/Main/Products ) qui peut servir pour des tonnes de trucs. C'est cette carte que j'utilise pour faire fonctionner le feu.
Code : Tout sélectionner
//**************** Entête déclarative *********************************************
const int ROUGE_1=3; //declaration constante de broche
const int ORANGE_1=2; //declaration constante de broche
const int VERT_1=1; //declaration constante de broche
const int ROUGE_2=6; //declaration constante de broche
const int ORANGE_2=5; //declaration constante de broche
const int VERT_2=4; //declaration constante de broche
static uint32_t tempomode = millis(); ; // variable memoire de temps de changement de mode
//static boolean valmode = HIGH ; // variable mode de clignotement low=derangement high=normal
long tempsderrang = 300000 ; //variable temps de derangement 5min
long tempsnormal = 1200000 ; //variable temps de normal 20min
long tempscycle = tempsderrang +tempsnormal ;
//**************** FONCTION SETUP *********************************************
void setup() { // debut de la fonction setup()
pinMode(ROUGE_1, OUTPUT); //met la broche en sortie
pinMode(VERT_1, OUTPUT); //met la broche en sortie
pinMode(ORANGE_1, OUTPUT); //met la broche en sortie
pinMode(ROUGE_2, OUTPUT); //met la broche en sortie
pinMode(VERT_2, OUTPUT); //met la broche en sortie
pinMode(ORANGE_2, OUTPUT); //met la broche en sortie
digitalWrite(ROUGE_1,LOW); // met la broche au niveau BAS
digitalWrite(VERT_1,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT
digitalWrite(ROUGE_2,LOW); // met la broche au niveau BAS
digitalWrite(VERT_2,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT
delay(500); // pause de 0,5 seconde
digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS
delay(500); // pause de 0,5 seconde
digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT
digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT
delay(500); // pause de 0,5 seconde
digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS
tempomode = millis() ;
} // fin de la fonction setup()
// ********************************************************************************
//*************** FONCTION LOOP ***************************************************
void loop(){
if (millis() - tempomode <= tempsnormal) { //feu en mode normal
//--- le feu 2 passe au vert
digitalWrite(ROUGE_1,HIGH); // allume rouge feu 1
digitalWrite(ROUGE_2,LOW); // éteint rouge feu 2
digitalWrite(VERT_2,HIGH); // allume vert feu 2
delay (30000); // pause longue 30 secondes
//--- le feu 2 passe à l'orange
digitalWrite(VERT_2,LOW); // éteint vert feu 2
digitalWrite(ORANGE_2,HIGH); // allume orange feu 2
delay (1000); // pause 1 secondes
//--- le feu 2 passe au rouge
digitalWrite(ORANGE_2,LOW); // éteint orange feu 2
digitalWrite(ROUGE_2,HIGH); // allume rouge feu 2
delay (1000); // pause courte 1 seconde
//--- le feu 1 passe au vert
digitalWrite(ROUGE_1,LOW); // éteint rouge feu 1
digitalWrite(VERT_1,HIGH); // allume vert feu 1
delay (30000); // pause longue 30 secondes
//--- le feu 1 passe à l'orange
digitalWrite(VERT_1,LOW); // éteint vert feu 1
digitalWrite(ORANGE_1,HIGH); // allume orange feu 1
delay (1000); // pause 1 secondes
//--- le feu 1 passe au rouge
digitalWrite(ORANGE_1,LOW); // éteint orange feu 1
digitalWrite(ROUGE_1,HIGH); // allume rouge feu 1
delay (1000); // pause courte 1 seconde
}
else { // feu en mode derangement
digitalWrite(ROUGE_1,LOW); // met la broche au niveau BAS
digitalWrite(VERT_1,LOW); // met la broche au niveau BAS
digitalWrite(ROUGE_2,LOW); // met la broche au niveau BAS
digitalWrite(VERT_2,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT
digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT
delay(1000); // pause de 1 seconde
digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS
delay(1000); // pause de 1 seconde
digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT
digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT
delay(1000); // pause de 1 seconde
digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS
digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS
delay(1000); // pause de 1 seconde
}
if (millis() - tempomode >= tempscycle) { tempomode = millis() ; }
} // fin de la fonction loop**************************************************************
// --- Fin programme ---
Avec ce code, ton feux fonctionne normalement pendant 20 minutes, puis passe en dérangement pendant 5 minutes, puis revient en mode normal 20 minutes ........