valore massimo

salve

nello sketch sotto riesco a visualizzare valori massimi e minimi
ma ad ogni inversione di valore, cambiano i valori massimi e minimi impressi.

mi serve che il valore massimo letto cambi in alto solo al suo superamento e rimanga impresso
e il valore minimo letto cambi solo al suo superamento verso il basso.
è possibile?
grazie

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int val =0 ;
int valMax= 0;
int valMin= 0; 
 
void setup() {
 lcd.begin(20,4);
}

void loop() {
  val = analogRead (A2);
  delay (200);
  valMax = analogRead (A2);
  delay (200);
  valMin = analogRead (A2);
  
  lcd.setCursor(0, 0);
  lcd.print(val);
  lcd.print("  "); 
 
 if (val > valMin +10 ){
  lcd.setCursor(0, 1);
  lcd.print(valMin);
  lcd.print("  ");
}

 if (val < valMax -10 ){
  lcd.setCursor(0, 2);
  lcd.print(valMax);
  lcd.print("  ");
} 
 
}

camperos:
salve

nello sketch sotto riesco a visualizzare valori massimi e minimi
ma ad ogni inversione di valore, cambiano i valori massimi e minimi impressi.

mi serve che il valore massimo letto cambi in alto solo al suo superamento e rimanga impresso
e il valore minimo letto cambi solo al suo superamento verso il basso.
è possibile?
grazie

Nel tuo sketch non fai assegnamento dei valori ma solo confronti. Il tuo programma non memorizza i massimi ed i minimi che via via incontra.
Ad esempio:

 if (val > valMin +10 ){
  lcd.setCursor(0, 1);
  lcd.print(valMin);
  lcd.print("  ");
}

Devi assegnare a valMin il valore attuale di val all’interno dell’if.

come dice Leo devi controllare se il valore letto é maggiore del valore massimo o minore del valore minimo. in quei 2 casi devvi aggiornare il valore massimo o il valore minmo. Ciao Uwe

Così:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int val =0 ;
int valMax= 0;
int valMin= 0; 

void setup() {
  lcd.begin(20,4);
}

void loop() {
  val = analogRead(A2);
  valMax = max(val, valMax);
  valMin = min(val, valMin);

  lcd.setCursor(0, 0);
  lcd.print(val);
  lcd.print("  "); 

  lcd.setCursor(0, 1);
  lcd.print(valMin);
  lcd.print("  ");

  lcd.setCursor(0, 2);
  lcd.print(valMax);
  lcd.print("  ");

  // delay(200);
}

non potevo venir qui prima anzichè perdere tutto il sabato :0 Grandi!

ora mi resta da capire perchè cosi semplicemente funziona, per il minimo devo prima fare val-1023/2 se no mi restituisce "0" grazie

Giusto, non ci avevo pensato. Nella inizializzazione devi mettere

int valMin= 1023;

altrimenti essendo il minimo valore possibile 0 e iniziando da zero valMin varrà sempre zero.

Se vuoi il valore in milliVolt devi mettere:

val = (analogRead(A2)*4.8875855);

In questo modo il valore varia tra 0 e 5000 mV.

Se devi aggiungere un pulsante per resettare i valori massimo e minimo ricorda quindi che devi mettere:

valMax= 0;
valMin= 1023;