Forum: PC-Programmierung Wert sichern von Serial / ADC in Arduino-IDE


von Gerdi68 (Gast)


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!!!

von STK500-Besitzer (Gast)


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.

von Gerdi68 (Gast)


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.

von Stromspardose (Gast)


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
...

von PittyJ (Gast)


Lesenswert?

Einfach zu jedem Wert auch einen Zeitstempel abspeichern. Dann kann man 
prüfen, welches der neueste Wert ist.

von Gerdi68 (Gast)


Lesenswert?

Vielen Dank!!!

Ich glaube das habe ich verstanden ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.