Paso 12: La dirección y otros cabos sueltos.
Salida a los motores se realiza mediante el establecimiento de una señal pulso de ancho modulado (PWM) en las entradas de controlador de motor. En la tierra del Arduino, esto se hace con analogWrite(). Sin embargo, el valor por defecto de frecuencia PWM de Arduino es demasiado bajo para control de motor, así que añadido algunos manipulación de registro directo para forzarlo a ser 15.625 kHz. Ya que los controladores son reversibles, utilizo un pequeño bosque de if declaraciones para averiguar qué poner en los pines DIR y si o no invertir el orden de salida.
Una parte muy importante de la escritura de software de control bien gestiona los tipos de datos. Se puede ver en el código que typecast a menudo explícitamente para asegurarse de que estoy recibiendo exactamente el tipo de datos que quiero en cada paso del cálculo. Nada es peor que tener tu freak regulador hacia fuera debido a una variable se desbordó. Por ello, solicito también limitar en cada paso para asegurar que las variables se mantienen dentro de rangos adecuados. Por ejemplo, analogWrite() toma un valor entero entre 0 y 255, por lo que limitar las salidas a esta gama en cada paso del cálculo.