Muy buenas, estoy en un proyecto en el que necesito registrar el movimiento de un potenciómetro, le he preguntado al señor google pero no encuentro nada al respecto de como plantear el programa.
Lo que pretendo es que al moverse el potenciómetro hacia un lado (aumentando el valor) se ilumine o parpadee un led, al disminuir el valor se ilumine o parpadee otro led y al estar parado que estén los 2 leds apagados.
Alguna idea o donde buscar algo de ese estilo para poder hacer la programación?
Muchas gracias.
Lo que debes hacer es comparar en todos momento el valor actual con el anterior
De ese modo si la diferencia es positiva haces una vida, si es negativa otra y si se mantiene o sea si es cercana a cero la tercera.
El tema es que el adc tiende a dar valores que cambian así que tus lecturas deben hacerse con ciertos márgenes.
Ej. Si lees un pregunto son moverlo verás que si valor cambia entonces si el cambio es pequeño lo tomas como potenciómetro detenido.
Para los otros días casita el cambio será mayor.
Todo lo que he explicado ocurre en un tiempo corto, tu mueve y luego detienes entonces debes considerar esto también.
Hola, perdón por la tardanza. Comparando los estados he conseguido iluminar los leds, pero como bien dices necesito poner unos márgenes puesto que ahoramismo no paran de iluminarse por la fluctuaciòn del valor del potenciómetro. Cómo puedo poner ajustar esos márgenes?
Mira, te recomiendo que vayas a Documentación y leas acerca de millis().
Creas una secuencia entre la que mides dos valores del ADC.
entonces esa diferencia sea positiva, negativa o digamos casi estática te dirá que hacer.
unsigned long t1;
unsigned int pot = 0, potAnt;
void setup() {
}
//////////////////////////////////////////////////////////////////////////////////
void loop() {
if (millis() - t1 > 100UL) { // tomo muestras cada 100 mseg
potAnt = pot; // guardo el valor Anterior
pot = analogRead(A0);
int dif = pot - potAnt; // aqui determinas que pasa con el potenciómetro
if (dif > 50) { // variación positiva
// código de acción positiva
} else if (dif < -50) { // variación negativa
// código de acción negativa
} else { // no ha variado
// código de acción neutral
}
t1 = millis(); // con esto aseguro
}
}
Algo asi te debería mas o menos guiar.
Como dije. Ve a Documentación y lee/aprende sobre millis().
El código no esta probado, si hay algún error, por favor, intenta resolverlo.