Go Down

Topic: valore massimo (Read 2526 times) previous topic - next topic

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





Code: [Select]


#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("  ");
}

}
 

leo72


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:
Code: [Select]

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.

uwefed

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

PaoloP

Così:

Code: [Select]
#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);
}


camperos

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

PaoloP

#5
Mar 16, 2013, 08:07 pm Last Edit: Mar 16, 2013, 08:24 pm by PaoloP Reason: 1
Giusto, non ci avevo pensato.
Nella inizializzazione devi mettere
Code: [Select]
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:
Code: [Select]
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:
Code: [Select]
valMax= 0;
valMin= 1023;


Go Up