Re: Software Captacion Datos (multi-Simuladores) + Arduino
Publicado: 29 Abr 2017 21:30
Hola chicos.
Por fin encontré lo que queria.
Después de analizar Simhub(por sugerencia de Vojvoda), SimDash de Symprojects, X-sim (por sujerencia de Psarias, de 900grados.es) no me convencia nada. Todo andaba enfocado a arduino, no se explica de donde salen las cosas, que se envia por el puerto serie (hay que ir buceando en los códigos de arduino), y con la premisa de hacer todo en código abierto, encontré en un foro la referencia a un trabajo de ArduinoRacingDash
El código en cuestión es
https://github.com/WarriorOfAvalon/ArduinoRacingDash
Lo primero que pensé era en usar la iRacingSdkWrapper.dll en mi entorno de programación en QT y tras pasar unas horas buscando y no tenerlo claro no me ha quedado mas remedio que aceptar usar C#.
Hay un pdf que explica bien el funcionamiento de la dll, e incluso he llegado a encontrar una versión en python que tampoco domino.
Me he instalado el Visual Studio 2017, pero me petaban los programas descargados, asi que he instalado el Visual Studio 2013 y voila, ya tengo un código en C# que saca los datos del juego y los puede enviar a mi pantalla.
La primera curiosidad que he visto es que el código espera una placa arduino, como la mia no es, menos mal que he visto el fuente y lo cambiaré para que use lo que yo quiera.
for (int i = 0; i < cbo.Items.Count; i++)
{
if (cbo.Items.ToString().Contains("Arduino"))
{
String port = Regex.Match(cbo.Items.ToString(), @"\(([^)]*)\)").Groups[1].Value;
console("Found Arduino On Port: " + port);
startMethod(port);
for (int j = 0; j < SerialPort.GetPortNames().Length; j++)
{
if (SerialPort.GetPortNames()[j].Equals(port))
startPort = j;
}
break;
}
}
Por otro lado tengo control total sobre que se envía a mi placa y en que posiciones.
public byte[] compile(Boolean spdUnit, int intensity){
int iSpeed = spdUnit ? Convert.ToInt16(Speed * 2.23693629) : Convert.ToInt16(Speed * (2.23693629 * 1.609344));
int iShift = Convert.ToInt16(Math.Round((Shift * 100 * 16) / 100));
serialdata[0] = 255;
serialdata[1] = Convert.ToByte((DeltaNeg << 7) | (intensity << 4) | 0);
serialdata[2] = Convert.ToByte(Gear + 1);
serialdata[3] = Convert.ToByte((iSpeed >> & 0x00FF);
serialdata[4] = Convert.ToByte(iSpeed & 0x00FF);
serialdata[5] = Convert.ToByte((RPM >> & 0x00FF);
serialdata[6] = Convert.ToByte(RPM & 0x00FF);
serialdata[7] = Convert.ToByte((Fuel >> & 0x00FF);
serialdata[8] = Convert.ToByte(Fuel & 0x00FF);
serialdata[9] = Convert.ToByte(iShift);
serialdata[10] = Engine;
serialdata[11] = Convert.ToByte(Lap);
serialdata[12] = 0;
serialdata[13] = Convert.ToByte((Delta >> & 0x00FF);
serialdata[14] = Convert.ToByte(Delta & 0x00FF);
serialdata[15] = Convert.ToByte(Mins);
return serialdata;
Espero tenerlo listo este fin de semana para el Iracing el leer los datos y mandarlos a mi pantalla.
Para los botones y rotarys he pensado en un software que los mapee como un jostick y asignarlos dentro del juego, pero eso es la segunda parte.
En cuanto tenga imágenes lo pongo, y si alguien se anima crearé un repositorio en Github (nunca lo he usado, supongo se podrá) para que pueda colaborar, y sino cuando lo termine lo colgaré de todos modos con todos los fuentes y referencias a los trabajos de donde he partido.
Por fin encontré lo que queria.
Después de analizar Simhub(por sugerencia de Vojvoda), SimDash de Symprojects, X-sim (por sujerencia de Psarias, de 900grados.es) no me convencia nada. Todo andaba enfocado a arduino, no se explica de donde salen las cosas, que se envia por el puerto serie (hay que ir buceando en los códigos de arduino), y con la premisa de hacer todo en código abierto, encontré en un foro la referencia a un trabajo de ArduinoRacingDash
El código en cuestión es
https://github.com/WarriorOfAvalon/ArduinoRacingDash
Lo primero que pensé era en usar la iRacingSdkWrapper.dll en mi entorno de programación en QT y tras pasar unas horas buscando y no tenerlo claro no me ha quedado mas remedio que aceptar usar C#.
Hay un pdf que explica bien el funcionamiento de la dll, e incluso he llegado a encontrar una versión en python que tampoco domino.
Me he instalado el Visual Studio 2017, pero me petaban los programas descargados, asi que he instalado el Visual Studio 2013 y voila, ya tengo un código en C# que saca los datos del juego y los puede enviar a mi pantalla.
La primera curiosidad que he visto es que el código espera una placa arduino, como la mia no es, menos mal que he visto el fuente y lo cambiaré para que use lo que yo quiera.
for (int i = 0; i < cbo.Items.Count; i++)
{
if (cbo.Items.ToString().Contains("Arduino"))
{
String port = Regex.Match(cbo.Items.ToString(), @"\(([^)]*)\)").Groups[1].Value;
console("Found Arduino On Port: " + port);
startMethod(port);
for (int j = 0; j < SerialPort.GetPortNames().Length; j++)
{
if (SerialPort.GetPortNames()[j].Equals(port))
startPort = j;
}
break;
}
}
Por otro lado tengo control total sobre que se envía a mi placa y en que posiciones.
public byte[] compile(Boolean spdUnit, int intensity){
int iSpeed = spdUnit ? Convert.ToInt16(Speed * 2.23693629) : Convert.ToInt16(Speed * (2.23693629 * 1.609344));
int iShift = Convert.ToInt16(Math.Round((Shift * 100 * 16) / 100));
serialdata[0] = 255;
serialdata[1] = Convert.ToByte((DeltaNeg << 7) | (intensity << 4) | 0);
serialdata[2] = Convert.ToByte(Gear + 1);
serialdata[3] = Convert.ToByte((iSpeed >> & 0x00FF);
serialdata[4] = Convert.ToByte(iSpeed & 0x00FF);
serialdata[5] = Convert.ToByte((RPM >> & 0x00FF);
serialdata[6] = Convert.ToByte(RPM & 0x00FF);
serialdata[7] = Convert.ToByte((Fuel >> & 0x00FF);
serialdata[8] = Convert.ToByte(Fuel & 0x00FF);
serialdata[9] = Convert.ToByte(iShift);
serialdata[10] = Engine;
serialdata[11] = Convert.ToByte(Lap);
serialdata[12] = 0;
serialdata[13] = Convert.ToByte((Delta >> & 0x00FF);
serialdata[14] = Convert.ToByte(Delta & 0x00FF);
serialdata[15] = Convert.ToByte(Mins);
return serialdata;
Espero tenerlo listo este fin de semana para el Iracing el leer los datos y mandarlos a mi pantalla.
Para los botones y rotarys he pensado en un software que los mapee como un jostick y asignarlos dentro del juego, pero eso es la segunda parte.
En cuanto tenga imágenes lo pongo, y si alguien se anima crearé un repositorio en Github (nunca lo he usado, supongo se podrá) para que pueda colaborar, y sino cuando lo termine lo colgaré de todos modos con todos los fuentes y referencias a los trabajos de donde he partido.