Hallo zusammen,
ich hab in meinem Wohnmobil ein ESP32 mit einer Tanksonde am laufen um die Frischwasser menge zu messen. Dazu hab ich den Tank mit Gießkanne in 10L schritten ausgemessen da der Tank über den Radkasten geht und nicht annähernd Linear ist.
Beim auslitern habe ich mir die Werte die der ads1115 ausspuckt aufgeschrieben und darauf meine Berechnung in Liter erstellt.
Jetzt soll das alles in HA umziehen nur bekomme ich in HA nur die Spannung angezeigt.
Gibt es eine Möglichkeit den Wert direkt aus dem ADC zu bekommen damit ich nicht nochmal den Tank auslitern muss?
Das ist der Arduino code der auf dem alten ESP32 läuft.
void loop()
{
Blynk.run();
timer.run(); // Initiates BlynkTimer
int16_t adc0, adc1, adc2, adc3, liter;
float volts0, volts1, volts2, volts3;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);
if (adc0 <= 15) {
liter = 0;
}
if (adc0 > 15 && adc0 <= 1525) {
liter = map(adc0, 15, 1525, 0, 10);
}
if (adc0 > 1525 && adc0 <= 2460) {
liter = map(adc0, 1525, 2460, 10, 20);
}
if (adc0 > 2460 && adc0 <= 2805) {
liter = map(adc0, 2460, 2805, 20, 30);
}
if (adc0 > 2805 && adc0 <= 3075) {
liter = map(adc0, 2805, 3075, 30, 40);
}
if (adc0 > 3075 && adc0 <= 3315) {
liter = map(adc0, 3075, 3315, 40, 50);
}
if (adc0 > 3315 && adc0 <= 3560) {
liter = map(adc0, 3315, 3560, 50, 60);
}
if (adc0 > 3560 && adc0 <= 3805) {
liter = map(adc0, 3560, 3805, 60, 70);
}
if (adc0 > 3805 && adc0 <= 4040) {
liter = map(adc0, 3805, 4040, 70, 80);
}
if (adc0 > 4040 && adc0 <= 4275) {
liter = map(adc0, 4040, 4275, 80, 90);
}
if (adc0 > 4275 && adc0 < 4525) {
liter = map(adc0, 4275, 4525, 90, 100);
}
if (adc0 >= 4525) {
liter = 100;
}
Blynk.virtualWrite(V5, adc0);
Blynk.virtualWrite(V4, liter);
Serial.println("-----------------------------------------------------------");
Serial.print("AIN0: "); Serial.println(adc0);
Serial.print("AIN1: "); Serial.println(adc1);
Serial.print("AIN2: "); Serial.println(adc2);
Serial.print("AIN3: "); Serial.println(adc3);
delay(1000);
}