Paso 9: Coche acelerador y dirección
El acelerador y la dirección en el coche son "analógico", lo que significa que utilizando el controlador de XBox, el coche puede moverse en un rango de velocidades y girar en una gama de ángulos de dirección. La derecha trigger se utiliza para el remite, el gatillo izquierdo se utiliza para retroceder y el stick izquierdo se utiliza para el manejo (estos son los controles estándar para XBox juegos de carreras). Para transmitir estas entradas "analógicas" del controlador de XBox para el coche, los datos viajan a través de los programas como sigue:
Acelerador de datos - C#:
1. el estado del controlador de XBox se lee. Se guardan los valores de la izquierda gatillo como flotadores
2. una comparación se hace entre los valores de dos gatillo. Se utiliza el valor mayor y el menor valor se omite (por ejemplo, si ambos hacia adelante y hacia atrás se presiona, el valor más grande "gana")
3. el valor es multiplicado por 100 y manipulado para que velocidad 0 es el valor 500. Esto significa que la velocidad máxima es equivalente al valor "400", y remite toda velocidad es el valor "600". Esto se hizo para evitar la necesidad de usar números negativos, y la opción de 500 como el punto era completamente arbitraria.
4. el nuevo valor de la aceleración se convierte en una cadena (como 3 dígitos).
5. la secuencia del acelerador es añadida a la cadena de salida de C# y envió a Arduino cuando sea necesario.
Acelerador de datos - Arduino:
1. el Arduino recibe la cadena completa y guarda los caracteres del acelerador en una matriz de caracteres.
2. la matriz de caracteres del acelerador es convertida a un int
3. utilizando la función de "mapa", el valor de la aceleración se convierte en un valor compatible para la ESC. La ESC acepta las mismas señales de control como servomotores, así que el tipo de Servo se utiliza para escribir un valor de "grado" en el pin de salida. La ESC ha sido calibrada tal que 0 grados es toda velocidad inversa y 180 grados es toda velocidad remite. 90 grados es 0 velocidad.
4. el valor se escribe en la ESC.
En el código de C#, también verás algunas funciones extras que manipulan el acelerador. Éstos incluyeron a cambiar las características de conducción, pero no he encontrado les que útil. Una de estas funciones implica un modo de acelerador lineal/cuadrado/en cubos. Modo lineal proporciona una relación de 1:1 entre la posición de disparo y la velocidad. Por lo tanto, presionar los resultados a mitad de camino del gatillo remite en el coche en movimiento en la mitad de su velocidad máxima. Modo de cuadrados consiste en cuadratura el valor sin formato, por lo que pulsando el disparador hasta la mitad los resultados en el coche en movimiento en un cuarto de su velocidad máxima. Esto ofrece más variedad de control a velocidades más bajas, y menos en mayores velocidades. Estos modos del acelerador pueden seleccionarse usando el cuadro en el programa de C# GUI (usando un ratón).
La otra función consiste en la capacidad de activar/desactivar el "modo lento", pulsando el botón B en el controlador XBox. Modo lento limita la velocidad máxima del coche a la mitad de su velocidad máxima. Por lo tanto, podría utilizar la gama completa de los factores desencadenantes para controlar velocidades más bajas. Este modo realmente viene práctico a veces - es ideal para un control preciso a velocidades lentas.
La dirección es bastante similar del acelerador. La forma de los datos viaja es:
Manejo de datos - C#:
1. el estado del controlador de XBox se lee. El valor del eje x del stick izquierdo se guarda como un flotador
2. el valor se multiplica por 100, y 500. Esto significa que la izquierda completa es equivalente al valor "400", y es de pleno derecho el valor "600". Como el acelerador, esto se hizo para evitar la necesidad de usar números negativos, y la opción de 500 como el punto era completamente arbitraria.
3. el nuevo valor de dirección se convierte en una cadena (como 3 dígitos).
4. la cadena de manejo es añadida a la cadena de salida de C# y enviada a la Arduino cuando sea necesario.
Manejo de datos - Arduino:
1. el Arduino recibe la cadena completa y guarda los dirección caracteres en una matriz de caracteres.
2. la dirección matriz de caracteres es convertida a un int
3. utilizando la función de "mapa", el valor de dirección se convierte en un valor compatible para el servo de dirección. Tenga en cuenta que el servo de dirección no tiene toda la gama de 0 a 180. En mi coche, izquierda completa es de 133 grados y derecho completo es de 60 grados, con un valor de centro de 96 grados
4. el valor se escribe en el servo de dirección.
Como el acelerador, la dirección puede configurarse en modo lineal/cuadrado/en cubos en el programa C#. Encontré que mi coche era un poco inútil, debido a la gama relativamente pequeña en el ángulo de dirección. Ya que las ruedas no giran mucho, es fácil de conseguir que el ángulo recto en el modo lineal.
Nota sobre las bibliotecas de Arduino Servo:
Cuando estuve desarrollando el sketch de Arduino, utilicé la biblioteca estándar de Arduino Servo para la ESC y servo de dirección. Una vez que introduje el palo de NeoPixel, la librería Servo no podía utilizar más (ver https://learn.adafruit.com/neopixels-and-servos). La biblioteca de TiCoServo funciona igual de bien en mi coche del RC, pero existen límites - sólo dos servos pueden utilizarse al mismo tiempo, sólo un pequeño conjunto de pines se puede utilizar (incluso en un Arduino Mega), y pares sólo específicos de esos pines pueden trabajar juntos. La última de ellas fue descubierta a través de ensayo y error...