#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
int sonarTrigger=9; //configurando trigger no pino 9
int sonarEcho = 10; //configurando echo no pino 10
float distancia = 0.0;
int tempo = 0;
//variaveis para o uso do millis
unsigned long previousTime1 = 0;
unsigned long previousTime2 = 0;
unsigned long previousTime3 = 0;
unsigned long previousTimeBuzzer = 0;
void setup() {
// put your setup code here, to run once:
pinMode(sonarTrigger, OUTPUT);
pinMode(sonarEcho, INPUT);
pinMode(27, OUTPUT);
pinMode(29, OUTPUT);
pinMode(31, OUTPUT);
pinMode(33, OUTPUT);
pinMode(35, OUTPUT);
pinMode(37, OUTPUT);
pinMode(39, OUTPUT);
pinMode(8, OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Loading...");
delay(1000);
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(sonarTrigger, LOW);
delayMicroseconds(2);
digitalWrite(sonarTrigger, HIGH); //envia um pulso de ativação
delayMicroseconds(10);
digitalWrite(sonarTrigger, LOW); //para o pulso para começar
tempo=pulseIn(sonarEcho, HIGH); //função que recebe o pulso
distancia =tempo/58.2; //conversão para distância
if(distancia<30){ //acende o led vermelho
//apaga os leds verdes
digitalWrite(27, LOW);
digitalWrite(29, LOW);
//apaga os leds amarelos
digitalWrite(31, LOW);
digitalWrite(33, LOW);
digitalWrite(35, LOW);
lcd.setCursor(0,0);
lcd.print(distancia);
tarefaLedRed();
tone(8,700);
}else if(distancia >=30 && distancia<100){ //acende o led amarelo
//apaga os led verdes
digitalWrite(27, LOW);
digitalWrite(29, LOW);
//apaga os leds vermelhos
digitalWrite(37, LOW);
digitalWrite(39, LOW);
lcd.setCursor(0,0);
lcd.print(distancia);
tarefaLedYellow();
tarefaBuzina();
}else if(distancia>=100){ //acende o led verde
lcd.setCursor(0,0);
lcd.print(distancia);
//apaga os leds vermelhos
digitalWrite(37, LOW);
digitalWrite(39, LOW);
//apaga os leds amarelos
digitalWrite(31, LOW);
digitalWrite(33, LOW);
digitalWrite(35, LOW);
//acende os leds verdes
digitalWrite(27, HIGH);
digitalWrite(29, HIGH);
noTone(8);//desliga a buzina
}
}
/*oid tarefaLedGreen(){
unsigned long current = millis() - previousTime1;
if((millis()-previousTime1)<500){
digitalWrite(27, HIGH);
digitalWrite(29, HIGH);
}else{
digitalWrite(27, LOW);
digitalWrite(29, LOW);
}
if((millis()-previousTime1)>1000){
previousTime1 = millis();
}
}*/
void tarefaLedYellow(){ //função para acender o LED Amarelo a cada 1 segundo
unsigned long current = millis() - previousTime2;
if((millis()-previousTime2)<1000){
digitalWrite(31, HIGH);
digitalWrite(33, HIGH);
digitalWrite(35, HIGH);
}else{
digitalWrite(31, LOW);
digitalWrite(33, LOW);
digitalWrite(35, LOW);
}
if((millis()-previousTime2)>2000){
previousTime2 = millis();
}
}
void tarefaLedRed(){ //função para acender o LED RED a cada meio segundo
unsigned long current = millis() - previousTime3;
if((millis()-previousTime3)<500){
digitalWrite(37, HIGH);
digitalWrite(39, HIGH);
}else{
digitalWrite(37, LOW);
digitalWrite(39, LOW);
}
if((millis()-previousTime3)>1000){
previousTime3 = millis();
}
}
void tarefaBuzina(){ //função para acionar a buzina a cada 500ms
unsigned long current = millis() - previousTimeBuzzer;
if((millis()-previousTimeBuzzer)<250){
tone(8,700);
}else{
noTone(8);
}
if((millis()-previousTimeBuzzer)>500){
previousTimeBuzzer = millis();
}
}