Salve a tutti, vorrei fare un conta piegamenti (flessioni) usando un sensore ad ultrasuoni (HC-SR04) e un display. Il sistema funziona ma ho due problemi: il display si vede male e il problema si corregge solo nel momento in cui faccio la flessione; il secondo problema è che provando a stare vicino al sensore (quindi alla distanza preimpostata per contare una sola flessione), continua a contare piegamenti fino a quando non mi tolgo da quella distanza. Come faccio a contare solo una flessione anche se sto vicino al sensore per più tempo?
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int trigPin = 10;
const int echoPin = 9;
long durata;
int distanza;
int Piegamenti= 0;
int ultimoPiegamento= 0;
int ultimaDistanza= 0;
int incremento = false;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durata = pulseIn(echoPin, HIGH);
distanza = (durata * 0.034) / 2;
Serial.println(Piegamenti);
if(distanza != ultimoPiegamento){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Piegamenti: ");
lcd.print(Piegamenti);
ultimoPiegamento = Piegamenti;
}
if(distanza != ultimaDistanza)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Piegamenti: ");
lcd.print(Piegamenti);
ultimoPiegamento = Piegamenti;
}
if(distanza<=10){
if(incremento==false){
Piegamenti += 1;
incremento=true;
tone(7, 1000, 100);
lcd.clear();
lcd.print("Piegamenti: ");
lcd.print(Piegamenti);
delay(500);
}else{
incremento=false;
}
}
}