Capire quando un valore di un potenziometro cambia

Salve a tutti, avrei bisogno di capire quando un valore di un potenziometro viene cambiato, in pratica mi serve capire se sto muovendo oppure no un potenziometro, sia in aventi che all’indietro restituendo un valore 1 o 0 (true, false)...
Come posso fare?
non riesco a trovare una soluzione...

Lo usi come partitore di tensione e misuri la tensione al suo centro, se lo ruoti varierà la resistenza e quindi la tensione.

Maurizio

Ciao innanzitutto grazie mille per la risposta maubarzi, non ho ben capito cosa intendi dire con misurare la tensione, ovviamente non o problemi a leggere il potenziometro e anche ad usare la funzione map etc, quello che ho bisogno e una funzione che mi fa capire in ogni caso che vado a muovere e quindi cambiare il valore del potenziometro, tipo:
int muovo_potenziometro =0;

Se muovo il potenziometro in qualsiasi direzione allora muovo_potenziometro = 1; appena non lo muovo più muovo_potenziometro ritorna a = 0…

Scusa non capisco dove sia il problema... se leggi il valore della tensione portata dal potenziometro ad un pin analogico dell'arduino e questo valore cambia significa che hai mosso il potenziometro no? confronta il valore letto precedentemente con quello attuale e vedi, magari fa la verifica entro un certo errore di tolleranza se la lettura non è stabile.

Si neanche io ho capito cosa non hai capito.
Se non hai problemi a leggere il potenziometro sai già fare quello che ho scritto io.
Altrimenti, spiega meglio come leggi il potenziometro che così fissiamo i concetti di base prima di proseguire.

Maurizio

Credo lui intenda die che gli serve solo capire se “cambia” posizione, indipendentemente dalle letture fatte … :wink:

Se e’ cosi, basta che aggiungi alla funzione (o alla parte di programma che legge il potenziometro) un paio di righe (ed una nuova variabile, tanto per non incasinare il resto), dove con un if controlli se il vaore letto (di qualsiasi tipo sia) e’ uguale o diverso a quello del ciclo di lettura precedente … e metti una seconda variabile ad 1 o a 0 secondo il caso …

una cosa tipo (pseudocodice, perche’ non ho il tuo programma)

definisci due variabili in piu, una int ed una byte, tipo oldval e movim ...
nel setup metti una prima volta oldval = valoreletto (del potenziometro)

...tuoprogramma

qui fai la tua letture del potenziometro
if (valoreletto <> oldval);
   movim = 1;
   oldval = valoreletto;
else
   movim = 0;
   oldval = valoreletto;

In questo modo ogni volta che lo muovi, movim passa da 0 ad 1, rimanendo ad 1 finche’ si muove, e quando lo fermi ritorna a 0 … si puo perfezionare inserendo isteresi, o tempi minimi di permanenza ad 1, o quant’altro serve …

Se ne era già parlato in un’altra discussione giorni fa. Per evitare false segnalazioni dovute e piccole instabilità nella lettura, non si deve fare un confronto per uguaglianza, ma bisogna verificare se si discosta più di un certo valore:

int lettPrec;

void setup()
{
analogRead(pin); lettPrec=analogRead(pin);
}

void loop()
{
analogRead(pin); int lettura=analogRead(pin);
if(ABS(lettura-lettPrec)>2)
  {variazione=1; lettPrec=lettura;}
}

Poi, dove rilevi che variazione è diventata 1, la azzeri e fai quello che devi fare.
Meglio sarebbe così:

int lettPrec;
byte fatto=0;

void setup()
{
analogRead(pin); lettPrec=analogRead(pin);
}

void loop()
{
analogRead(pin); int lettura=analogRead(pin);
if (ABS(lettura-lettPrec)>2)
  {variazione=1; lettPrec=lettura;}
// ...
if(variazione)
  {
  if (fatto==0) {fai_questo(); fatto=1;}
  else {if (ABS(lettura-lettPrec)<=2) variazione=0;}
  }