// Подключаем библиотеку для работы с LCD
#include <LiquidCrystal.h>
// Инициализируем объект-экран, передаём использованные
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
float cm;
float m;
unsigned long previousMillis;
int ledState = HIGH;
int delay_num = 0;
int redPin = 6;
int greenPin = 5;
// Функция чтения данных с датчика
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // сброс Trig
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH); // установка TRIG на 10 мкс
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT); // измерение длительности ECHO
return pulseIn(echoPin, HIGH);
}
void parktronic (int green, int red, unsigned long currentMillis, int num){
if(currentMillis - previousMillis > num){
previousMillis = currentMillis;
if(ledState == LOW){
digitalWrite(greenPin, HIGH);
digitalWrite(redPin, HIGH);
ledState = HIGH;
} else {
digitalWrite(greenPin, green);
digitalWrite(redPin, red);
ledState = LOW;
}
}
}
void setup()
{
pinMode(redPin, OUTPUT);
digitalWrite(redPin, HIGH);
pinMode(greenPin, OUTPUT);
digitalWrite(greenPin, HIGH);
lcd.begin(16, 2);
lcd.clear();
}
void loop()
{
unsigned long currentMillis = millis();
cm = readUltrasonicDistance(3, 2)/58;
m = cm/100;
lcd.setCursor(4,0);
lcd.print("Meters:");
lcd.setCursor(5,1);
lcd.print(m);
if(m > 2){
digitalWrite(greenPin, LOW);
digitalWrite(redPin, HIGH);
} else if(m > 1){
parktronic(LOW, LOW, currentMillis, 500);
} else {
parktronic(HIGH, LOW, currentMillis, 100);
}
delay(100);
}