grundsätzliche Frage zum zurücksetzten eines ermittelten Messwerts

Hallo, mal ne allgemeine Frage:

Wenn ich über nen ADC eine Spannung einlese und diesen Wert als Integer abspeichere, wie kann ich diesen Wert zurücksetzten, wenn z.B. die Spannung nach einer bestimmten Zeit gesunken/ gestiegen ist?
Wäre diese auch z. B. in einem timerinterrupt möglich?
über einen grundlegenden Tipp wäre ich dankbar.

Hier mal nur ein Beispiel zum besseren Verständnis

int sensor = A0;  
  
int wert = 0;  
int wert_max=0;
void setup() {
 
}

void loop() {

  wert = analogRead(sensor);  // Wert einlesen
 
 if (wert>wert_max)  
    wert_max = wert;
   
   ............
                
}

Du machst dein analogRead() ja in der loop, diese wird (wie der Name schon sagt) immer und imemr wieder aufgerufen. Ändert sich hier nun die Spannung am Analogpin, wird nahezu zeitgleich deine Variable Wert aktualisiert.

Buttman01:
Wäre diese auch z. B. in einem timerinterrupt möglich?
über einen grundlegenden Tipp wäre ich dankbar.

Wenn Du auf dieselbe Variable sowohl innerhalb als auch außerhalb einer ISR zugreifen möchtest, so muss diese Variable “volatile” deklariert werden, also statt:
int wert_max = 0;
setze:

volatile int wert_max=0;

Und für Zugriffe auf Variablen AUSSERHALB der ISR, solltest Du die Interrupts sperren, wenn die Variable mehr als ein Byte Speicherplatz belegt. Also Zuweisungen außerhalb einer ISR:

noInterrupts();
wert_max= 0;
interrupts();

Innerhalb einer ISR ist das nicht notwendig, da eine ISR (unter normalen Umständen) nicht von einer anderen ISR unterbrochen werden kann.

gut zu wissen mit den ISRs, danke. Aber wie kann ich den einen ermittelten Wert zurücksetzten? Benötige ich dafür ein Unterprogramm ? z.B:

  ......
reset()
 void reset(){ wert_max =0;}
.......

oder kann ich das anders lösen?

Buttman01:
gut zu wissen mit den ISRs, danke. Aber wie kann ich den einen ermittelten Wert zurücksetzten? Benötige ich dafür ein Unterprogramm ?

Wenn Du keine ISR Routinen in Deinem Programm hast, kannst Du Werte innerhalb Deines Programms beliebig zuweisen, ohne dabei Besonderheiten berücksichtigen zu müssen.

An globale Variablen kannst Du Werte im setup() in der loop() oder in anderen Funktionen zuweisen.

Und die Zuweisung einer "0" unterscheidet sich da um kein bisschen von der Zuweisung eines "Messwerts".

Irgendwie verstehe ich die Frage nicht.

hi,

[glaskugelmodus] er will die höchst/tiefstwerte innerhalb zb einer minute. [/glaskugelmodus]

gruß stefan

nein,erstmal nur höchstwerte im Stundentakt.ich wollte nur grundlegend wissen , ob sich ein gespeicherter Mess-Wert löschen lässt. Ich plane für die Zukunft eine elektr. Befeuchtungseinheit für meinen Zigarrenschrank zu bauen. ( Feuchtigkeitsregulierung mit Hysterese und Luftumwälzung , Anbindung ans Rasberry PI usw.)
Den messwert brauche ich z. B. für verschiedene Rechenoperationen, Displayausgabe usw.)Nach der Verarbeitung soll der Meswert gelöscht werden, für weitere Abfragen.

Ah, das hatte ich anfangs missverstanden, dass es um den Maximalwert ging. Du kannst einfach prüfen, ob ein bestimmtes Zeitintervall vergangen ist (Standard-Tipp ist ja das mitgelieferte blinkWithoutDelay-Beispiel) und dann setzt du deine Variable wert_max wieder auf 0.
Hier brauchst du auch keine Interrupte, ISRs usw.

ahh ok, hört sich dann ja einfach an. Vielen Dank