• Foros
  • Inicio
  • Biblio
  • Vuelos
  • Buscar
  • Buscar
  • Entrar
  • General
  • Presentaciones
  • Academia
  • Reactores
  • Helicópteros
  • Históricos
  • Av Comercial
  • Espacio
  • Videojuegos
  • Hardware
Hardware

Conexion de displays en DCS con DCS-Bios y Arduino

  • 1
  • 2
  • Next
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas
Bueno pues tras unos cuantos dias peleandome con librerias DCS Bios y Ledcontrol puedo decir que a pesar de no tener ni idea de programacion (copiando codigo de otros y modificandolo) he logrado conectar un panel de 7 segmentos a DCS.

Que que es un 7-segment panel y para que vale? mejor verlo en funcionamiento


Como veis podemos exportar la frecuencia de radios de navegacion y comunicaciones a paneles externos.

Si estais pensando en exportar modos del UFC del F18 y otros aparatos me temo que no sirve pues esos envian letras no solo numeros y la libreria LedControl( y el propio panel) solo puede representar numeros y unas pocas letras (a,b,c,d,e,f,h,l,p) para hacer eso necesitariais otro tipo de panel (y de libreria claro)

Bueno empecemos...

Lista de la compra

DCS Bios Hub
La ultima version de DCS-Bios, ahora trae un instalador lo ejecutamos y aparecera en la barra de procesos, luego con el boton derecho pulsamos en "open web interface" y nos abrira una ventana en el navegador desde donde podemos controlarlo.

Libreria DCS Bios para añadirla al IDE de Arduino (el interfaz grafico con el que programamos la placa)

Libreria LedControl que sera la que maneje nuestro panel.

7 segment panel con chip MAX7219
Debe de llevar ese chip para que la libreria lo controle, los hay de varios tamaños y colores pero para radios debe de tener por lo menos 6 digitos (5 digitos frecuencias + punto decimal)

Una placa Arduino o clon (una Arduino Uno esta bien para empezar) y el software de Arduino


Una vez instalado el soft y drivers de Arduino abrimos un nuevo proyecto.
Antes de nada tenemos que incluir las librerias necesarias para que nuestra placa Arduino pueda controlar DCS-Bios y el panel de 7 segmentos.

Vamos a "Programa/Añadir libreria .zip" y añadimos las librerias "Dcs Bios" y "Ledcontrol" que descargamos antes.Una vez acabado deberian de aparecer en nuestro listado de librerias como aparece aqui...
Image

Ahora abrimos DCS-Bios Hub (recordad arranca como un proceso y hay que abrir la interfaz web)
Vamos a la seccion "plugins"
Image
Esta es mi seccion de plugins, en ellas se ven los aparatos que DCS Bios esta listo para manejar.En vuestro caso estara vacia, no hemos añadido ningun modelo aun.
Para hacerlo pinchamos en el enlace que pone "Open the plugin catalog" , lo vemos vacio porque tenemos que desmarcar la opcion "only show recommended plugins (0)", ahora si aparecen un monton de modulos!

Al seleccionar un modulo se añade a DCS-bios, entonces podemos ir a "Control Reference" y lo veremos alli.Al seleccionar un aparato en esta seccion se abre un menu con los diversos sistemas que tiene como radios,paneles de armamento etc... y dentro de ellos veremos el codigo para controlar cada boton, switch y luz de cabina.

Tambien hay un codigo "generico" para exportar informacion a pantallas de diverso tipo.
Como hay un monton de paneles distintos (7 segmentos, 18x2 caracteres, oled...) los creadores de DCS-Bios han decidido que este envie la informacion de radios y paneles en un "streaming" de datos y que las librerias de cada tipo de panel se las apañen para mostrarlo.

----CONTINUARA---


p.d.
Dejo aqui el codigo para exportar la informacion del panel de radio NAV del Huey por si quereis ir echandole un vistazo.
// Incluimos librerias DcsBios y LedControl para 7-segment panel con chip Max7219

#define DCSBIOS_IRQ_SERIAL
#include <LedControl.h>
#include <DcsBios.h>

/* Creamos funcion para configurar un 7-segment panel. Pines DIN(12) CLK(11) CS(10) (1)panel */
LedControl lc=LedControl(12,11,10,1);

//Funcion Huey VHF Nav Freq
void onVhfnavFreqChange(char* newValue) {
/* your code here */
lc.setChar(0,7,'-',false);
lc.setChar(0,6,newValue[0],false);
lc.setChar(0,5,newValue[1],false);
lc.setChar(0,4,newValue[2],false);
lc.setChar(0,3,newValue[3],false);
lc.setChar(0,2,newValue[4],false);
lc.setChar(0,1,newValue[5],false);
lc.setChar(0,0,'-',false);

}
DcsBios::StringBuffer<6> vhfnavFreqBuffer(0x14f0, onVhfnavFreqChange);

void setup() {
DcsBios::setup();

// put your setup code here, to run once:
// MAX7219 INITIALISATION
lc.shutdown(0,false); //turn on the display
lc.setIntensity(0,8);//set the brightness
lc.clearDisplay(0); //clear the display

// codigo boot personalizado antes de conexion
lc.setChar(0,7,'-',false);
lc.setChar(0,6,'-',false);
lc.setChar(0,5,'E',false);
lc.setChar(0,4,'5',false);
lc.setChar(0,3,'A',false);
lc.setChar(0,2,'-',false);
lc.setChar(0,1,'-',false);
lc.setChar(0,0,'-',false);

}

void loop() {
// put your main code here, to run repeatedly:
DcsBios::loop();
}
Last edited by Angel hace 1 semana, edited 2 times in total.
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas
Bueno, pues continuamos...

Tenemos que conectar el panel a la placa Arduino.
El panel tiene cinco pines, los de alimentacion ( VCC a 5v y GND a GND) y los de comunicacion (DIN,CS y CLK) a los pines digitales , yo he usado los pines DIN(12) CLK(11) CS(10) y asi va en el codigo pero podeis cambiarlos por los que querais.

Image

Ya tenemos el programa de Arduino instalado y añadidas las librerias DcsBios y LedControl.
Tambien hemos instalado el programa DcsBios hub y añadido el plugin del aparato que queremos controlar.

En mi caso he configurado la radio de navegacion del Huey (VHF NAV) pero el proceso para cualquier otro aparato es muy parecido.

Abrimos el interfaz web de DcsBios y vamos al enlace de Control Reference , seleccionamos el aparato que vamos a configurar, en mi caso el UH-1H y vemos una lista de sus sistemas.
Image

Vamos a VHF NAV Radio y nos sale una lista con todos los interruptores, mando de volumen que tiene.Arriba del todo vemos la seccion VHF NAV Frequency
Image
Ese es el codigo para exportar la informacion de la frecuencia de navegacion a nuestro panel externo.

El codigo que debemos pasar al Arduino lo he puesto en el post anterior, aqui tratare de explicar un poco como va (o lo que yo entiendo que no soy programador ;) ) para que podais modificarlo.Si hay alguien con conocimientos de C++ o cualquier otro lenguaje que lo sepa explicar mejor que me corrija.

Abrimos el IDE de Arduino y vamos pegando codigo...
// Incluimos librerias DcsBios y LedControl para 7-segment panel con chip Max7219
#define DCSBIOS_IRQ_SERIAL
#include <LedControl.h>
#include <DcsBios.h>
Con esto creamos una conexion serial que comunicara nuestra Arduino con DCS.
Incluimos en el codigo las librerias de DcsBios y LedControl.Esto permitira que Arduino se comunique con DCS y nuestro panel.
/* Creamos funcion para configurar un 7-segment panel. Pines DIN(12) CLK(11) CS(10) (1)panel */
LedControl lc=LedControl(12,11,10,1);
Este codigo de la libreria LedControl configura nuestra pantalla, puedes usar otros pines pero recuerda cambiarlos en el codigo y conectarlos correctamente.El ultimo digito indica cuantos paneles en serie tenemos conectados, en este caso solo es uno.
//Funcion Huey VHF Nav Freq
void onVhfnavFreqChange(char* newValue) {
/* your code here */
lc.setChar(0,7,'-',false);
lc.setChar(0,6,newValue[0],false);
lc.setChar(0,5,newValue[1],false);
lc.setChar(0,4,newValue[2],false);
lc.setChar(0,3,newValue[3],false);
lc.setChar(0,2,newValue[4],false);
lc.setChar(0,1,newValue[5],false);
lc.setChar(0,0,'-',false);

}
DcsBios::StringBuffer<6> vhfnavFreqBuffer(0x14f0, onVhfnavFreqChange);
Aqui vemos el codigo que hemos copiado de la seccion de la Radio Nav del control reference.Dentro de el hemos añadido codigo del LedControl que controlara en que digito se muestra cada valor de la radio.

