Wert sichern von Serial / ADC in Arduino-IDE

Gast #5753721
Lesenswert?

Hallo,

ich brauche mal bitte einen Denkansatz.

In der Arduino-IDE (ich hoffe in der richtigen Rubrik zu sein) erfasse 
ich einen Wert über einen ADC und via Serial.

Der ADC-Wert wird immer ein wenig schwanken, der über Serial bleibt so, 
wie er übertragen wurde (liegt halt in der Natur der Dinge)

Nun möchte ich aber immer den zuletzt geänderten Wert für eine Regelung 
übernehmen.
Entweder stelle ich am Poti etwas ein oder sende einen anderen Wert über 
RXD.

Wie (es muss nicht der Programm-Code sein, die logische Beschreibung 
würde mir reichen) erkenne ich was zuletzt geändert wurde und wie 
verhindere ich das kleine Spannungsschwankungen am ADC als neuer Wert 
gewertet werden?


Danke für eure Hilfe!!!
Gast #5753817
Lesenswert?

Gerdi68 schrieb:
> Wie (es muss nicht der Programm-Code sein, die logische Beschreibung
> würde mir reichen) erkenne ich was zuletzt geändert wurde und wie
> verhindere ich das kleine Spannungsschwankungen am ADC als neuer Wert
> gewertet werden?

Du speicherst den Werte im EEPROM, sofern dein Arduino sowas hat (die 
AVR-basierenden sollten sowas auf jeden Fall haben).
Den Wert kannst du dann auch wieder aus dem EEPROM in dein Programm 
laden.
Gast #5753896
Lesenswert?

Vielleicht habe ich mich ungünstig ausgedrückt.
Zur Laufzeit des Programms soll das passieren.
Den Wert kann ich in einer Variable speichern.
Der Wert darf nach einem Neustart auch 0 sein.

Wie erkenne ich die Änderung?
Und wie wird eine geringe Schwankung am ADC ignoriert?

Wenn das Poti am ADC 100 erzeugt soll die Regelung mit 100 erfolgen. 
Wenn über Serial 200 empfangen wird dann soll die Regelung mit 200 
erfolgen. Wenn wieder am Poti gedreht wird dann mit diesem Wert.
Wenn die Versorgungsspannung schwankt oder die Bahn des Potis etwas 
dreckig ist und sich dadurch der ADC Wert ändert soll weiterhin mit dem 
letzten Wert geregelt werden.
Gast #5753936
Lesenswert?

Gerdi68 schrieb:
> Wie erkenne ich die Änderung?
> Und wie wird eine geringe Schwankung am ADC ignoriert?

Alten Wert merken, mit Neuem vergleichen, nur bei (relevant großer) 
Änderung reagieren:

1
...
2

3
void loop() {
4
  static float alter_messwert;
5
...
6

7
  float neuer_messwert=messe_und_berechne_irgendwas_vom_ADC();
8

9
  if (fabs(alter_messwert - neuer_messwert) > 0.123) {
10
     sende_messewert_sonswohin(neuer_messwert);
11
     mache_regelungs_sachen_und_mehr(neuer_messwert);
12
      ...
13
     alter_messwert = neuer_messwert; // merken
14
  }
15
...
16

17
}
18

19
...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren