Paso 4: Unir piezas
Si usted entiende completamente todos los materiales en pasos anteriores, debe ser capaz de escribir una interfaz de controlador a UART de XBox o implementar la comunicación PC-Arduino en sus los propios.
Como un último ejemplo que voy a utilizar un artilugio muy simple: un Arduino con pocos LEDs y el zumbador.
Originalmente quería construir un pequeño coche de RC, pero debido a los largos retrasos en la entrega de piezas no será capaz de hacer por lo menos por otra semana o así... Si tienes un par de tableros EasyDriver pudo conectar patillas de dirección en vez de LED amarillo y motor paso en lugar de LEDs rojos (ver esquema anterior). Un zumbador piezoeléctrico conectado al pin D3 reacciona en oprimir cualquier botón de su mando.
La descripción funcional completa se reduce a esto:
- Leer el estado del controlador de XBox y convertirlo en una cadena corta, pero bien definida.
En mi caso sólo envío velocidades de motor, dirección y estado de botón, por lo que el mensaje tiene este aspecto:
RRR LLL D BBBB
donde LLL es la velocidad del Motor izquierda RRR es la velocidad del Motor derecho y BBBB representa estado de botón.
D es una dirección del motor, que tiene sólo dos valores: 1 para adelante y 0 para atrás.
LLL y RRR se normalizó para zonas inactivas y escalados a valores más pequeños (menos 255)Alternativamente puede enviar datos XINPUT para arduino y procesar en el microcontrolador sí mismo.
- A continuación, enviamos este mensaje sobre UART para Arduino
- Establecen todas las velocidades de motor en valores adquiridos y compruebe el estado del botón para determinar acciones adicionales
- Enviar datos a PC (sólo envío velocidades motor de depuración)
- Datos adquiridos se transforma en alguna representación visual. Usarlo que gustes, ya sea una salida de texto en la ventana de la consola, o salida basada en GUI, como barras de progreso, gráficas, diagramas de flujo o incluso representación de OpenGL.
Ya hemos aprendido a leer los mensajes UART utilizando eventos, así que realmente no necesita preocuparse por tiempo adecuado. Código del lado del PC puede mejorarse aún más con cosas tan frescos, como multi-threading y asincrónica de comunicación, pero que no se haciendo hoy en día.
Por lo tanto, vamos a empezar con Arduino.
Hay un boceto simple de nuestro coche RC. Nada especial, sólo establecer velocidades de motor dependiendo de la posición del Stick.
sqrt(LX*LX+ly*ly) establece la magnitud de la velocidad del motor
LY sign(-or +) controla la dirección del movimiento (hacia adelante / hacia atrás).
Basado en el valor de LX establecemos la diferencia entre la velocidad del motor izquierdo y derecho. Si LX es positivo, entonces la izquierda motor es valor de velocidad actual y a la derecha motor uses(128-LX). Si LX es negativo, asignamos valores a la manera opuesta.
En el lado de la PC he creado una pequeña clase, llamada XBoxUart, que combina todas las cosas que hemos aprendido anteriormente en un solo programa.
Por favor, utilice enlaces de abajo para descargar el código fuente para el lado de la PC y Arduino.
En primer lugar, subir el sketch de arduino. Puede probar si funciona abriendo a un Monitor serie a 115200 bod y envío de datos manualmente. Mensaje por ejemplo "100 100 1 0" es un equivalente de 100 pasos hacia adelantados (motores izquierdos y derecho) sin pulsar los botones de movimiento. En respuesta debe obtener cadenas, que se muestra en la imagen superior.
Nota: No olvide cambiar el nombre del puerto COM a lo que el CDC de Arduino. Si tienes un módulo de HC-05, puede conectar directamente a los pines de Arduino RX y TX, si quieres probarlo sin necesidad de cables.
Ahora puede compilar el código de C++ en Visual Studio, iniciar su controlador XBox, ejecutar el programa en tu PC y ver cómo LEDs (o motores) cambian su comportamiento con el movimiento del Stick! Pulsando cualquier botón se activará el zumbador. La salida en la ventana de la consola será similar a lo que se ve en la última captura de pantalla.