Tengo un problema al controlar un motor pap con easydriver desde mi wemos d1.
Uso la siguiente funcion para mover el motor
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP, LOW);
delayMicroseconds(usDelay);
}
}
Pensando que delayMicroseconds no active el watchdog he cambiado el codigo llamando a yield y ha quedado asi
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
yield();
for(int i=0; i < steps; i++){
yield();
digitalWrite(STEP, HIGH);
// delayMicroseconds(usDelay);
digitalWrite(STEP, LOW);
// delayMicroseconds(usDelay);
}
}
El problema es que si paso un valor relativamente pequeño, por ejemplo 1600, el motor funciona perfectamente y el esp no se resetea. Pero necesito que el motor de 40 vueltas completas para hacer un barrido y en ese caso le paso como valor 64000. El motor comienza a moverse, da dos otres vueltas completas y el esp se reinicia.
Pense que con el yield() seria suficiente, pero no.
El error que da es el siguiente
Soft WDT reset
>>>stack>>>
ctx: cont
sp: 3ffefe90 end: 3fff00a0 offset: 01b0
3fff0040: 401001f0 00001ba3 000000af 40100219
3fff0050: 00000000 000000af 00001ba3 40207620
3fff0060: 3ffe8693 00000000 3ffeeae0 3ffeebf0
3fff0070: 3ffee9a8 00000000 3ffeea84 402077b2
3fff0080: 3fffdad0 00000000 3ffeebc0 4020d7d0
3fff0090: feefeffe feefeffe 3ffe855c 40100dcd
<<<stack<<<
⸮E)⸮?)⸮⸮
Tambien he probado a desactivar el watchdog por software con identico resultado.
Alguna idea de como hacer esta llamada sin que se quede colgado?