#include <LiquidCrystal_I2C.h> //dyrektywa
//dyrektywy preprocesora dotyczace wyswietlacza
#define LCD_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
//dyrektywy preprocesora dotyczace czujnika
#define trig 3
#define echo 2
// diodki z przypisanymi numerami PWM
int g = 11;
int y = 12;
int r = 13;
// tworzneie obiektu z parametrami
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS);
void setup() {
Serial.begin(9600); // inicjacja portu szeregowego
// inicjacja wyswietlacza
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
pinMode(r, OUTPUT); // dioda czerwona
pinMode(y, OUTPUT); // dioda zolta
pinMode(g, OUTPUT); // dioda zielona
pinMode(trig, OUTPUT); // triger czujnika
pinMode(echo, INPUT); // echo czujnika
}
void loop() {
float czas,odl; // parametry zmiennoprzecnikowe
digitalWrite(trig, HIGH); // wygenerowanie sygnału ultradźwiękowego
delayMicroseconds(1000); //czas trwania impulsu ultradźwiękowego
digitalWrite(trig, LOW); //kończy impuls ultradźwiękowy i przygotowuje czujnik do odbierania odbitego sygnału
czas = pulseIn(echo, HIGH); // czas między wysłaniem sygnału ultradźwiękowego a jego odbiciem
odl = (czas/2) /29.1; //odległość do obiektu
if (odl <=30) //odelgłość mniejsza do 30 cm
{ //wyswietlacz
lcd.setCursor(1,0);
lcd.print("BARDZO BLISKO");
lcd.setCursor(6,1);
lcd.print(odl,2);
lcd.setCursor(10,1);
lcd.print("cm");
// Port szeregowy
Serial.print("BARDZO BLISKO");
Serial.print("\t");
Serial.print(odl, 2);
Serial.println(" cm");
// diody
digitalWrite(r, HIGH);
digitalWrite(y, LOW);
digitalWrite(g, LOW);
delay(300);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("UWAGA !!!");
delay(300);
lcd.clear();
}
if (odl <=50 && odl>30) // odległość z zakresu 30 - 50 cm
{
//wyswietlacz
lcd.setCursor(5,0);
lcd.print("BLISKO");
lcd.setCursor(5,1);
lcd.print(odl,2);
lcd.setCursor(10,1);
lcd.print("cm");
// Port szeregowy
Serial.print("BLISKO");
Serial.print("\t");
Serial.print(odl, 2);
Serial.println(" cm");
// diody
digitalWrite(y, HIGH);
digitalWrite(r, LOW);
digitalWrite(g, LOW);
delay(500);
lcd.clear();
}
if (odl >50) // Odległość jest większa od 50 cm
{
//wyswietlacz
lcd.setCursor(5,0);
lcd.print("DALEKO");
lcd.setCursor(5,1);
lcd.print(odl,2);
lcd.setCursor(11,1);
lcd.print("cm");
// Port szeregowy
Serial.print("DALEKO");
Serial.print("\t");
Serial.print(odl, 2);
Serial.println(" cm");
// diody
digitalWrite(g, HIGH);
digitalWrite(y, LOW);
digitalWrite(r, LOW);
delay(900);
lcd.clear();
}
}