Aunque el C y todos sus derivados me suenan a chino, veo un par de cosas;
- ¿De donde sacas las variables horizUp y horizDown? Sólo tienes declaradas Up y Down.
- en doEncodeA, para el giro antihorario (el cual tienes comentado) la condicional debería ser
(ISRCounter - 1 > 0) en vez de menor o igual que 0 - entiendo que ISRCounter sólo puede ir de 0 a 255.
Veo mas correcto doEncodeB (comentado completamente) que doEncodeA, salvo por las variables horiz*, pero tampoco me hagas mucho caso...
[...]
float Up;
float Down;
[...]
void doEncodeA()
{
if (millis() > timeCounter - timeThreshold)
{
if (digitalRead(PinA) == digitalRead(PinB))
{
giroCW = true;
if (ISRCounter + 1 <= pasosMax) ISRCounter++, Up++;
}
}
/* if (digitalRead(PinB) != digitalRead(PinA))
{
giroCW = false;
if (ISRCounter - 1 <= 0) ISRCounter--, horizDown++;
}*/
timeCounter = millis();
}
/*void doEncodeB()
{
if (millis() > timeCounter + timeThreshold)
{
if (digitalRead(PinA) != digitalRead(PinB))
{
giroCW = true;
if (ISRCounter + 1 <= pasosMax) horizUp++;
}
else
{
giroCW = false;
if (ISRCounter - 1 > 0) horizDown--;
}
timeCounter = millis();
}
}
Por cierto estaría bien que cambiases el título de tu hilo para que describa mejor tu problema, un hilo que se llama simplemente "help" o "ayuda" sin más no suele despertar mucho interes y puede acabar perdido fácilmente.