// Pines para sensores IR
const int irSensor[3] = {16, 17, 21};
// Pines para semáforos de autos (rojo, amarillo, verde)
const int carRed[4] = {12, 26, 19,23};
const int carYellow[4] = {14, 25, 5,18};
const int carGreen[4] = {27, 33, 22,18};
// Pines para semáforo de peatones (rojo y verde)
// const int pedRed = 23;
// const int pedGreen = 18;
int IR1=0;
int IR2=0;
int IR3=0;
int Suma=0;
int Inter= 0;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
// pinMode(irSensor[i], INPUT);
pinMode(carRed[i], OUTPUT);
pinMode(carYellow[i], OUTPUT);
pinMode(carGreen[i], OUTPUT);
}
for (int i = 0; i < 3; i++) {
pinMode(irSensor[i], INPUT_PULLUP);
}
// pinMode(pedRed, OUTPUT);
// pinMode(pedGreen, OUTPUT);
// Estado inicial
for (int i = 0; i < 4; i++) {
digitalWrite(carRed[i], HIGH);
digitalWrite(carYellow[i], LOW);
digitalWrite(carGreen[i], LOW);
}
// digitalWrite(pedRed, HIGH);
// digitalWrite(pedGreen, LOW);
}
void loop() {
if (digitalRead(irSensor[0])== LOW){ IR1=1; }
else { IR1=0; }
if (digitalRead(irSensor[1])== LOW){ IR2=1; }
else { IR2=0; }
if (digitalRead(irSensor[2])== LOW){ IR3=1; }
else { IR3=0; }
Suma = IR1 + IR2 + IR3 ;
Serial.print(Suma);
if (Suma == 0){ activarSemaforo(3); }
if (Inter == 0) {
if (IR1 == 1){ activarSemaforo(0);
Inter =1; }
else { Inter =1; }
}
if (Inter == 1) {
if (IR2 == 1){ activarSemaforo(1);
Inter =2; }
else { Inter =2; }
}
if (Inter == 2) {
if (IR3 == 1){ activarSemaforo(2);
Inter =3; }
else { Inter =3; }
}
if (Inter == 3) {
activarSemaforo(3);
Inter =0; }
// for (int i = 0; i < 4; i++) {
// if (digitalRead(irSensor[i]) == LOW) { // Si detecta coche
// activarSemaforo(i);
// }
// else { // Si NO detecta coche
// mantenerRojo(i);
// }
// }
}
void activarSemaforo(int i) {
// Verde autos
digitalWrite(carRed[i], LOW);
digitalWrite(carGreen[i], HIGH);
//digitalWrite(pedRed, HIGH);
//digitalWrite(pedGreen, LOW);
delay(5000);
// Amarillo autos
digitalWrite(carGreen[i], LOW);
Amarillo ( i);
// digitalWrite(carYellow[i], HIGH);
// delay(2000);
// Rojo autos y verde peatón
digitalWrite(carYellow[i], LOW);
digitalWrite(carRed[i], HIGH);
// digitalWrite(pedRed, LOW);
// digitalWrite(pedGreen, HIGH);
// delay(5000);
// Fin cruce peatón
// digitalWrite(pedGreen, LOW);
// digitalWrite(pedRed, HIGH);
}
// void mantenerRojo(int i) {
// digitalWrite(carRed[i], HIGH);
// digitalWrite(carYellow[i], LOW);
// digitalWrite(carGreen[i], LOW);
// digitalWrite(pedGreen, HIGH); // Peatones pueden cruzar si no hay coche
// digitalWrite(pedRed, LOW);
// }
void Amarillo (int Pin) {
for (int i = 1; i < 4; i++) {
digitalWrite(carYellow[Pin], HIGH);
delay(400);
digitalWrite(carYellow[Pin], LOW);
delay(400);
}
}