Paso 15: La secuencia de comandos
La escritura de la Arduino Uno se coloca por debajo.
Bueno, soy un programador de C desde hace décadas, por lo que, para mí, el software de la escritura fue un paseo por el carril de la memoria y era probablemente la parte más sencilla de este proyecto.
Decidí abstraer a los controladores de bajo nivel reales para el motor, IR, servo y LEDs. Aunque era demasiado perezoso para recorrer el trazado completo orientado a objetos separar estas características en sus propias clases de C++, no sería difícil hacerlo. Se deja este ejercicio para el lector.
Dirección
He repartido las posiciones de las ruedas en un número discreto de pasos izquierdos y derecho, por lo que presiona los botones de flecha izquierda o derecha del mando a distancia se suma a o resta del valor de vuelta actual (con cheques de la gama). Esto entonces fue asignado a un valor de porcentaje (-100% por 100%, donde 0 significa "línea recta"), que deja el nivel más bajo para decidir cuántos grados reales representan el 100% y que el valor de alimentación al servo. Esto me dio la mayor flexibilidad en el código a modificas girar a la izquierda max grados, así como cuántos botón presiona tarda en llegar. También usé el botón central (entre la izquierda y derecha-flechas) para centrar las ruedas inmediatamente (ajuste valor de vuelta a 0).
Velocidad
Yo hice algo parecido con la velocidad del motor hacia adelante y hacia atrás: he creado una gama discreta de pasos para la velocidad, que van desde un número positivo, a través de 0, a un número negativo: es positivo, 0 es parada, negativo es hacia atrás. Al oprimir la flecha hacia arriba, aumenta el valor actual; al oprimir la flecha hacia abajo, disminuye (con cheques de la gama). También hay un botón que ajusta la velocidad a 0 (parada). El código de alto nivel asigna ese número a un valor porcentual (-100%... 100%) y luego lo pasa hasta el código de bajo nivel, que los mapas que a gama de Arduino (es decir, 0-255) para conducir el HBridge. Otra vez, esta abstracción me permitió modificas la velocidad hacia adelante y hacia atrás, así como el número de pulsar un botón-que toma para conseguir al 100%.
En el futuro, podría utilizar algo más parecido a un joystick para el control de estas funciones, sin embargo, puesto que es bastante torpe usar teclado del mando a distancia IR.
LED
Programación de las luces era probablemente el más divertido. He configurado un controlador genérico de máquina de estado y define conjuntos separados de máquinas de estado para cada par de LEDs. Esto me permitió conducir a cada uno de los 6 LEDs con patrones previamente definidos conjuntamente o independientemente.
Asignan arbitrariamente los botones numéricos de la almohadilla para usarse como controles del LED: 4 medio izquierda-girar a la señal, vuelta derecha 6, 5 luces intermitentes de advertencia y otros según sea necesario. Hubiera estado bueno para la vuelta izquierda y derecha botones que cambia, pero nunca llegué a que en el programa.