#include <LiquidCrystal.h> // Подключаем стандартную библиотеку LiquidCrystal
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define ECHO 2
#define TRIGG 3
#define RED 6
#define GREEN 5
#define BLUE 4
int cm;
int leftIndicator;
int rightIndicator;
byte left[8] = // >
{
B10000,
B01000,
B00100,
B00010,
B00100,
B01000,
B10000,
};
byte right[8] = // <
{
B00001,
B00010,
B00100,
B01000,
B00100,
B00010,
B00001,
};
long readUltrasonicDistance()
{
pinMode(TRIGG, OUTPUT); // сброс Trig
digitalWrite(TRIGG, LOW);
delayMicroseconds(2);
digitalWrite(TRIGG, HIGH); // установка TRIG на 10 мкс
delayMicroseconds(10);
digitalWrite(TRIGG, LOW);
pinMode(ECHO, INPUT); // измерение длительности ECHO
return pulseIn(ECHO, HIGH);
}
void TwoToFour(){ // непрерывно светиться
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
}
void OneToTwo(){ // жёлтым светом с периодичностью 500 мс
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
delay(500);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
}
void LessThanOne(){ // красным светом с периодичностью 100 мс
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
delay(100);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
}
void setup()
{
Serial.begin(9600);
pinMode(RED, OUTPUT);
digitalWrite(RED, HIGH);
pinMode(GREEN, OUTPUT);
digitalWrite(GREEN, HIGH);
pinMode(BLUE, OUTPUT);
digitalWrite(BLUE, HIGH);
lcd.begin(16, 2);
lcd.createChar(0, left);
lcd.createChar(1, right);
}
void loop()
{
static int oldCm = 0;
cm = readUltrasonicDistance()/58;
leftIndicator = map(cm, 0, 400, 7, 0);
rightIndicator = map(cm, 0, 400, 8, 15);
if(cm != oldCm){
lcd.clear();
lcd.print("Distance: "); lcd.print(cm/100); lcd.print(" m");
lcd.setCursor(0, 1);
for(int i = 0; i <= leftIndicator; i++){
lcd.setCursor(i, 1);
lcd.write(byte(0));
}
for(int i = 15; i >= rightIndicator; i--){
lcd.setCursor(i, 1);
lcd.write(byte(1));
}
}
if(cm <= 400 && cm > 200){
TwoToFour();
}
else if(cm <= 200 && cm > 100){
OneToTwo();
}
else if(cm < 100){
LessThanOne();
}
delay(100);
}