Un consiglio su una tecnica di programmazione

Da niubbo…

Durante la scrittura di alcuni programmi, noto che spesso si utilizza (quando serve :)), l’uso di questo sistema per filtrare alcuni valori, per es:

X = analogRead(A0);

if ( X != lastX) {
Serial.println(X);
lastX = X;

Vuol dire che se X è diverso dall’ultimo valore, allora stampa X.

Se la lettura sull’ingresso A0 è sempre quella, non entrare nel costrutto.

Se però, come nel mio caso, volessi avere un filtraggio su una finestra di valori, il codice si complicherebbe molto?

Ho un ingresso analogico variabile (0 - 5 Volt), che oscilla tantissimo attorno ai suoi valori più prossimi, durante lo stato di quiete,(non posso evitarlo).

Se per esempio, giro la manopola e ottengo un valore di 40 (analogico), questo mi oscilla intorno ai 39, 40, 41.

Quindi vuol dire che il costrutto if, non funziona come vorrei (ovviamente), perché in stato di quiete, Serial.print stampa comunque tutti e tre i valori.

Come poter dire al costrutto IF di stampare solo se il valore è all’esterno di questa finestra di valori?

Chiedo scusa, ma non trovo altro modo per esprimere questo concetto. :confused:

Grazie a chi vorrà

Andy

Dovresti editare il tuo post ed inserire il codice nei tag appositi </>

Venendo al dunque, ti è sufficiente usare un po’ di matematica :slight_smile:

  X = analogRead(A0);
  delta = 10;
   
  if ( abs(X - lastX) >= delta ) {
    Serial.println(X);
    lastX = X;
  }

l’istruzione abs(x) restituisce il valore assoluto di x.

Hai ragione e ho editato.

Nel frattempo grazie della risposta, mi prendo un mesetto per capire quella linea di codice :sweat_smile:
Scherzi a parte è fantastico vedere la differenza tra un codice pulito e io che invece avevo gia fatto 10 if else.
Lo provo e ti metto un punto karma

Ciao e grazie di nuovo.