25 de fevereiro de 2012

Semáforo carro/pedestre

Um semáforo com uma lógica das mais simples possíveis.


Coloquei dois potenciômetros. Um controla o tempo da luz vermelha para os carros e o outro o tempo do verde.
Reparem que o verde dos pedestres só é acionado 1 segundo após o vermelho dos carros, e o vermelho do pedestre emite um alerta para informar a sua mudança de estado.

É isso! Até!



/*--------------------------
 SEMAFORO CARRO / PEDESTRE
 FELLIPE COUTO - 26/05/2011
 -------------------------*/

#define VermelhoC 12  //VERMELHO CARRO
#define AmareloC 11   //AMARELO CARRO
#define VerdeC 10     //VERDE CARRO
#define VermelhoP 3   //VERMELHO PEDESTRE
#define VerdeP 2      //VERDE PEDESTRE
#define PotVermelho 0 //POTENCIOMETRO VERMELHO - Analog 0
#define PotVerde 1    //POTENCIOMETRO VERDE - Analog 1

int TempoVermelho = 0;
int TempoVerde = 12000;

void setup(){
  pinMode(VermelhoC, OUTPUT);
  pinMode(AmareloC, OUTPUT);
  pinMode(VerdeC, OUTPUT);
  pinMode(VermelhoP, OUTPUT);
  pinMode(VerdeP, OUTPUT);
}

void loop(){
  TempoVermelho = map(analogRead(PotVermelho), 0, 1023, 8000, 30000); //08 seg a 30 seg
  TempoVerde = map(analogRead(PotVerde), 0, 1023, 8000, 30000);
  VermelhoCarro();
  delay(TempoVermelho - 4000);
  AlertaP();
  VerdeCarro();
  delay(TempoVerde - 4000);
  AmareloCarro();
  delay(4000);
}

void VermelhoCarro(){
  digitalWrite(VermelhoC,HIGH);
  digitalWrite(AmareloC,LOW);
  digitalWrite(VerdeC,LOW);
  delay(1000);
  digitalWrite(VerdeP,HIGH);
  digitalWrite(VermelhoP,LOW);
}

void VerdeCarro(){
  digitalWrite(VermelhoC,LOW);
  digitalWrite(AmareloC,LOW);
  digitalWrite(VerdeC,HIGH);
  digitalWrite(VerdeP,LOW);
  digitalWrite(VermelhoP,HIGH);
}

void AmareloCarro(){
  digitalWrite(VermelhoC,LOW);
  digitalWrite(AmareloC,HIGH);
  digitalWrite(VerdeC,LOW);
  digitalWrite(VerdeP,LOW);
  digitalWrite(VermelhoP,HIGH);
}

void AlertaP(){
  digitalWrite(VerdeP,LOW);
  for (int i = 0; i < 6; i++){
    digitalWrite(VermelhoP,HIGH);
    delay(400);
    digitalWrite(VermelhoP,LOW);
    delay(400);
  }
  digitalWrite(VermelhoP,HIGH);
  delay(1000);
}

Nenhum comentário:

Postar um comentário