Mi panel es de 8 digitos y se empieza a contar por la derecha.
El (0,0) Fila 0 columna 0 le he puesto un guion "-" porque no se usa (tambien podria ser un espacio en blanco).
Del (0,1) al (0,6) esas variables mostraran los cinco digitos de la radio y el punto decimal.
El (0,7) de nuevo no se usa asi que le he puesto que muestre un guion.
void setup() {
DcsBios::setup();
Lo que ponemos dentro de esta funcion de Arduino se ejecuta una sola vez al arrancar.Como DcsBios y la configuracion de arranque de la pantalla.
// MAX7219 INITIALISATION
lc.shutdown(0,false); //turn on the display
lc.setIntensity(0,8);//set the brightness
lc.clearDisplay(0); //clear the display
Aqui encendemos, configuramos el brillo y dejamos la pantalla sin texto.
// codigo boot personalizado antes de conexion
lc.setChar(0,7,'-',false);
lc.setChar(0,6,'-',false);
lc.setChar(0,5,'E',false);
lc.setChar(0,4,'5',false);
lc.setChar(0,3,'A',false);
lc.setChar(0,2,'-',false);
lc.setChar(0,1,'-',false);
lc.setChar(0,0,'-',false);
}
Esto es opcional, sirve para que la pantalla muestre un mensaje (con las pocas letras que disponemos) antes de que se conecte a DcsBios y muestre los datos de la radio :wink:
void loop() {
// put your main code here, to run repeatedly:
DcsBios::loop();
}
De nuevo esta es una funcion de Arduino, hace un "loop" o sea repite continuamente un ciclo, en este caso ejecuta continuamente DcsBios para leer cualquier dato de entrada o salida que enviemos.
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas
Bueno pues despues de haber terminado todo este rollo queremos ver como funciona.
Pues muy facil copiamos ese codigo (esta en el primer post) en Arduino.
Conectamos la placa al ordenador, ahora vamos a "Herramientas" y configuramos en "Placa" la que tenemos (la mia es una Arduino Uno) y en "Puerto" el COM a la que esta conectada (podeis verlo en el administrador de dispositivos)
Image

Ahora pulsamos en el icono dela flecha derecha para subir el codigo a la placa.Si no hay ningun error eso es todo (podeis comprobar el codigo con el boton de la izquierda)

Lo unico que nos queda ahora es conectar DcsBios al puerto de Arduino,para ello solo hay que ir al interfaz de este y en la seccion "Dashboard" ya vemos el boton para conectar.
Image

Ahora arrancamos DCS y cuando estemos en nuestro querido Huey veremos como nuestra pantalla muestra la frecuencia de la VHF NAV.

Si queremos usarlo en otro aparato deberemos copiar el codigo de este en "Control reference" y modificar el codigo de Arduino.

Y colorin ,colorado este tutorial se ha...
Image
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas

Conexion de displays en DCS con DCS-Bios y Arduino

hace 2 semanas
Bueno otro apunte.Supongamos que ahora queremos mostrar la Radio VHF Comm en vez de la de navegacion, solo tenemos que hacer un par de cambios...

Esta es la parte donde configuramos los datos que exportamos.
//Funcion Huey VHF Nav Freq
void onVhfnavFreqChange(char* newValue) {
/* your code here */
lc.setChar(0,7,'-',false);
lc.setChar(0,6,newValue[0],false);
lc.setChar(0,5,newValue[1],false);
lc.setChar(0,4,newValue[2],false);
lc.setChar(0,3,newValue[3],false);
lc.setChar(0,2,newValue[4],false);
lc.setChar(0,1,newValue[5],false);
lc.setChar(0,0,'-',false);

}
DcsBios::StringBuffer<6> vhfnavFreqBuffer(0x14f0, onVhfnavFreqChange);
Solo tenemos que ir a la seccion del UH-1H de "control reference" y sustituir esas dos lineas que he puesto en negrita.
//Funcion UH-1H VHF Comm
void onVhfcommFreqChange(char* newValue) {
//Dispositivo.setChar (modulo, display, caracter, punto);
lc.setChar(0,7,newValue[0],false);
lc.setChar(0,6,newValue[1],false);
lc.setChar(0,5,newValue[2],false);
lc.setChar(0,4,newValue[3],false);
lc.setChar(0,3,newValue[4],false);
lc.setChar(0,2,newValue[5],false);
lc.setChar(0,1,newValue[6],false);
lc.setChar(0,0,' ',false);
}
DcsBios::StringBuffer<7> vhfcommFreqBuffer(0x14d4, onVhfcommFreqChange);
Si os fijais tambien he cambiado la posicion (0,7) porque la frecuencias de Comm usan 6 digitos y la de navegacion solo 5.
Y eso es todo!
Image
Last edited by Angel hace 1 semana, edited 2 times in total.
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana
Venga una mas que ya le tenemos pillado el truco!

Vamos a por la UHF Comm Radio, (la grande debajo de la VHF comm)
Vamos a DCS-Bios Hub, control reference del UH1-H y seccion UHF Radio y vemos esto...
Image

Pues de nuevo solo tenemos que copiar esas dos lineas y sustituirlas en el codigo...
//Funcion UH-1H UHF Comm
void onUhfFreqChange(char* newValue) {
//Dispositivo.setChar (modulo, display, caracter, punto);
lc.setChar(0,7,newValue[0],false);
lc.setChar(0,6,newValue[1],false);
lc.setChar(0,5,newValue[2],false);
lc.setChar(0,4,newValue[3],false);
lc.setChar(0,3,newValue[4],false);
lc.setChar(0,2,newValue[5],false);
lc.setChar(0,1,' ',false);
lc.setChar(0,0,' ',false);
}
DcsBios::StringBuffer<6> uhfFreqBuffer(0x14e2, onUhfFreqChange);
De nuevo un pequeño retoque en los digitos de la pantalla, vuelven a ser 5 asi que los dos ultimos mostraran un espacio en blanco pues no se usan (' ')

Como vemos es facil, abriendo y cerrando las dos lineas del codigo DCSBios, que copiamos del control reference y en medio el codigo de la libreria del LedControl que permite controlar cada digito del panel.
Image
  • Citar
User avatar
Dimoni
Cadete

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana
Una chulada Angel, vaya currada te estas pegando !!!

S!
Fem por o fugim ?
  • Citar
User avatar
Durin
Cadete

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana
muy chulos estos post angel....sigue con ellos que los leo con avidez
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana
Gracias chicos! hasta ahora he logrado que funcionen las radios del Huey.Imagino que todo lo que sea una frecuencia en un aparato deberia ser igual.

No obstante hay casos como la radio FM del UH-1H tiene 4 indicadores mecanicos para las frecuencias, cada uno de ellos tiene su propio codigo pero solo los externos envian su cifra en "streaming.¿? Tambien hay radios que indican numero de memoria y frecuencia que deben ir en dos funciones distintas tambien.

En fin por lo menos para empezar ya sabemos como va lo del codigo este.Para la semana me vienen estas pantallas que podrían usarse para los UFC del F-18 o Harrier.

Image

Lo suyo seria usar 13-segment displays pero parece que no son faciles de encontrar y no se si hay libreria para Arduino.

Image
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana

Conexion de displays en DCS con DCS-Bios y Arduino

hace 1 semana
Bueno pues continuamos con mas avances.Hoy he logrado conectar un panel LCD 16x2 a DCS!

Que es un panel LCD 16x2?
Pues la tipica y vieja pantalla de cristal liquido monocromo que todos conocemos.
Image
Como estas
Importante que tengan esa placa negra (conector I2C), mejor ya soldada sino quereis hacer soldaduras de precision.Ese conector sirve para controlar la pantalla con solo 2 pines de nuestro Arduino ( mas 2 de alimentacion)

La conexion es muy sencilla, solo tiene 4 pines.
SCL al pin A5 (analogico) de nuestro Arduino
SDA al pin A4
Vcc a 5v
GND a GND (tierra)
Image
Ahora necesitamos añadir otra libreria a nuestro Arduino para que controle la pantalla LCD I2C, yo he usado LiquidCrystal_I2C-master

Bueno, pues ya esta listo.Ahora solo nos hace falta el codigo ,aqui tengo un ejemplo que muestra las frecuencias del Huey de NAV-COMM en la fila superior y VHF-COMM en la inferior.

Ahi va el codigo...
#define DCSBIOS_IRQ_SERIAL
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DcsBios.h>

//Direccin hexadecimal I2c, numero de caracteres y filas
LiquidCrystal_I2C lcd(0x27,16,2);

