Pages: [1]   Go Down
Author Topic: "stabilizzare" la lettura in ingresso  (Read 636 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come posso fare per "stabilizzare" la lettura in ingresso
ho una variabile long (K)
che ha dentro la lettura  la lettura cambia di una cifra o due   ogni tanto   es 12345   12346  (piu letture al secondo)

volevo validare e stampare Serial.print (invio)   solo se  due letture consecutive
sono uguali

per adesso adopero questo pezzo  ma non mi convince troppo perche se si muove di 2 cifre   o di molte cifre stampa lo stesso    smiley-cry

    if ( (invio- K  > 1 ||invio- K  <-1 )   invio=K, Serial.println (invio);
 

Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

ITA - PV - Canneto Pavese
Offline Offline
Newbie
*
Karma: 0
Posts: 36
oggi sono stanco; non parlatemi di lavoro!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
io farei cosi (o anche con uno switch)
Code:
int volte=0;
if ( invio - K) ==0)
  {
if (volte >1)
{
                invio=K;
                Serial.println (invio);
   volte=0;
}
             else
   volte++;
}
Logged

Leo55

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un buon sistema per annullare le fluttuazioni è fare la media su un certo numero di valori e su questa applicare il controllo della variazione +/- 1 count come stai facendo adesso.
Quanti campioni utilizzare per la media dipende anche dalla velocità con cui arrivano i dati e quella con cui vuoi rappresentarli, se come penso parliamo del solito calibro digitale non dovresti avere problemi a prendere otto letture, potenza due così la divisione la fai tramite uno shift a destra di tre posizioni, e aggiornare i dati visualizzati almeno un paio di volte al secondo.
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

fare la media no,  perche la velocita di aggiornamento e poca 3 volte a secondo aspettare 8 letture sono 3 secondi
troppi,  poi  la lettura e gia filtrata perche ogni tanto  senza nessun motivo la lettura viene dimezzata oppure da una cifra altissima,

se faccio la media sicuramente peggioro le cose,
   la lettura altissima la filtro con un if,  non viene printata,

per quando dimezza devo acora vedere   come fare   smiley-confuse


provo con questo ma non funziona


Code:
(K > invio/2+(invio/10) || K < invio/2-(invio/10)
Code:
« Last Edit: November 02, 2012, 07:55:48 am by gingardu » Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

perche ogni tanto  senza nessun motivo la lettura viene dimezzata oppure da una cifra altissima,

Per ovviare a questi problemi basta inserire una seconda soglia che butta via tutte le letture che si discostano di più di un tot dall'ultima lettura valida, esempio pratico se l'ultima lettura è 1000 accetti tutte le variazioni comprese tra 900 e 1100, tutte quelle fuori range le scarti.
Quanto deve essere ampia la soglia dipende dalla massima variazione attesa tra due letture consecutive e dalla scala di misura.
Logged

Genova
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io suggerisco questo ma dipende molto dal tipo d'informazione che si va a campionare:

Cambiando dominio si deve comunque accettare una discretizzazione delle informazioni, questo è ovvio. Se hai delle fluttuazioni nel tempo devi evitare però anche di campionare l'inviluppo del segnale stesso altrimenti campioni dei dati falsi.

Quindi, sapendo che "movimento" ha il segnale, apri delle finestre di osservazione che lo abbraccino sufficientemente e fai un filro a majority vote, puoi anche fare la media ma stai attento a non prendere finestre di osservazione troppo lunghe altrimenti la variazione si annulla e non la puoi osservare (sempre che tu la voglia percepire).

Spero di esserti stato di aiuto.

Per l'implementazione ... bhè quella non credo ci siano problemi.  smiley-wink

Enry
Logged

Future is Here!

Pages: [1]   Go Up
Jump to: