int clockPin = 1;
int verrou = 2;
int dataPin = 3;
char data;
// Les deux couleurs du feu piéton
const byte VERT = 0b101;
const byte ROUGE = 0b011;
const byte NONE = 0b000;
//Pins des les LED RGB des passages piétons horizontaux
const int redPinH = 4;
const int greenPinH = 5;
//Pins des les LED RGB des passages piétons verticaux
const int redPinV = 6;
const int greenPinV = 7;
void setup() {
pinMode(clockPin, OUTPUT);
pinMode(verrou, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(redPinH, OUTPUT);
pinMode(greenPinH, OUTPUT);
pinMode(redPinV, OUTPUT);
pinMode(greenPinV, OUTPUT);
}
void envoi_ordre(int dataPin, int clockPin, char data)
{
for (int i = 0; i < 8 ; i++)
{
digitalWrite(clockPin, LOW);
digitalWrite(dataPin, data&0x80 >> i);
digitalWrite(clockPin, HIGH);
}
}
void feu (char ordre)
{
data = 255-ordre; //complément à 1 pour que ce qui soit allumé la led à 1 soit allumée et celle à 0 soit éteinte
digitalWrite(verrou, LOW);
envoi_ordre(dataPin, clockPin, data);
digitalWrite(verrou, HIGH);
}
//Fonction qui permet de faire passer les LED piéton sur l'axe horizontal du Vert au rouge er vice versa
void displayColorH(byte color) {
digitalWrite(redPinH, bitRead(color, 2));
digitalWrite(greenPinH, bitRead(color, 1));
}
//Fonction qui permet de faire passer les LED piéton sur l'axe vertical du Vert au rouge er vice versa
void displayColorV(byte color) {
digitalWrite(redPinV, bitRead(color, 2));
digitalWrite(greenPinV, bitRead(color, 1));
}
void loop()
{
int nord = random(0,10);
int sud = random(0,10);
int est = random(0,10);
int ouest = random(0,10);
int maxV =(nord, sud);
int maxH =(est, ouest);
//Feux tricolores et piétons horizontaux au vert
feu(129);
displayColorH(VERT);
displayColorV(ROUGE);
delay(1000*maxH);
//Feux tricolores horizontaux au orange et feux piétons horizontaux qui clignote au vert
for (int i = 0; i < 5 ; i++)
{
feu(195);
displayColorH(VERT);
displayColorV(ROUGE);
delay(250);
feu(195);
displayColorH(NONE);
displayColorV(NONE);
delay(250);
}
//Feux tricolores et piétons verticaux au vert
feu(36);
displayColorV(VERT);
displayColorH(ROUGE);
delay(maxV*1000);
for (int i = 0; i < 5 ; i++)
{
feu(102);
displayColorV(VERT);
displayColorH(ROUGE);
delay(250);
feu(102);
displayColorV(NONE);
displayColorH(NONE);
delay(250);
}
}