// DCS Bios codigo
void onVhfnavFreqChange(char* newValue) {

// LCD 16x2 codigo LINEA 1 NAV Radio
lcd.setCursor(0, 0);

lcd.print("NAV-COMM ");
lcd.write(newValue[0]);
lcd.write(newValue[1]);
lcd.write(newValue[2]);
lcd.write(newValue[3]);
lcd.write(newValue[4]);
lcd.write(newValue[5]);

}
DcsBios::StringBuffer<6> vhfnavFreqBuffer(0x14f0, onVhfnavFreqChange);

// LCD 16x2 codigo LINEA 2 COMM Radio

void onVhfcommFreqChange(char* newValue) {

lcd.setCursor(0, 1);

lcd.print("VHF-COMM ");
lcd.write(newValue[0]);
lcd.write(newValue[1]);
lcd.write(newValue[2]);
lcd.write(newValue[3]);
lcd.write(newValue[4]);
lcd.write(newValue[5]);
lcd.write(newValue[6]);


}

DcsBios::StringBuffer<7> vhfcommFreqBuffer(0x14d4, onVhfcommFreqChange);
// setup y loop

void setup() {
lcd.begin();
lcd.backlight();
DcsBios::setup();
}

void loop() {
// put your main code here, to run repeatedly:
DcsBios::loop();
lcd.setBacklight(255);
}


Arrancamos DCS Bios Hub y conectamos elpuerto COM y al arrancar nuestro querido Huey ya deberiamos ve esto...
Image
Aunque ya tiene comentarios vamos a explicarlo un poco mas.

La primera seccion #define e #include abren una conexion serial a nuestro arduino e incluyen esas 3 librerias que necesitamos.

En LiquidCrystal_I2C definimos la direccion hexadecimal del conector I2C (0x27 funciono para mi) y las lineas y columnas que tiene la pantalla (16,2)

void onVhfnavFreqChange(char* newValue) {
Esto es codigo de DCS-Bios, sacado del control reference del UH-1H (seccion VHF-NAVRadio)

Ahora va el codigo de la libreria de la pantalla LCD
// LCD 16x2 codigo LINEA 1 NAV Radio
lcd.setCursor(0, 0);

lcd.print("NAV-COMM ");
lcd.write(newValue[0]);
lcd.write(newValue[1]);
lcd.write(newValue[2]);
lcd.write(newValue[3]);
lcd.write(newValue[4]);
lcd.write(newValue[5]);
}

Seleccionamos la posicion (0,0) primera columna y linea
"Imprimimos" NAV-COMM para saber que frecuencia estamos mostrando
Luego cada linea muestra un valor de la frecuencia de radio

DcsBios::StringBuffer<6> vhfnavFreqBuffer(0x14f0, onVhfnavFreqChange);
Cerramos con el codigo DCS-Bios de nuevo.

En la siguiente seccion hago lo mismo esta vez con la segunda linea (0,1) y con el codigo de control reference de la VHF-COMM

Finalizamos con las secciones de Setup y Loop que cnfiguran la pantalla y hacen que se ejecute el codigo continuamente.

P.D.
Problemas comunes...

Fijarse bien en la conexion de los cables a sus respectivos pines.Si la pantalla brilla es que recibe alimentacion si no muestra nada revisar SCL y SDA

La direccion del conector de esta pantalla es 0x27 a veces aparecen otras distintas en otros tipos de pantallas y conectores.Hay porahi un codigo "Scanner I2C"para ver cual esta en uso (no me hizo falta usarlo)

En alguna libreria se usa la funcion lcd.init(); para iniciar la pantalla ,en esta la correcta es lcd.begin();
  • Citar
User avatar
Angel
Invitado

Conexion de displays en DCS con DCS-Bios y Arduino

hace 6 días

Conexion de displays en DCS con DCS-Bios y Arduino

hace 6 días
Ademas de con el Huey he hecho alguna prueba con el F-14 con ambos paneles pero sin buenos resultados, parece que en el codigo del Tomcat (y por mas partes) hay "bugs" y clasificaciones erroneas.

Probando de nuevo con el panel LCD 16x2 he copiado el codigo del control reference, seccion "PILOT VHF/UHF ARC-182 Radio Remote Display" que se supone es la frecuencia de la radio del piloto y no funciona.Sin embargo al cambiarme al puesto del RIO he visto que esta si que la muestra correctamente!

Image
El codigo del ARN-182 del piloto muestra los datos en la radio del RIO, en otros codigos hay errores en los tipos de datos (char*, Int*...etc)
  • Citar
Hardware
  • 1
  • 2
  • Next
Nadie por aquí

diseño: Luis Glez 'Orleans'

 

 

cron