#include <LiquidCrystal_I2C.h>
// Inicialize o display LCD I2C 20x4 com o endereço 0x27
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define PIN_TRIG_F 9
#define PIN_ECHO_F 8
#define PIN_TRIG_T 7
#define PIN_ECHO_T 6
const int L_Green = 13;
const int L_Yellow = 12;
const int L_Red = 11;
int V1 = 0;
float Temp_1 = 0;
const float BETA = 3950;
const int TEMP_MIN = 0;
const int TEMP_MAX = 100;
const int DELAY_MIN = 100;
const int DELAY_MAX = 2000;
void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
pinMode(PIN_TRIG_T, OUTPUT);
pinMode(PIN_ECHO_T, INPUT);
pinMode(PIN_TRIG_F, OUTPUT);
pinMode(PIN_ECHO_F, INPUT);
pinMode(L_Green, OUTPUT);
pinMode(L_Yellow, OUTPUT);
pinMode(L_Red, OUTPUT);
}
void loop() {
V1 = analogRead(A0);
Temp_1 = 1 / (log(1 / (1023.0 / V1 - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(10, 0);
lcd.print(Temp_1);
lcd.print(" ");
digitalWrite(PIN_TRIG_F, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_F, LOW);
int duracao_F = pulseIn(PIN_ECHO_F, HIGH, 30000);
digitalWrite(PIN_TRIG_T, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_T, LOW);
int duracao_T = pulseIn(PIN_ECHO_T, HIGH, 30000);
if (duracao_T == 0) {
Serial.println("Falha na leitura do sensor T");
}
if (duracao_F == 0) {
Serial.println("Falha na leitura do sensor F");
}
int Dist_T = duracao_T / 58.0;
int Dist_F = duracao_F / 58.0;
lcd.setCursor(0, 1);
lcd.print("Distancias:");
lcd.setCursor(0, 2);
lcd.print("F:");
lcd.setCursor(10, 2);
lcd.print(Dist_F);
lcd.print(" ");
Serial.print("Dist_F: ");
Serial.println(Dist_F);
lcd.setCursor(0, 3);
lcd.print("T:");
lcd.setCursor(10, 3);
lcd.print(Dist_T);
lcd.print(" ");
Serial.print("Dist_T: ");
Serial.println(Dist_T);
float D = Dist_F - Dist_T;
digitalWrite(L_Red, LOW);
digitalWrite(L_Yellow, LOW);
digitalWrite(L_Green, LOW);
if (D < 0) {
if (Dist_F > 100) {
digitalWrite(L_Green, HIGH);
}
if (Dist_F <= 100 && Dist_F >= 50) {
digitalWrite(L_Yellow, HIGH);
}
if (Dist_F < 50 && Dist_F >= 30) {
digitalWrite(L_Yellow, HIGH);
delay(50);
digitalWrite(L_Yellow, LOW);
delay(50);
}
if (Dist_F < 30) {
digitalWrite(L_Red, HIGH);
}
} else if (D > 0) {
if (Dist_T > 100) {
digitalWrite(L_Green, HIGH);
}
if (Dist_T <= 100 && Dist_T >= 50) {
digitalWrite(L_Yellow, HIGH);
}
if (Dist_T < 50 && Dist_T >= 30) {
digitalWrite(L_Yellow, HIGH);
delay(50);
digitalWrite(L_Yellow, LOW);
delay(50);
}
if (Dist_T < 30) {
digitalWrite(L_Red, HIGH);
}
}
int delayTime = map(Temp_1, TEMP_MIN, TEMP_MAX, DELAY_MAX, DELAY_MIN);
delay(delayTime);
}