#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int ECHO_PIN1 = 3; // Подключение вывода Echo первого ультразвукового датчика к пину 3
const int TRIGGER_PIN1 = 2; // Подключение вывода Trig первого ультразвукового датчика к пину 2
const int ECHO_PIN2 = 5; // Подключение вывода Echo второго ультразвукового датчика к пину 5
const int TRIGGER_PIN2 = 4; // Подключение вывода Trig второго ультразвукового датчика к пину 4
float Length; // Длина объекта
float count = 0; // Счётчик времени движения предмета до второго датчика
float timed1 = 0; // Время активации первого датчика
float trigrange = 30; // расстояние в см с которого будут активны датчики
void setup() {
Serial.begin(9600); // Инициализация порта для вывода данных
pinMode(TRIGGER_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIGGER_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print ("object length:");
}
void loop() {
// Считаем расстояние с ультразвукового датчика
float duration1, distance1;
digitalWrite(TRIGGER_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN1, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGGER_PIN1, LOW);
duration1 = pulseIn(ECHO_PIN1, HIGH);
distance1 = duration1 * 0.0343 / 2.0;
float duration2, distance2;
digitalWrite(TRIGGER_PIN2, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN2, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGGER_PIN2, LOW);
duration2 = pulseIn(ECHO_PIN2, HIGH);
distance2 = duration2 * 0.0343 / 2.0;
// Проверяем если объект попал в поле действия датчика
if (distance1 < trigrange){
delay(1);
timed1++;
if (distance2 > trigrange){
count++;
}}
if ((distance1 > trigrange) & (distance2 < trigrange)){
Length = ((15/ count) * timed1);
}
// Если объект не проходит через датчики, то значение времени обнуляется
if ((distance1 > trigrange) & (distance2 > trigrange)){
count = 0;
timed1 = 0;
}
lcd.setCursor(0, 1);
lcd.print(Length);
lcd.print("cm");
//Небольшая задержка между чтением данных
delay(10);
}