Bunas tardes, estoy haciendo un proyecto que ocupa motores DC y necesito medir la velocidad y distancia de estos, la practica me pide usar los sensores de rotación magnética Pololu 3081, pero no se como funciona ni como se programa, si alguien me pudiera orientar a como puedo empezar, por el momento he hecho esto en Tinkercad.
Y ocupo este código
const int encoderPinA = 2; // Debe ser pin con interrupción externa
const int encoderPinB = 3;
volatile int pulseCount = 0;
int pulseSnapshot = 0;
ISR(TIMER1_COMPA_vect) {
pulseSnapshot = pulseCount;
pulseCount = 0; // Reinicia para el próximo intervalo
}
void updateEncoder() {
pulseCount++; // Simplemente cuenta cada cambio en OUTA
}
void setup() {
pinMode(encoderPinA, INPUT_PULLUP);
pinMode(encoderPinB, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
Serial.begin(9600);
// Configuración del Timer1 para 100 ms
noInterrupts();
TCCR1A = 0; TCCR1B = 0;
OCR1A = 15624; // (16MHz/1024)/(10Hz) - 1 para 100 ms
TCCR1B |= (1 << WGM12); // Modo CTC
TCCR1B |= (1 << CS12) | (1 << CS10); // Prescaler 1024
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
void loop() {
static unsigned long lastPrint = 0;
if (millis() - lastPrint >= 100) {
Serial.println(pulseSnapshot);
lastPrint = millis();
}
}
En Tinkercard encontré ese interruptor y hasta donde comprendo se manejan de manera similar, el programa en teoría me debería de contar los pulsos del interruptor en un periodo de tiempo determinado, pero me arroja valores demasiado altos.
Me sería de mucha ayuda su respuesta, gracias. ![]()
