Messwert mit Tastendruck spechern; Delta anzeigen

Hallo

Ich möchte mir meinem ESP8266 einen Strom messen (über INA219) und an einem Display anzeigen.

… bis dahin funktioniert alles.

Nun mein Problem:
mit Drücken eines Tasters (LOW an einem Pin des ESP) Soll der aktuell gemessene Wert auf 0 gesetzt werden und nur noch das Delta angezeigt werden.

… also die Funktion wie bei einer Küchenwaage mit Tara

Strommessung_INA219___Display.ino (685 Bytes)

Wo ist da Problem ?
Den aktuellen Wert speichern und zukünftig die Differenz anzeigen, also wenn neuer Wert größer den alten Wert davon abziehen, wenn neuer Wert kleiner den neuen Wert vom alten Wert abziehen.
Alternativ auch einen Wert negativ anzeigen.

meinereins:
Ich möchte mir meinem ESP8266 einen Strom messen (über INA219) und an einem Display anzeigen.
… bis dahin funktioniert alles.

Was funktioniert?

Das ist Dein Code.

#include <U8g2lib.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);





void setup(void) {
  ina219.begin();
  u8g2.begin();

}

void loop(void) {
    float current_mA = 0;
    current_mA = ina219.getCurrent_mA();
    
  u8g2.clearBuffer();                     // internen Speicher löschen
  u8g2.setFont(u8g2_font_logisoso32_tr);  // choose a suitable font
  u8g2.setCursor (0, 32);
  current_mA = ina219.getCurrent_mA();
  u8g2.print(current_mA);
  u8g2.sendBuffer();                      // Transfer vom internen Speicher zum Display
  delay(200);                             // Wartezeit
}

Es möge vielleicht keine Fehlermeldung beim kompilieren kommen - aber funktionieren ist anders.
Warum:

  • setzt Du current_mA bei jedem Duchlauf erneut auf 0; um
  • dann den Wert vom Sensor an die Variable zu übergeben
  • bearbeitest das Display; um schliesslich
  • dann den Wert vom Sensor an die Variable zu übergeben

Und gibst die bei jedem Durchlauf erneut aus.
Letzteres kann man machen - alles andere vorher nicht so.

Nun mein Problem:
mit Drücken eines Tasters (LOW an einem Pin des ESP) Soll der aktuell gemessene Wert auf 0 gesetzt werden

… also die Funktion wie bei einer Küchenwaage mit Tara

aktueller Wert = eingelesener Wert
Wenn Taste gedrückt:
Variable=aktueller Wert
aktueller Wert=0
else
Ausgabe(aktueller Wert - Variable)
nicht schwer.
Das was danach kommen soll, hast Du nicht beschrieben.

aktueller Wert = eingelesener Wert
Wenn Taste gedrückt:
Variable=aktueller Wert
aktueller Wert=0
else
Ausgabe(aktueller Wert - Variable)
nicht schwer.
Das was danach kommen soll, hast Du nicht beschrieben.

Ich glaube es geht einfacher:

Zeige immer den gemessenen Wert minus eines Delta (Tara) an.
Am Anfang ist das Delta null.
Wenn Du den Taster drückst (Flankenerkennung) speicherst Du den aktuellen Wert in der Variablen Delta und setzt den gemessenen Strom auf null.

int delta =0;
...

loop(){
...
current_mA = ina219.getCurrent_mA()- delta;
if (taster erste mal gedrückt, L-H Flankenerkennung) {delta = current _mA; current_mA =0;}
Ausgabe current_mA auf Display
...
}