Analoge Wertänderungen erkennen

Hallo zusammen,

Nachdem ich das gefühlte halbe Internet durchforstet habe, bin ich zum Schluss gekommen das ich mich wohl anmelden und Fragen muss.

Mein Ziel ist es die Werte von 6 oder jetzt im Versuchsaufbau 2 Potis (Analogeingang) am LCD darzustellen.

Das hab ich alles schön hinbekommen solange ich im lcd.print den entsprechenden Poti angewählt habe.
Jetzt hätte ich es noch gerne wenn der Display immer den Wert des zuletzt veränderten Potis anzeigt.
Das heisst sobald ich einen Poti verändere soll das Display den Wert desselben Anzeigen.

Und so weiter halt, so dass nur der zuletzt veränderte angezeigt wird.

Mir fehlt es hierbei vor allem an der Vorstellungskraft die ich brauche um die Logik zu erstellen, das Programm kann ich dann irgendwie zusammenschuster;)

Ich hoffe das ist verständlich genug;)

Danke für eure Hilfe

Merke dir einen Wert und vergleiche ihn mit dem aktuellen Wert. Wenn sie sich ändern (evtl. hier eine kleine Hysterese einbauen) setzt du den alten Wert auf den neuen

evtl. hier eine kleine Hysterese einbauen

Analogeingänge schwanken um mindestens 1 bit, auch wenn sich nichts ändert.

Hallo

Da sehe ich ein kleines Problemchen
Du musst feststellen wann sich ein wert geändert hat, das tun anlogwerte eigendliche aber fast immer und ständig. Das letzte Bit kippt meistens hin und her.

Du musst dir also merken wie der letzte eingelesen wert war. Wenn der neue anders ist als der letzte dann hat er sich geändert.

Damit das dennoch klappen kann benötigst du ein Fenster also

Absolutwert von wertneu - wertalt > 2 dann ist geändert. Eine Statusvariable setzen .

In die Anzeige kommt dann der wert von dem die Statusvariable gesetzt ist

Zusätzlich muss beim setzten einer Status variablen die andere zurück gesetzt werden.

Das geht so lange gut wie nicht beide gleichzeitig geandert werden . In dem Fall wird dann die in die Anzeige kommen die im Programm als letzte steht.

Heinz

Nachtrag

Du kannst das mit der Statusvariable auch weg lassen und baust das mit dem absolutwert in ein If Konstrukt ein für beide Werte. Ist dann einfacher

Danke schonmal für die Antworten,

Ich hab vergessen zu erwähnen das ich die Analogwerte auch digitalisiert habe. Das ganze ist für einen MIDI Controller, diese Werte sind stabil von 0-127, wenn ich diese Nutze sollten Schwankungen kein Problem sein. die Synths sind vom Probeaufbau begeistert und zeigen keine Wertänderung;)

michael_x:
Analogeingänge schwanken um mindestens 1 bit, auch wenn sich nichts ändert.

Ja, deshalb habe ich das auch gesagt :stuck_out_tongue:

ungeprüft:

es sei

uint8_t alter_wert[6];
uint8_t aktueller_wert[6];
const uint8_t hysterese = 1;

dann

for (byte i = 0; i<6; i++)
{
 int16_t diff = alter_wert[i]-aktueller_wert[i];  // da leisten wir uns ausnahmsweise zwei Byte
 diff=abs(diff);  // abs mag keine Berechnungen im übergebenen wert siehe https://www.arduino.cc/reference/en/language/functions/math/abs/
 if (diff > hysterese) 
 {
   // zeige Wert am LCD

   alter_wert[i]=aktueller_wert[i];
  
 }
}