Conteo y resta de flancos, control de motor ¿que solución usar?

Hola, buen día a todos.
Estoy utilizando dos optoacopladores H21A1, e intento hacer que detecte en que la direccion del giro del motor, por decirlo asi: si esta girando a la derecha, entonces sume un contador y si esta girando hacia la izquierda restele al contador lo que giro. tengo la parte del conteo y la logica de la resta, pero hace falta algo por que si entra a un ciclo if cumple una condición, pero esta cambia dentro del ciclo.

esta el sensor 1 y el sensor 2, fisicamente juntos el uno a lado del otro, el diente de un piñon pasa por el sensor 1 por lo que este se pone en HIGH, ahora el diente del piñon estara en el sensor 2 cambiando el estado sensor 1 = LOW y ahora el sensor 2 = HIGH. De esta manera el contador incrementara y la misma logica inversa ara que el contador decremente.

Pero algo esta mal. Si el diente se queda en uno de los dos sensores sigue sumando ó sigue restando mientras el diente este en uno de los dos sensores.

Gracias por su tiempo si leen esto y gracias por contribuir, buen día todos.

#include <EEPROM.h>
int Direccion = 0; //DIRECCION FISICA DE MEMORIA

bool senplaca = LOW; //SENSOR0
bool datoplaca = LOW;
bool datoantplaca = LOW;
bool sen1placa = LOW; //SENSOR1
bool dato1placa = LOW;
bool dato1antplaca = LOW;

int cont1mem1 = 0; //Regitro de conteo en memoria eeprom

#define Sensor_plcs 2 //SENSOR PLACAS CENTELLADORAS
#define Sensor1_plcs 3

void setup() {
Serial.begin(115200);
pinMode(Sensor_plcs, INPUT); //DEFINE ENTRADA
pinMode(Sensor1_plcs, INPUT); //DEFINE ENTRADA
EEPROM.write(0, 0);
EEPROM.write(1, 0);
EEPROM.write(2, 0);
}

void loop() {
senplaca = digitalRead(Sensor_plcs); //Lectura sensor placa
sen1placa = digitalRead(Sensor1_plcs);

cont1mem1 = EEPROM.read(Direccion + 1); //Lectura conteo de memoria eeprom
Serial.print("eeprom = ");
Serial.println(cont1mem1);
delay(50);

if(senplaca == HIGH && sen1placa == LOW){
cont1mem1++; //Contador
EEPROM.write(Direccion + 1, cont1mem1); //Guarda en memoria 1 el contador
cont1mem1 = EEPROM.read(Direccion + 1); //Lee
delay(50);
}else if(senplaca == LOW && sen1placa == HIGH){
cont1mem1–; //Contador
EEPROM.write(Direccion + 1, cont1mem1); //Guarda en memoria 1 el contador
cont1mem1 = EEPROM.read(Direccion + 1); //Lee
delay(50);
}
sen1placa = senplaca;
senplaca = sen1placa;
}

Your current code tests to see if the sensor is HIGH which is what is causing your problem.
What you need is to test when the sensor BECOMES HIGH. In other words when it changes state.

See the State Change detection example in the IDE under File > Examples > 02.Digital > StateChangeDetection

En google busca ejemplos de encoder rotativos en arduino, por que es lo mismo .

Saludos

Hi,
Podrias aclarar una duda que tengo. Tu estas interesado en determinar la direccion del motor y si es correcto para que tienes que seguier contando y guardar la informaccion en memoria del counter.