Está en la página 1de 5

//Declaracion de Variables

//Semaforo 1

const int sem1_rojo=2;

const int sem1_naranja=3;

const int sem1_verde=4;

//Semaforo 2

const int sem2_rojo=5;

const int sem2_naranja=6;

const int sem2_verde=7;

//Pulsador

const int pulsador=8;

//Buzzer

const int buzzer= 9;

//Sensores Ultrasonicos

const int ultra1_trig=10;

const int ultra1_echo=11;

const int ultra2_trig=12;

const int ultra2_echo=13;

//Declaracion de Variables

int semaforo_activo=1; //1 para semaforo1 y 2 para semaforo2

long tiempo=0;

long tiempo_anterior=0;

int distancia=100;

void setup() {

pinMode(sem1_rojo,OUTPUT);

pinMode(sem1_rojo,OUTPUT);

pinMode(sem1_rojo,OUTPUT);

pinMode(sem2_rojo,OUTPUT);

pinMode(sem2_rojo,OUTPUT);

pinMode(sem2_rojo,OUTPUT);
pinMode(buzzer,OUTPUT);

pinMode(pulsador,INPUT);

pinMode(ultra1_trig,OUTPUT);

pinMode(ultra1_echo,INPUT);

pinMode(ultra2_trig,OUTPUT);

pinMode(ultra1_echo,INPUT);

//Condiciones Iniciales

digitalWrite(ultra1_trig,LOW);

digitalWrite(ultra2_trig,LOW);

digitalWrite(sem1_rojo,LOW);

digitalWrite(sem1_naranja,LOW);

digitalWrite(sem1_verde,HIGH);

digitalWrite(sem2_rojo,HIGH);

digitalWrite(sem2_naranja,LOW);

digitalWrite(sem2_verde,LOW);

void loop() {

//transicion de semaforos por sensor ultrasonico

if(semaforo_activo==1)

distancia=leer_distancia(ultra1_trig,ultra1_echo);

if (distancia<5)

semaforo_activo=2;

transicion1a2();
}

if(semaforo_activo==2)

distancia=leer_distancia(ultra2_trig,ultra2_echo);

if (distancia<5)

semaforo_activo=1;

transicion2a1();

//Pulsador que apaga de emeregencia

if(digitalRead(pulsador)) //presionado es 5v

digitalWrite(sem1_rojo,LOW);

digitalWrite(sem1_naranja,LOW);

digitalWrite(sem1_verde,LOW);

digitalWrite(sem2_rojo,LOW);

digitalWrite(sem2_naranja,LOW);

digitalWrite(sem2_verde,LOW);

//Cambio de semaforos cada 6 segundos = 6000 milisegundos

tiempo=millis();

if(tiempo>tiempo_anterior+6000)

tiempo_anterior=tiempo;

switch(semaforo_activo)

case 1:transicion1a2();
break;

case 2:transicion2a1();

break;

int leer_distancia(int trig, int echo)//demora 20 milisegundos

int distancia_cm=100;

int tiempo_medido;

digitalWrite(trig,HIGH);

delay(20);

digitalWrite(trig,LOW);

tiempo_medido=pulseIn(echo,HIGH);

distancia_cm=tiempo_medido/59;

delay(100);

return distancia_cm;

void transicion1a2()

digitalWrite(sem1_rojo,LOW);

digitalWrite(sem1_naranja,HIGH);

digitalWrite(sem1_verde,LOW);

digitalWrite(sem2_rojo,LOW);

digitalWrite(sem2_naranja,HIGH);

digitalWrite(sem2_verde,LOW);

delay(2000);
digitalWrite(sem1_rojo,HIGH);

digitalWrite(sem1_naranja,LOW);

digitalWrite(sem1_verde,LOW);

digitalWrite(sem2_rojo,LOW);

digitalWrite(sem2_naranja,LOW);

digitalWrite(sem2_verde,HIGH);

void transicion2a1()

digitalWrite(sem1_rojo,LOW);

digitalWrite(sem1_naranja,HIGH);

digitalWrite(sem1_verde,LOW);

digitalWrite(sem2_rojo,LOW);

digitalWrite(sem2_naranja,HIGH);

digitalWrite(sem2_verde,LOW);

delay(2000);

digitalWrite(sem1_rojo,LOW);

digitalWrite(sem1_naranja,LOW);

digitalWrite(sem1_verde,HIGH);

digitalWrite(sem2_rojo,HIGH);

digitalWrite(sem2_naranja,LOW);

digitalWrite(sem2_verde,LOW);

También podría gustarte