/*Questão 5. Crie um sistema de auxílio de estacionamento. Os LEDs e o buzzer
são acionados em diferentes distâncias: LED Verde e um bip do buzzer
a 650 ms se estiver com a distância acima de 70 cm, LED amarelo e um
bip a cada 300 ms se a distância estiver menor ou igual a 70 cm e maior
que 40 cm e LED vermelho e apito contínuo se a distância for menor ou
igual a 40 cm.*/
float duracao; //Variável para armazenar a distância entre o sensor e o objeto.
float distancia; //Variável para armazenar o tempo de duração do sinal refletido de ida e volta
int Buzzer;
void setup()
{
pinMode(18, OUTPUT); //Pino para acionar o trigger e disparar as ondas do sensor
pinMode(17, INPUT); //Pino do echo. Por meio dele, podemos saber quando a onda retornou e podemos calcular esse tempo.
pinMode(2, OUTPUT); //Pino do 1º LED verde
pinMode(4, OUTPUT); //Pino do 2º LED amarelo
pinMode(5, OUTPUT); //Pino do 3º LED vermelho
pinMode(23, OUTPUT); //Pino Buzzer
Serial.begin(115200);
}
void loop()
{
//Disparar o pino do trigger para transmitir as ondas ultrassônicas
digitalWrite(18, HIGH);
delayMicroseconds(10); //Aguardo 10 microssegundos
digitalWrite(18, LOW);
//Após isso, o sensor ultrassônico gera uma sequência de 8 pulsos.
/*A função PulseIn vai calcular o tempo em que o pino do echo passou
em nível lógico alto. Quando o sinal chega de volta, o pino vai para nível
lógico 0. Desse modo, podemos pegar esse tempo em microssegundos, jogar na
equação e determinar a distância entre o sensor e o objeto.
https://www.arduino.cc/reference/pt/language/functions/advanced-io/pulsein/
*/
duracao = pulseIn(17, HIGH);
distancia = duracao * 0.01716; //Calcular a distância a partir da duração do tempo do pulso.
if ( distancia > 70) // Distância maior que 70 cm: LED Verde e buzzer a cada 650 ms
{
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(23, HIGH);
tone(Buzzer, 1000); // Emitir um som de 1000 Hz
delay(100); // Duração do bip
noTone(Buzzer); // Parar o buzzer
delay(650); // Pausa entre os bips
}
if (distancia <= 70 && distancia > 40) // Distância entre 40 cm e 70 cm: LED Amarelo e buzzer a cada 300 ms
{
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(23, HIGH);
tone(Buzzer, 1000); // Emitir um som de 1000 Hz
delay(100); // Duração do bip
noTone(Buzzer); // Parar o buzzer
delay(300); // Pausa entre os bips
}
if (distancia <= 40) // Distância menor ou igual a 40 cm: LED Vermelho e buzzer contínuo
{
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(23, HIGH);
tone(Buzzer, 1000); // Emitir som contínuo de 1000 Hz
}
Serial.print("Distância: "); //Imprime a distância no monitor serial
Serial.print(distancia);
Serial.println(" cm");
}