Salve a tutti , sto tentando di costruire ( simulare) un assistente parcheggio con arduino uno e il sensore HC-SR04.
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
const int TrigPin = 8;
const int EchoPin = 7;
int buzzer = 13;
int led = 9;
float cm;
void setup()
{
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, !(LOW)) / 58.0;
cm = (int(cm * 100.0)) / 100.0;
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
if (cm > 20)
{ lcd.setCursor(0, 0);
lcd.print("Dist : ");
lcd.print(cm);
lcd.print("cm");
delay(100);
// digitalWrite(buzzer, LOW);
// lcd.clear();
}
else if (cm < 20 )
{
lcd.setCursor(0, 0);
lcd.print("Dist : ");
lcd.print(cm);
lcd.print("cm");
digitalWrite(buzzer, HIGH);
tone(buzzer, 1500);
delay(50);
digitalWrite(buzzer, LOW);
noTone(buzzer);
}
else
{
lcd.setCursor(0, 0);
lcd.print("Dist : " );
lcd.print(cm);
lcd.print("cm");
delay(100);
//lcd.clear();
}
if (cm < 10)
{
digitalWrite(buzzer, LOW);
noTone(buzzer);
delay(30);
digitalWrite(buzzer, HIGH);
tone(buzzer, 2500);
}
if (cm < 20)
{
lcd.setCursor(0, 0);
lcd.print("Dist : ");
lcd.print(cm);
lcd.print("cm");
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
}
else
{
lcd.setCursor(0, 0);
lcd.print("Dist : ");
lcd.print(cm);
lcd.print("cm");
delay(100);
lcd.clear();
}
if (cm < 20)
{
lcd.setCursor(0, 1);
lcd.print("Stop!Stop!Stop! ");
}
}
Il mio problema è che che se accendo arduino e davanti al sensore vi è qualche cosa ( fino a 200 cm) tutto va bene , nel momento in cui sposto il sensore dove non vi sono ostacoli , impazzisce e inizia a segnare 0. fin qui potrebbe andarmi bene visto che oltre i 2 mt non avrebbe senso, il problema è che ricreando di nuovo un ostacolo rimane continuamente a 0 cm. per far si che si ripigli devo scollegare la tensione e ricollegarla.
Mi sapete dare una spiegazione ??? oppure c’è un errore nella programmazione ??
Grazie.