Hola buenas tardes compañeros, estoy intentando hacer una especie de menu con un rotary encoder, con la libreria m2tklib he mirado ejemplos pero no consigo aclararme ya que no entiendo algunas cosas.
El metodo que habia pensado era algo mas rudo o basto... se trata de que el rotary va sumando o restando de uno en uno segun se gire, a derecha o a izquierda. Hasta ahi genial, mi idea era que si se encontraba en la posicion 2 al pulsar esa cifra se multiplicaba por 10 de manera que dejaba dentro un "submenu" que tenia del 20 - 29 para mostrar otros submenus y si se volviera a pulsar pues igual, esa posicion en la que se encuentre volver a multiplicarla por 10. Para volver atras, una pulsacion (Que no se como hacerla)de unos 2/3 segundos y asi volver al submenu o menu anterior.
Bueno pues yo he conseguido que al pulsar me multiplique la posicion por 10, pero cuando vuelvo a girar en cualquier direccion sigue por donde iba, en vez de seguir de 20 a 21,22,23 por ejemplo. No se que se me escapa ahi en ese punto, por que he intentado que pos = estadoClick para que si aumenta siga por ahi la cuenta pero no me lo hace, asi que algo estoy haciendo mal. Con respecto a la pulsacion prolongada tengo una ligera idea pero no se ponerla en marcha
#include <RotaryEncoder.h>
RotaryEncoder encoder(6, 7);
#define tiempo 200
int clickRot = 3;
int estadoClick = 0;
int newPos;
long tiempocontador = 0;
static int pos = 0;
void setup()
{
Serial.begin(9600);
pinMode (3, INPUT_PULLUP);
attachInterrupt(1, pulsa, FALLING);
}
void loop()
{
encoder.tick();
newPos = encoder.getPosition();
if (pos != newPos)
{
Serial.print(newPos);
Serial.println();
pos = newPos;
}
}
void pulsa()
{
if (millis() > tiempocontador + tiempo)
{
estadoClick = newPos*10;
tiempocontador = millis();
Serial.print(estadoClick);
Serial.println();
}
}
Eso es todo lo que tengo, no doy con la parte de donde tengo que almacenar el estadoClick para que cuando vuelva empiece por ahi
Por otra parte tengo esto para la pulsacion larga que cogi de otro programilla que tengo por ahi
if ((time_on != 0 ) && (millis() - time_on > 3000 && bestado)) //Si el boton esta pulsado más 3 segundo activa/desactiva el parpadeo
{
parpadeo = !parpadeo;
Serial.println("Led Encendido");
time_on = 0; //Controlamos que una vez que se activa/desactiva el parpadeo no seguir comprobando
}
(No se como ponerlo en el nuevo)
Bueno, dar las gracias a todos los que me leais y si podeis referenciarme a algo de m2tklib os lo agradeceria bastante me parece curioso. Haber si entre todos conseguimos resolver este problema y que se quede para al proximo que le pase lo mismo en el foro.
Saludos
PD: Dejo la libreria que uso
RotaryEncoder.zip (2.09 KB)