int RedCar = 12;
int YellowCar = 11;
int GreenCar = 10;
int RedPed = 9;
int GreenPed = 8;
bool Pressionado = false;
int Botao = 2;
int Som = 7;
unsigned long acionado;
unsigned int Sensor = 4;
int PinoSensor = 5;
int Pressao = LOW;
long multas = 0;
// tentativa 2 - codigos sem delay
unsigned long TempBotao = 0;
unsigned long TempTrans = 0;
unsigned long TempBotao2 = 0;
unsigned long TempTrans2 = 0;
void Multas() { // FUNÇÃO DAS MULTAS ATRAVÉS DO SENSOR DE MOVIMENTOS
if (digitalRead(Sensor) == HIGH) { // QUANDO O SENSOR DE MOVIMENTO FOR ACIONADO, TAL CONDIÇÃO ENTRA EM AÇÃO
digitalWrite(PinoSensor, HIGH); // AO SER VALIDA A CONDIÇÃO ACIMA, A 'FOTO' É TIRADA
if (Pressao == LOW) { // AINDA DENTRO DA CONDIÇÃO SENSOR, CRIA UMA CONDIÇÃO AINDA COM PRESSAO EM LOW
Serial.println("Infração detectada!"); // SAI NA TELA QUE HOUVE INFRAÇÃO
Pressao = HIGH; // MUDA O VALOR DA VARIÁVEL PARA HIGH, PORQUE HOUVE PASSAGEM DE VEICULO NO SINAL VERMELHO
}
} // FIM DA CONDIÇÃO
else { // CONDIÇÃO CONTRÁRIA, OU SEJA, 'SENÃO'
if (Pressao == HIGH) { // QUANDO A PASSAGEM DE CARRO É COMPUTADA, INICIA TAL CONDIÇÃO
multas++; // CONTABILIZA +1 MULTA
Serial.print("Contador de multas: "); // SAI NA TELA QUANTAS MULTAS FORAM CONTABILIZADAS
Serial.println(multas); // VARIÁVEL DE SAÍDA ACIMA
Pressao = LOW; // PRESSÃO VOLTA PARA LOW, ASSIM FAZENDO COM QUE QUANDO OUTRO CARRO PASSSE, ELE SEJA CONTABILIZADO TAMBÉM
} // FIM DA CONDIÇÃO
}
}
void Song() { // FUNÇÃO DO BUZZER, VULGO SOM
for (int x = 0; x < 3; x++) { // REPETIÇÃO FOR, ONDE SERÁ FEITA DE 3 VEZES (0 - 2)
Multas();
if (x == 0) { // CONDIÇÃO 'SE' X FOR 0
// tone(Som, hz, milissegundos)
tone(Som, 3000);
delay(9000); //
noTone(Som);
delay(1000); //
}
else if ( x == 1) { // CONDIÇÃO 'SENAO, MAS SE' X FOR 1
tone(Som, 1000);
delay(9000);
noTone(Som);
delay(1000);
}
else { // CONDIÇÃO 'SENAO', OU SEJA, SE X FOR 2
tone(Som, 500);
delay(9000);
noTone(Som);
delay(1000);
}
} // FIM DO FOR
} // FIM DA FUNÇÃO SONG
void setup() {
pinMode(RedCar, OUTPUT); // PINO DO REDCAR DADO COMO SAIDA
pinMode(YellowCar, OUTPUT); // PINO DO YELLOWCAR DADO COMO SAIDA
pinMode(GreenCar, OUTPUT); // PINO DO GREENCAR DADO COMO SAIDA
pinMode(RedPed, OUTPUT); // PINO DO REDPED DADO COMO SAIDA
pinMode(GreenPed, OUTPUT); // PINO DO GREENPED DADO COMO SAIDA
pinMode(Botao, INPUT_PULLUP); // PINO DO BOTAO SERÁ LIDO COMO HIGH OU LOW
pinMode(Som, OUTPUT); // PINO DO SOM DADO COMO SAIDA
pinMode(Sensor, INPUT); // PINO DO SENSOR DADO COMO ENTRADA
pinMode(PinoSensor, OUTPUT); // PINO DO REDCAR DADO COMO SAIDA
Serial.begin(9600); // COMUNICAÇÃO SERIAL ENTRE O ARDUINO E O DISPOSITIVO
}
void loop() {
digitalWrite(GreenCar, HIGH);
digitalWrite(RedPed, HIGH);
int estadoBotao = digitalRead(Botao);
if (estadoBotao == HIGH && !Pressionado) {
Pressionado = true;
acionado = millis();
tone(Som, 100, 500);
}
TempBotao = millis() - acionado;
if (Pressionado && (TempBotao > 10000)) {
digitalWrite(GreenCar, LOW);
digitalWrite(YellowCar, HIGH);
TempTrans = millis();
}
TempTrans2 = millis() - TempTrans;
if (TempTrans2 > 2000 && TempTrans2 <= 4000) {
digitalWrite(YellowCar, LOW);
digitalWrite(RedCar, HIGH);
}
else if (TempTrans2 > 4000 && TempTrans2 <= 6000) {
digitalWrite(RedPed, LOW);
digitalWrite(GreenPed, HIGH);
Song();
}
else if (TempTrans2 > 6000 && TempTrans2 <= 8000) {
digitalWrite(GreenPed, LOW);
digitalWrite(RedPed, HIGH);
}
else if (TempTrans2 > 8000 && TempTrans2 <= 10000) {
digitalWrite(YellowCar, HIGH);
digitalWrite(RedCar, LOW);
}
else if (TempTrans2 > 10000) {
digitalWrite(GreenCar, HIGH);
digitalWrite(YellowCar, LOW);
Pressionado = false;
}
}