/*
Semaforo cruzamento 2 vias
sm1
VM1 pino 3
AM1 pino 2
VD1 pino 1
sm2
VM2 pino 6
AM2 pino 5
VD2 pino 4
Vermelho VM tempo 11s
Amarelo AM tempo 1s
Verde VD tempo 10s
Modificado em 16 out 2016
by Luiz O.Pilger Antonio
Modificado em 09/04/2019
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
byte VMP = 10;
byte VDP = 9;
byte VM2 = 8;
byte AM2 = 7;
byte VD2 = 6;
byte VM1 = 5;
byte AM1 = 4;
byte VD1 = 3;
const byte interruptPin = 2;
volatile byte state = LOW;
// A função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup() {
lcd.begin (16, 2);
// inicializa os pinos digital VM, AM e VD como saída
pinMode(VM1, OUTPUT);
pinMode(AM1, OUTPUT);
pinMode(VD1, OUTPUT);
pinMode(VM2, OUTPUT);
pinMode(AM2, OUTPUT);
pinMode(VD2, OUTPUT);
pinMode(VMP, OUTPUT);
pinMode(VDP, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
//attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); //Configurando a interrupção);
}
// A função de loop é repetidamente de forma infinita
void loop() {
// =========================================
// etapa 1 - 1=verde 2=vermelho
lcd.setCursor(0, 1);
lcd.print("1-VD 2-VM P-VM");
//sm 1
digitalWrite(VM1, LOW); // Desiga o Vermelho 1
digitalWrite(AM1, LOW); // Desiga o Amarelo 1
digitalWrite(VD1, HIGH); // Liga o Verde 1
//sm 2
digitalWrite(VM2, HIGH); // Liga o Vermelho 2
digitalWrite(AM2, LOW); // Desiga o Amarelo 2
digitalWrite(VD2, LOW); // Desiga o Verde 2
//
digitalWrite(VMP, HIGH); // Liga o Vermelho P
digitalWrite(VDP, LOW); // Desiga o Verde P
// tempo
delay(5000); // tempo de 10s
// =========================================
// etapa 2 - 1=amarelo 2=vermelho
lcd.setCursor(0, 1);
lcd.print("1-AM 2-VM P-VM");
// sm 1
digitalWrite(VM1, LOW); // Desiga o Vermelho 1
digitalWrite(AM1, HIGH); // Liga o Amarelo 1
digitalWrite(VD1, LOW); // Desiga o Verde 1
// sm 2
digitalWrite(VM2, HIGH); // Liga o Vermelho 2
digitalWrite(AM2, LOW); // Desiga o Amarelo 2
digitalWrite(VD2, LOW); // Desiga o Verde 2
digitalWrite(VMP, HIGH); // Liga o Vermelho P
digitalWrite(VDP, LOW); // Desiga o Verde P
// tempo
delay(1000); // tempo de 1s
// =========================================
// etapa 3 - 1=vermelho 2=verde
lcd.setCursor(0, 1);
lcd.print("1-VM 2-VD P-VM");
//sm 1
digitalWrite(VM1, HIGH); // Liga o Vermelho 1
digitalWrite(AM1, LOW); // Desiga o Amarelo 1
digitalWrite(VD1, LOW); // Desiga o Verde 1
// sm2
digitalWrite(VM2, LOW); // Desiga o Vermelho 2
digitalWrite(AM2, LOW); // Desiga o Amarelo 2
digitalWrite(VD2, HIGH); // Liga o Verde 2
digitalWrite(VMP, HIGH); // Liga o Vermelho P
digitalWrite(VDP, LOW); // Desiga o Verde P
delay(5000); // tempo de 10s
// =========================================
// etapa 4 - 1=vermelho 2=amarelo
lcd.setCursor(0, 1);
lcd.print("1-VM 2-AM P-VM");
//sm 1
digitalWrite(VM1, HIGH); // Liga o Vermelho 1
digitalWrite(AM1, LOW); // Desiga o Amarelo 1
digitalWrite(VD1, LOW); // Desiga o Verde 1
// sm2
digitalWrite(VM2, LOW); // Desiga o Vermelho 2
digitalWrite(AM2, HIGH); // Desiga o Amarelo 2
digitalWrite(VD2, LOW); // Liga o Verde 2
digitalWrite(VMP, HIGH); // Liga o Vermelho P
digitalWrite(VDP, LOW); // Desiga o Verde P
delay(1000); // tempo de 1s
if (state == HIGH) {
lcd.setCursor(0, 0);
lcd.print("Pedestre Passe");
lcd.setCursor(0, 1);
lcd.print("1-VM 2-VM P-VD");
//sm 1
digitalWrite(VM1, HIGH); // Liga o Vermelho 1
digitalWrite(AM1, LOW); // Desiga o Amarelo 1
digitalWrite(VD1, LOW); // Desiga o Verde 1
// sm 2
digitalWrite(VM2, HIGH); // Liga o Vermelho 2
digitalWrite(AM2, LOW); // Desiga o Amarelo 2
digitalWrite(VD2, LOW); // Desiga o Verde 2
digitalWrite(VMP, LOW); // Liga o Vermelho P
digitalWrite(VDP, HIGH); // Desiga o Verde P
delay(5000);
lcd.setCursor(0, 0);
lcd.print("Pedeste aguarde");
state = LOW;
}
}
void blink() {
state = HIGH;
}
Nenhum comentário:
Postar um comentário