viernes, 10 de noviembre de 2017

XboxRC24 Transmitter Un mando Radio Control con corazón Arduino (Parte 2)

Buenas Ardublogeros!!!

La primera versión del software ya esta lista así que en esta entrada voy a explicar el código ya que esta vez he optado por estructurar el software por pestañas como vimos en la entrada anterior: Ejemplos Arduino: Trabajando con pestañas en el Sketch.

Es algo que ya había visto en algún proyecto y no le había hecho mucho caso, pero en programas donde hay muchas lineas y funciones se ha convertido en algo fundamental para poder organizar el programa.

Otra de las ventajas es que podemos reutilizar el código para otros proyectos solo importando el *.ino y añadiéndolo al proyecto.

XboxRC24 Transmitter esta estructurado en 8 pestañas y son las siguientes:


  1. Transmisor_XboxRC.ino
  2. Calibracion.ino
  3. Caracteres.ino
  4. Comunicacion.ino
  5. LCD.ino
  6. Memoria.ino
  7. Menu.ino
  8. Modo_tanque.ino

Transmisor_XboxRC.ino :

En este archivo se encuentra los #include de las librerias, las variables generales, el Setup() y el loop principal. Es el archivo principal del programa.

Calibracion.ino:

Calibración es el apartado encargado de establecer los máximos y mínimos de los joysticks y gatillos.

Guardaremos los datos en la memoria EEPROM con la instrucción EEPROM.update()

Caracteres.ino:

Como la memoria del LCD solo nos permite tener 8 caracteres personalizados y para este proyecto quería tener algunos más, he creado esta pestaña con los caracteres predefinidos que se cargaran antes de entrar a la función a la que estén asignados.

Creamos los caracteres con la instrucción lcd.createChar() de la librería LiquidCrystal_I2C.h

Comunicacion.ino:

Esta es la pestaña mas importante, es la encargada de enviar y recibir los datos.
las instrucciones radio.write() y radio.read() de la librería RF24.h

radio.write() envía un array de 12 datos, los 6 analógicos y los 6 botones.
radio.read() recibe 5 datos que aun están por definir pero que incluirán voltaje, temperatura, etc...

LCD.ino:

El mando cuenta con una pantalla LCD 16x2 con un módulo de control i2C y esta pestaña como su nombre indica muestra en el LCD los datos enviados y recibidos, las posiciones de los joysticks, estado de la transmisión de los datos, etc...

Memoria.ino:

Memoria se encarga de cargar y borrar los datos de la memoria EEPROM. Las instrucciones que utiliza son:

EEPROM.read() un bucle for leerá los bancos de memoria y los cargara en el array varJoyMin y varJoyTop.
EEPROM.write() con un bucle for pondremos a 0 los bancos de memoria.

Menu.ino:

Los diferentes menús están en esta pestaña por el momento son dos:
  • void menu()  Aquí tenemos los diferentes opciones que podemos controlar. Lo seleccionaremos con "switch case" y apuntaran a las pestañas donde estarán predefinidos los diferentes vehículos.
  • void menuCal() Con este menu nos movemos entre la configuración de las diferentes entradas analógicas y a punta a las funciones almacenadas en la pestaña "Calibracion.ino".

Modo_tanque.ino:

Esta pestaña es para conducir un vehículo con tracción de oruga. Este lo controlaremos mediante el gatillo derecho para acelerar y el joystick izquierdo para las diferentes direcciones. También tenemos configurado el botón A para encender y apagar luces u otro dispositivo.

XboxRC24 botones predefinidos para el modo tanque
XboxRC24 botones predefinidos para el modo tanque


Esta versión esta aún en desarrollo así que puede que tenga algunos bugs, pero a la misma vez que iré añadiendo vehículos, también iré puliendo el código ;)
 
Descargar Transmisor XboxRC24 desde GitHub

También te puede interesar el código para el receptor:

XboxRC24 Receptor Coche V0.3 desde GitHub

   **V.05**
     Añadido el modo coche
     Añadido Debug.ino para la visualización en el monitor serial
     --Datos enviados/recibidos.
     --Estado de la memoria: valores mínimos y máximos.
     --Mejora en la función Calibración

Espero que os guste y que os sea de utilidad tanto el programa en si como la parte de código que podáis utilizar para realizar vuestros proyectos, Saludos!!!

No hay comentarios :

Publicar un comentario