Ciao a tutti, sto creando un piccolo sketch per capire quanto acqua rimane in un recipiente, in pratica vorrei usare un misuratore di distanza laser, trovato su Amazon compatibile con Arduino ed un sensore di rilevamento liquidi non a contatto,
Ho scritto lo sketch, ma vorrei inserire due valori e non so come fare, in pratica vorrei usare la EEPROM, per memorizzare il valore di lettura attuale ed il precedente.
Per il valore attuale penso di aver risolto, ma non so come fare per il valore della lettura precedente, in pratica vorrei che ad ogni lettura mi dicesse valore attuale X, valore precedente Y, ovviamente Y alla lettura successiva deve cambiare con X, non so se mi avete capito
vi allego lo sketch, non fate caso alla formula del livello la uso per comodità su tinkercad non mi fa calcoli complicati.
#include <LiquidCrystal.h>
#include <EEPROM.h>
#define ledR 8
#define ledB 13
#define ledV 11
const int triggerPort = 6;
const int echoPort = 7;
int pinH2O = 12;
int stateH2O = LOW;
int livello = 0;
LiquidCrystal lcd(10, 9, 5, 4, 3, 2);
void setup() {
pinMode(triggerPort, OUTPUT);
pinMode(echoPort, INPUT);
pinMode(ledR, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(ledV, OUTPUT);
lcd.begin(16, 2);
pinMode(pinH2O, INPUT);
EEPROM.read(1);
EEPROM.read(2);
}
void loop() {
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
//calcolo distanza
long durata = pulseIn( echoPort, HIGH );
long distanza = 0.034 * durata / 2;
//parte grafica
lcd.print("D ");
lcd.print(distanza);
lcd.setCursor(0, 4);
lcd.print(livello);
lcd.setCursor(1, 0);
// sezione sensore Acqua
int valH2O = digitalRead(pinH2O);
if(valH2O == HIGH){
EEPROM.write(1, livello);
digitalWrite(ledV, HIGH);
digitalWrite(ledR, LOW);
livello = distanza+10;
}
else{
digitalWrite(ledV, LOW);
digitalWrite(ledR, HIGH);
}
//Aspetta 1000 microsecondi
delay(2000);
lcd.clear();
}