#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
const int trigPin = 7;
const int echoPin = 6;
long duration;
int FirstDistance=0;
int SecondDistance=0;
double speed=0;
int distance=1;
float Time = 0.5;
float delayedtime = 1000*Time; // definido intervalo de 0.5s
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
lcd.init(); // inicializa o lcd e printa uma messagem no LCD
// no software arduino init() passa a begin()
lcd.backlight();
lcd.print("->Speed Radar<-");
delay(3000);
lcd.clear();
}
void loop()
{
GetSpeed();
}
// definida a função que calcula a distancia medida entre 0.5s
float GetDistance()
{
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
//calcula a distancia
distance= duration*0.034/2;
return distance;
}
// consultada a fonte: https://www.hackster.io/Aouadja/accurate-speed-measurement-using-the-ultrasonic-sensor-b955cd#comments
// definida a função que calcula a velocidade em Km/h
void GetSpeed(){
FirstDistance = GetDistance(); //obtem a 1ª distancia
delay(delayedtime); //espera 0.5 seconds depende do tempo declarado acima em "Time"
SecondDistance = GetDistance(); //obtem a 2ª distancia
speed = 0.036 * (FirstDistance - SecondDistance)/Time; // calcula a diferença
//printa a velocidade no serial monitor para confirmar com o LCD
Serial.print("speed (Km/h) is: ");
Serial.println(speed);
//printa a velocidade no Liquid Display
lcd.setCursor(0,0);
lcd.print("Speed (Km/h) is:");
lcd.setCursor(0,16);
lcd.println(speed);
lcd.print(" ");
}