Hola muy buenas a todos, mi consulta principalmente es que me ayuden con mi programa de encoder, que no logro hacer que me lea 1 pulso/rev. sino que me lee como 800 pulsos. lo quiero mas que nada para medir RPM de motores.
les muestro el codigo que estoy ocupando.
volatile unsigned int temp, contador = 0; //Esta variable aumentará o disminuirá dependiendo de la rotación del encoder.
void setup() {
Serial.begin (9600);
pinMode(2, INPUT_PULLUP); // pin 2 como entrada, se activa el pullup interno
pinMode(3, INPUT_PULLUP); // pin 3 como entrada, se activa el pullup interno
//Configuracion de interruptor
//Un pulso ascendente del encoder activa ai0(). AttachInterrupt 0 esta en el pin digital 2 de nuestro Arduino.
attachInterrupt(0, ai0, RISING);
//Un pulso descendente del encoder activa ai1(). AttachInterrupt 1 esta en el pin digital 3 de nuestro Arduino.
attachInterrupt(1, ai1, RISING);
}
void loop() {
// Enviar el valor del contador
if( contador != temp ){
Serial.println (contador);
temp = contador;
}
}
void ai0() {
// ai0 esta activado si el pin digital 2 va desde LOW a HIGH
// Comprueba el pin 3 para determinar la direccion
if(digitalRead(3)==LOW) {
contador++;
}else{
contador--;
}
}
void ai1() {
// ai0 esta activado si el pin digital 3 va desde LOW a HIGH
// Comprueba el pin 2 para determinar la direccion
if(digitalRead(2)==LOW) {
contador--;
}else{
contador++;
}
}
cualquier ayuda es bienvenida, de antemano gracias