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é!


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*--------------------------
 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