Saber cuando se esta moviendo un pin analogico

Saludos.

debo mencionar que soy novato en programacion, me podrian ayudar con mi proyecto? necesito sensar un pin analogico conectado a un potenciometro, cuando exista cualquier variacion llamar a una rutina que cambiara la pantalla de un LCD, de home a una pantalla diferente, y al dejar de mover el potenciometro despues de 2 segundos que regrese a la pantalla anterior home.

Gracias de antemano.

marpamed21@gmail.com

Ver cambios implica ver diferencias. Las diferencias debes establecerlas en un rango, y en valor absoluto porque da igual que sea positiva o negativa, sigue siendo una diferencia.

Si estas en un punto del potenciómetro y mueves en sentido horario supongamos que sube la tensión y tendrás diferencia positiva, pero si lo haces antihorario, tendras una diferencia negativa. Entonces con valor absoluto la diferencia siempre es positiva y te permite tomar decisiones.

Gracias por tu comentario surbyte,

es correcto, no me importa si es positivo o negativo el cambio, estoy haciendo la interfase visual para un amplificador, habra una pantalla indicando con barras la intensidad del volumen, al mover cualquier potenciometro VOLUMEN, BASS , TREBLE. quiero que cambie a la pantalla segun el pot que se movio, y despues de 2 segundos que regrese a la pantalla de las barras.

pero no tengo idea de como seria el codigo para detectar esa variacion, he buscado en la RED y en otros BLOGs pero no encuentro un ejemplo que me ayude a entender.

si me pudieras dar un ejemplo para sensar el pin analogo y sus variaciones te lo agradeceria.

Gracias de nuevo..

ejemplo de analogRead

const byte analogPin = A0;     // potentiometer wiper (middle terminal) connected to analog pin 3
                       // outside leads to ground and +5V
unsigned int valor;
unsigned int valorAnt = 0;
int diferencia;

void setup() {
  Serial.begin(9600);              //  setup serial
}

void loop() {
  char buffer[30];
  
  valor = analogRead(analogPin);     // read the input pin
  diferencia = dif(valor, valorAnt);
  sprintf(buffer, "valor = %d, dif = %d", valor, diferencia);             // debug value
  Serial.println(buffer);
  valorAnt = valor;
  // aca puedes hacer lo que gustes con la diferencia.
}

int dif(unsigned int a, unsigned int b) {
  return abs(a-b);
}

Voy a revisarlo y tratar de adaptarlo a mi codigo , mil gracias por regalarme de tu tiempo saludos, despues comento.

Solo te queda decidir que quieres hacer. incluso cabe la posibilidad que tal como este sea demásiado rápido y tengas que introducir un delay(100) por ejemplo para ver cambios cada 100 mseg

De lo contrario los cambios o diferencias transcurren en 1 mseg o menos.

Ahora que tienes diferencia solo haz algo como

if (diferencia > UMBRAL) {
   // ir a pantalla indicada
}
else {
   // iniciar una cuenta usando millis() de lo contrario perderas cambios para volver a los 2000 mseg
}

Como usar millis()? Ve a documentación => Indice de temas tutoriales => millis()

si es correcto creo que si voy entendiendo algo asi le agregue, gracias de nuevo

Me pone un error

exit status 1
expected unqualified-id before 'if'

solo tome el codigo que me compartiste, cambie pin analogo y le agregue la instruccion if() e intento encender un led al mover el potenciometro, algo estoy haciendo mal. ufff es complicado..

const int led=3;                                                           //led conectado a pin 3                                                    //  yo lo agregue
const byte analogPin = A4;                                                 // potentiometer wiper (middle terminal) connected to analog pin     cambiado por mi
                                                                          // outside leads to ground and +5V
                                                                    
 unsigned int valor;
 unsigned int valorAnt = 0;
 int diferencia;

 void setup() {
 Serial.begin(9600);                                                     //  setup serial

 pinMode(led,OUTPUT);                                                    // declaramos el led como salida                                       yo lo agregue
}


//---------------------------------------------------------------------------------------------------

void loop() {
 char buffer[30];
 valor = analogRead(analogPin);                                          // read the input pin
 diferencia = dif(valor, valorAnt);
 sprintf(buffer, "valor = %d, dif = %d", valor, diferencia);             // debug value
 Serial.println(buffer);
 valorAnt = valor;
                                                                         // aca puedes hacer lo que gustes con la diferencia.
}


 int dif(unsigned int a, unsigned int b) {
 return abs(a-b);

 }

 if (diferencia > 1.5) {
 digitalWrite(led, HIGH);
 delay(1000);                                                               
}

Moderador: Código editado con etiquetas para su correcta visualización

Mil Gracias por tu apoyo surbyte!

pero creo que primero me pongo a estudiar, es demasiada informacion para mi limitado conocimiento del tema.

Saludos!!

Porque modificaste el código si estaba bien lo que te plantee. En tu modificación agregaste cosas fuera de lugar

const int led=3;                                                           //led conectado a pin 3                                                    //  yo lo agregue
const byte analogPin = A4;                                                 // potentiometer wiper (middle terminal) connected to analog pin     cambiado por mi
                                                                          // outside leads to ground and +5V
                                                                    
unsigned int valor;
unsigned int valorAnt = 0;
int diferencia;

void setup() {
 Serial.begin(9600);                                                     //  setup serial

 pinMode(led,OUTPUT);                                                    // declaramos el led como salida                                       yo lo agregue
}


//---------------------------------------------------------------------------------------------------

void loop() {
  char buffer[30];
  valor = analogRead(analogPin);                                          // read the input pin
  diferencia = dif(valor, valorAnt);
  sprintf(buffer, "valor = %d, dif = %d", valor, diferencia);             // debug value
  Serial.println(buffer);
  valorAnt = valor;
  valorAnt = valor;
  if (diferencia > 1.5) {
      digitalWrite(led, HIGH);
  }
  delay(1000);                                                               
                                    // aca puedes hacer lo que gustes con la diferencia.
}

int dif(unsigned int a, unsigned int b) {
    return abs(a-b);
}