/*
Visualizzare su un display la distanza rilevata tramite un sensore di prossimità,
facendo lampeggiare un led se questa diminuisce sotto i 10cm.
*/
#include <LiquidCrystal_I2C.h> //libreria per il display
#define ALLARMLIMIT 10 // distanza mimina sotto cui scatta l'alert
#define LEDPIN 8
#define TRIGGERPIN 3
#define ECHOPIN 2
LiquidCrystal_I2C lcd(0x27,20,4);
float distance = 0;
bool alarmOn = false;
long readUltrasonicDistance()
{
digitalWrite(TRIGGERPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGERPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGERPIN, LOW);
return pulseIn(ECHOPIN, HIGH) / 58;
}
void checkDistance(){
if(distance < ALLARMLIMIT && !alarmOn){
digitalWrite(LEDPIN, HIGH);
alarmOn = !alarmOn;
}else if(distance >= ALLARMLIMIT && alarmOn){
digitalWrite(LEDPIN, LOW);
alarmOn = !alarmOn;
}
}
void setup()
{
Serial.begin(9600);
pinMode(TRIGGERPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(LEDPIN, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("--> Distance <--");
delay(2000);
lcd.clear();
}
void loop()
{
if(readUltrasonicDistance() != distance){
distance = readUltrasonicDistance();
checkDistance();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distance");
lcd.setCursor(0,1);
lcd.print("cm:");
lcd.setCursor(11,1);
lcd.print(distance, 1);
}
delay(500);
}