Ayuda Arduino Y Display TM1638
3 participantes
SIM-control :: General RBR :: Taller
Página 1 de 1.
Ayuda Arduino Y Display TM1638
Hola , os comento tengo una placa arduino conectada a un display TM1638 mas usado en rFactor y asseto por la facilidad del software , y queria conectarla a RBR en el mod Checo , mi duda que software tengo q usar ? ¿Alguno lo usa?
Por lo qu vi en videos RBR solo sale info de Velocidad revoluciones, marchas y temperatura.
En dos años que tengo el display nunca fui quien de hacerlo funcionar en RBR
SI alguien me pudiera echar una mano seria de agradecer , incluso podiamos hacer un tutorial para aquellos interesados , que por menos de 15 euros tenemos un display sencillo para nuestros simuladoress.
Gracias de antemano y ojala quitemos algo en limpio de esto
Por lo qu vi en videos RBR solo sale info de Velocidad revoluciones, marchas y temperatura.
En dos años que tengo el display nunca fui quien de hacerlo funcionar en RBR
SI alguien me pudiera echar una mano seria de agradecer , incluso podiamos hacer un tutorial para aquellos interesados , que por menos de 15 euros tenemos un display sencillo para nuestros simuladoress.
Gracias de antemano y ojala quitemos algo en limpio de esto
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
Yo he empezado a trastear con esto hace muy poco y tengo bajado el código que hay colgado en x-sim para usar con su software.
De momento a mi me funciona aunque el código que yo uso le pasa directamente el valor máximo de rpm a Arduino por lo que es fijo y hay que cambiarlo con cada coche para que los LED se enciendan bien. Marcha y velocidad las muestra correctamente. No he probado otros valores.
En 900grados hay un chaval que hizo un código que muestra también las rpm de forma numérica o la gasolina pero a mi no me funciona su configuración de x-sim, da error de escritura en el puerto COM de la Arduino. No me he pegado mucho con él, he puesto un par de mensajes en el foro pero o bien entran poco por allí o bien pasan de contestar porque nadie ha dicho ni media palabra.
Lo que hace falta es el software de x-sim, que se usa para extraer datos de juegos o periféricos y trasladarlos a cockpits en movimiento de forma que se ajusten a lo que pasa en el juego.
También se puede usar para esto ya que configuras qué enviar a través del puerto serie y luego Arduino lo lee y lo muestra en pantalla.
Con ese mismo software de x-sim ayer trasteando también he sido capaz de que pCARS mostrase los datos. No así Asseto, rFactor 2 o Dirt Rally que son los que estuve probando
De momento a mi me funciona aunque el código que yo uso le pasa directamente el valor máximo de rpm a Arduino por lo que es fijo y hay que cambiarlo con cada coche para que los LED se enciendan bien. Marcha y velocidad las muestra correctamente. No he probado otros valores.
En 900grados hay un chaval que hizo un código que muestra también las rpm de forma numérica o la gasolina pero a mi no me funciona su configuración de x-sim, da error de escritura en el puerto COM de la Arduino. No me he pegado mucho con él, he puesto un par de mensajes en el foro pero o bien entran poco por allí o bien pasan de contestar porque nadie ha dicho ni media palabra.
Lo que hace falta es el software de x-sim, que se usa para extraer datos de juegos o periféricos y trasladarlos a cockpits en movimiento de forma que se ajusten a lo que pasa en el juego.
También se puede usar para esto ya que configuras qué enviar a través del puerto serie y luego Arduino lo lee y lo muestra en pantalla.
Con ese mismo software de x-sim ayer trasteando también he sido capaz de que pCARS mostrase los datos. No así Asseto, rFactor 2 o Dirt Rally que son los que estuve probando
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Si lo del software de x-Sim lo vi lo descargue con el codigo , lo que no logro entender es el sofware ese , se me resiste para assetto tenia un codigo y un sotware bastante simple abrias el exe y configurabas en puerto COM y via funcionando, pero creo que con la version actual se Assetto ya n sirve.
La verdad es que tengo los otro simuladores abandonados solo le dedico tiempo a RBR , si me pudieras echar una mano con el x-Sim te lo agradeceria
La verdad es que tengo los otro simuladores abandonados solo le dedico tiempo a RBR , si me pudieras echar una mano con el x-Sim te lo agradeceria
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
A mi el que lleva cada juego su programa para enviar datos no me funciona. No sé si es la versión de batrako la que tú dices. Yo ejecuto el programa pero se queda colgado, no sé si por ser de 64bits o algo. Ni idea.
x-sim no es complicado de usar, al menos para lo que nosotros queremos hacer que es rpm, velocidad y marcha.
Tienes 2 programas: extractor y converter.
En el extractor añades los juegos y se les asigna su plugin correspondiente.
En el converter creas los "ejes" que obtendrán información del juego y la enviarán al puerto serie, es decir, a la Arduino.
Luego con el sketch hecho para leer y tratar esa trama serie lo envías al TM1638.
Tienes varios hilos de donde sacar información, aunque son parecidos pero no iguales. A mi me ha funcionado el del foro de x-sim. Hoy que estoy en el trabajo he estado tocando y aprendiendo cosinas del display ya que quiero poder resetear rpm máximas para cada coche pulsando un botón de la placa.
http://900grados.es/foro/showthread.php?92-Tutorial-construye-tu-display-barato-con-Arduino-TM1638 -> este está en español pero la descarga de la configuración de x-sim no va y no parece que nadie conteste. Puede que le envíe un privado al creador a ver si dice algo.
http://www.x-sim.de/forum/viewtopic.php?f=40&t=155&sid=bc9361a774365193d2a76db1012d898c -> este es el que me ha funcionado desde el primer momento. La putada es que tiene las rpm máximas fijas y con un Evo que llega a 5500 más o menos no se encienden todos los LED.
http://batrako.blogspot.com.es/2013/01/posibilidades-del-arduino-en-simracing.html -> este puede ser el que tú dices, pero a mi no me ha funcionado en ningún momento.
https://www.xsimulator.net/community/threads/cardashx-tm1638-sketch-for-gamedash.7276/ -> este es de una página que tienen un software similar al x-sim. Me la ha dicho un chaval que consiguió hacer el reset de rpm pero hace años que dejó de usar x-sim. Lo malo es que ese soft es de pago, 19€ por 1 año de suscripción. Si logro hacer que x-sim funcione como quiero de momento no lo voy a comprar, aunque de ese hilo se pueden sacar cosas para el código de Arduino que es lo que más me interesa ahora mismo, aprender a hacer el código que quiero.
Te dejo este enlace también del que yo he aprendido varias cosas que creo que me serán útiles. Es un artículo sobre el TM1638 y su manejo desde Arduino, como por ejemplo leer qué botón pulsas y hacer algo en consecuencia: http://tronixstuff.com/2012/03/11/arduino-and-tm1638-led-display-modules/
x-sim no es complicado de usar, al menos para lo que nosotros queremos hacer que es rpm, velocidad y marcha.
Tienes 2 programas: extractor y converter.
En el extractor añades los juegos y se les asigna su plugin correspondiente.
En el converter creas los "ejes" que obtendrán información del juego y la enviarán al puerto serie, es decir, a la Arduino.
Luego con el sketch hecho para leer y tratar esa trama serie lo envías al TM1638.
Tienes varios hilos de donde sacar información, aunque son parecidos pero no iguales. A mi me ha funcionado el del foro de x-sim. Hoy que estoy en el trabajo he estado tocando y aprendiendo cosinas del display ya que quiero poder resetear rpm máximas para cada coche pulsando un botón de la placa.
http://900grados.es/foro/showthread.php?92-Tutorial-construye-tu-display-barato-con-Arduino-TM1638 -> este está en español pero la descarga de la configuración de x-sim no va y no parece que nadie conteste. Puede que le envíe un privado al creador a ver si dice algo.
http://www.x-sim.de/forum/viewtopic.php?f=40&t=155&sid=bc9361a774365193d2a76db1012d898c -> este es el que me ha funcionado desde el primer momento. La putada es que tiene las rpm máximas fijas y con un Evo que llega a 5500 más o menos no se encienden todos los LED.
http://batrako.blogspot.com.es/2013/01/posibilidades-del-arduino-en-simracing.html -> este puede ser el que tú dices, pero a mi no me ha funcionado en ningún momento.
https://www.xsimulator.net/community/threads/cardashx-tm1638-sketch-for-gamedash.7276/ -> este es de una página que tienen un software similar al x-sim. Me la ha dicho un chaval que consiguió hacer el reset de rpm pero hace años que dejó de usar x-sim. Lo malo es que ese soft es de pago, 19€ por 1 año de suscripción. Si logro hacer que x-sim funcione como quiero de momento no lo voy a comprar, aunque de ese hilo se pueden sacar cosas para el código de Arduino que es lo que más me interesa ahora mismo, aprender a hacer el código que quiero.
Te dejo este enlace también del que yo he aprendido varias cosas que creo que me serán útiles. Es un artículo sobre el TM1638 y su manejo desde Arduino, como por ejemplo leer qué botón pulsas y hacer algo en consecuencia: http://tronixstuff.com/2012/03/11/arduino-and-tm1638-led-display-modules/
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Intento seguir tus pasos pero no logro arrancar rbr con el extractor me da error 196 y n se es por el software o por una mala configuracion ....
Si el Software de assetto es ese el que utilizava pero ya no funciona en versiones mas recientes.
Si el Software de assetto es ese el que utilizava pero ya no funciona en versiones mas recientes.
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
Sólo te dice error 196, no indica qué es ese error?
En el extractor lo más conveniente es dar a autobuscar y él solo añade los juegos que encuentra y asigna el plugin correspondiente a cada uno.
Luego el resto de parámetros del perfil yo lo tengo todo en no: no tengo actuadores, no tengo joystick de entrada, etc.
Estoy haciendo un código desde 0. Primero de todo estoy intentando que con 2 botones de la placa pueda hacer reset a las rpm máximas y con otro capturar el máximo valor recogido durante un tiempo X. Así de esta forma le doy antes de salir y como el coche antes de nada se pone a fondo, espero que las recoja bien. A ver si esta noche puedo avanzar algo más.
Cualquier duda que tengas ponla por aquí a ver si entre los 2 hacemos que esto funcione bien.
En el extractor lo más conveniente es dar a autobuscar y él solo añade los juegos que encuentra y asigna el plugin correspondiente a cada uno.
Luego el resto de parámetros del perfil yo lo tengo todo en no: no tengo actuadores, no tengo joystick de entrada, etc.
Estoy haciendo un código desde 0. Primero de todo estoy intentando que con 2 botones de la placa pueda hacer reset a las rpm máximas y con otro capturar el máximo valor recogido durante un tiempo X. Así de esta forma le doy antes de salir y como el coche antes de nada se pone a fondo, espero que las recoja bien. A ver si esta noche puedo avanzar algo más.
Cualquier duda que tengas ponla por aquí a ver si entre los 2 hacemos que esto funcione bien.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Bueno, tras mucho trastear al final creo que esto más o menos funciona. Al menos en RBR va bien. En pCARS funciona un rato y luego se desconecta.
Ayer probé el Dirt Rally y no funciona, aparte de que x-sim no lo detecta de forma automática y hay que añadirlo a mano. El resto de momento no he probado.
Ahora mismo los LED se encienden más o menos a partir del 75% de las rpm máximas. He dividido dichas rpm máximas entre 50 y juego con 10 combinaciones de LED desde el primer LED verde a todos en rojo. Si se quiere ajustar a más o menos porcentaje sólo hay que cambiar el número de divisiones y la división a partir de la que se quiere mostrar la combinación deseada. Suena un poco raro pero una vez se ve en el código se entiende mejor.
Por cierto la combinación es ir encendiendo LED verde de izquierda a derecha menos los 2 últimos que se encienden en rojo, de ahí pasa a todos en rojo y luego parpadea.
Te dejo el código por si lo quieres probar. Está sin pulir ya que hay cosas que se pueden quitar y quiero ordenarlo un poco pero al menos se puede probar.
Recuerda poner los pines en el sketch de acuerdo a como tú los tengas puestos en Arduino. Deberías tener en tu sketch una línea del estilo "TM1638 module(5, 4, 3);" o "InvertedTM1638 module(5, 4, 3);". La pones como la que te funcione que esa es para mi Arduino y no tienen porqué coincidir.
El perfil para el RBR en el Extractor:
Y para que funcione directamente con el Extractor hay que añadir la Arduino en la configuración de OBD2. Con esto no hay que usar el Converter para nada:
Por último dejo un cutre-vídeo que he grabado con el móvil en un momento. Está ahí puesto con un cartón pero al menos sirve para probar si funciona jaja.
Ya me dirás qué tal te fue si lo pruebas.
Ayer probé el Dirt Rally y no funciona, aparte de que x-sim no lo detecta de forma automática y hay que añadirlo a mano. El resto de momento no he probado.
Ahora mismo los LED se encienden más o menos a partir del 75% de las rpm máximas. He dividido dichas rpm máximas entre 50 y juego con 10 combinaciones de LED desde el primer LED verde a todos en rojo. Si se quiere ajustar a más o menos porcentaje sólo hay que cambiar el número de divisiones y la división a partir de la que se quiere mostrar la combinación deseada. Suena un poco raro pero una vez se ve en el código se entiende mejor.
Por cierto la combinación es ir encendiendo LED verde de izquierda a derecha menos los 2 últimos que se encienden en rojo, de ahí pasa a todos en rojo y luego parpadea.
Te dejo el código por si lo quieres probar. Está sin pulir ya que hay cosas que se pueden quitar y quiero ordenarlo un poco pero al menos se puede probar.
Recuerda poner los pines en el sketch de acuerdo a como tú los tengas puestos en Arduino. Deberías tener en tu sketch una línea del estilo "TM1638 module(5, 4, 3);" o "InvertedTM1638 module(5, 4, 3);". La pones como la que te funcione que esa es para mi Arduino y no tienen porqué coincidir.
- Código:
// X-Sim Sample code for receiving OBD2 values from the extractor without using the converter
// OBD2 is industry standard, X-Sim will additionally expand the OBD2 PID with gear and other values
//
// Usage:
// Arduino has to be connected to a free USB port on the computer where the extractor is running
// Open the extractor and open the settings menu, there you have to select the OBD2 menu
// Add now your arduino comport to the OBD2 list.
// After closing the dialog you will see the arduino LED will be enabled which represents receiving data.
// After closing the extractor application the LED will switch off.
// Use this code to insert your own display code at the fitting positions
// Copyright 2013 Martin Wiedenbauer, X-Sim.de
//
// References:
// http://en.wikipedia.org/wiki/OBD-II_PIDs
// http://elmelectronics.com/DSheets/ELM327DS.pdf
// http://www.x-sim.de
#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM1638QYF.h>
#include <TM1640.h>
#include <TM16XX.h>
#include <TM16XXFonts.h>
// define a module on data pin 5, clock pin 4 and strobe pin 3
InvertedTM1638 module(5, 4, 3);
//définition des broches du décodeur 7 segments (vous pouvez changer
//les numéros si bon vous semble)
const int bit_A= 6;
const int bit_B= 7;
const int bit_C= 8;
const int bit_D= 9;
//Definition des Pin pour Affichage Neutral et reverse
const int bit_E= 10;
const int bit_F= 11;
const int ledPin = 13; // the number of the LED pin
//byte buttons;
unsigned int rpmmax = 7000;
unsigned int rpmlast;
int setrpm = 0;
int mode = 1;
//long previousMillis = 0; // will store last time LED was updated
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
//long interval = 40; // interval at which to blink (milliseconds)
bool extractordetected=false; //Will get updated from last positive or negative receive
int receivebuffer[20]={0}; //Receive buffer
void setup()
{
pinMode(13, OUTPUT); //Arduino UNO LED off
digitalWrite(13, LOW);
Serial.begin(9600);
//Do here stuff to init display and zero to default
pinMode(ledPin, OUTPUT);
//The pins are all outputs
pinMode(bit_A, OUTPUT);
pinMode(bit_B, OUTPUT);
pinMode(bit_C, OUTPUT);
pinMode(bit_D, OUTPUT);
pinMode(bit_E, OUTPUT);
pinMode(bit_F, OUTPUT);
//The pins are all set to low for the BCD decoder and up to neutral and reverse control
digitalWrite(bit_A, LOW);
digitalWrite(bit_B, LOW);
digitalWrite(bit_C, LOW);
digitalWrite(bit_D, LOW);
digitalWrite(bit_E, HIGH);
digitalWrite(bit_F, HIGH);
// initialize the screen:
module.clearDisplay(); //clears the display from garbage if any
module.setDisplayToString( "Fran",0,2); //prints the banner
module.setLEDs(0x8001);
delay(200);
module.setLEDs(0xc003);
delay(200);
module.setLEDs(0xe007);
delay(200);
module.setLEDs(0xf00f);
delay(200);
module.setLEDs(0xe417);
delay(200);
module.setLEDs(0xcc33);
delay(200);
module.setLEDs(0x8e71);
delay(200);
module.setLEDs(0x0ff0);
delay(200);
module.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(200);
module.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(200);
module.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(200);
module.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(200);
module.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(200);
module.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(200);
module.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(3000); //small delay 3 sec
module.clearDisplay(); //clears the 1st display
}
int HexToInt(int c)
{
if (c >= '0' && c <= '9')
{
return c - '0';
}
else if (c >= 'a' && c <= 'f')
{
return c - 'a' + 10;
}
else if (c >= 'A' && c <= 'F')
{
return c - 'A' + 10;
}
else
{
return -1; // getting here is bad: it means the character was invalid
}
}
int ParseReceiveBuffer(int commandhighbyte, int commandlowbyte, int receivelength)
{
//First character is removed of the receivebuffer string and must not be verified again
if( receivebuffer[0]=='1' && receivebuffer[2]==commandhighbyte && receivebuffer[3]==commandlowbyte )
{
//Parse 2 byte values on position 5 and 6 in the buffer string
if(receivelength==7)
{
int highresult=HexToInt(receivebuffer[5]);
int lowresult =HexToInt(receivebuffer[6]);
if(highresult==-1 || lowresult==-1){return -1;}
return ((16*highresult) + lowresult);
}
//Parse 4 byte values on position 5,6,8 and 9 in the buffer string
if(receivelength==10)
{
int tophighresult=HexToInt(receivebuffer[5]);
int toplowresult =HexToInt(receivebuffer[6]);
int highresult=HexToInt(receivebuffer[8]);
int lowresult =HexToInt(receivebuffer[9]);
if(tophighresult==-1 || toplowresult==-1 || highresult==-1 || lowresult==-1){return -1;}
return ((4096*tophighresult) + (256*toplowresult) + (16*highresult) + lowresult);
}
}
return -1; //Something is wrong with the returned OBD2 echo command byte
}
//This function will wait for the first character in receivetrigger and will parse the result
int ReceiveValueWithTimeout(int receivetrigger, int commandhighbyte, int commandlowbyte, int receivelength)
{
int arduinoserialbuffer=0;
int buffercount=-1;
for(int z=0; z < 500; z++) //500ms timeout should be enough
{
while(Serial.available())
{
if(buffercount==-1)
{
arduinoserialbuffer = Serial.read();
if(arduinoserialbuffer != receivetrigger) //Wait until the trigger is reached, ignore echo, first character is not in the buffer
{
buffercount=-1;
}
else
{
buffercount=0;
}
}
else
{
arduinoserialbuffer = Serial.read();
receivebuffer[buffercount]=arduinoserialbuffer;
buffercount++;
if(buffercount > receivelength) //buffer has now waitlen character length
{
return ParseReceiveBuffer(commandhighbyte, commandlowbyte, receivelength);
buffercount=-1;
}
}
}
delay(1);
}
return -1;
}
void SendEchoDisabled() //not used here and a part of the OBD2 ELM327 specifications, as INFO
{
//ATE0 Echo disabled
Serial.write('A');
Serial.write('T');
Serial.write('E');
Serial.write('0');
Serial.write('\r');
}
//010c Request RPM, remember: OBD2 RPM is ((A*256)+B)/4
int GetOBD2RpmValue()
{
//010c
Serial.write('0');
Serial.write('1');
Serial.write('0');
Serial.write('c');
Serial.write('\r');
return ReceiveValueWithTimeout('4','0','C',10);
}
//010d Request speed in kmh
int GetOBD2SpeedValue()
{
//010d
Serial.write('0');
Serial.write('1');
Serial.write('0');
Serial.write('d');
Serial.write('\r');
return ReceiveValueWithTimeout('4','0','D',7);
}
//01e0 Request gear number
int GetOBD2GearValue()
{
//01e0
Serial.write('0');
Serial.write('1');
Serial.write('e');
Serial.write('0');
Serial.write('\r');
return ReceiveValueWithTimeout('4','E','0',7);
}
//01e1 Request curent position
int GetOBD2PositionValue()
{
//01e0
Serial.write('0');
Serial.write('1');
Serial.write('e');
Serial.write('1');
Serial.write('\r');
return ReceiveValueWithTimeout('4','E','1',7);
}
//function to display the gear on the big 7 segmemts display
void afficher(char chiffre)
{
// pin are all set to lower levelet high level for neutral reverse
digitalWrite(bit_A, LOW);
digitalWrite(bit_B, LOW);
digitalWrite(bit_C, LOW);
digitalWrite(bit_D, LOW);
digitalWrite(bit_E, HIGH);
digitalWrite(bit_F, HIGH);
//display the numerical needed
if(chiffre >= 8)
{
digitalWrite(bit_D, HIGH);
chiffre= chiffre - 8;
}
if(chiffre>= 4)
{
digitalWrite(bit_C, HIGH);
chiffre= chiffre - 4;
}
if(chiffre >= 2)
{
digitalWrite(bit_B, HIGH);
chiffre= chiffre - 2;
}
if(chiffre >= 1)
{
digitalWrite(bit_A, HIGH);
chiffre= chiffre - 1;
}
}
void loop()
{
//unsigned long currentMillis = millis();
int i ;
String neutral = "n"; // sets the character for neutral
String reverse = "r"; // sets the character for reverse
unsigned int rpmleds; //holds the 8 leds values
char message [8]; // variable to display the message on the display
int speed = 0;
unsigned int rpm;
unsigned int pos;
int gear = GetOBD2GearValue();
byte button;
String output;
while( gear >= 0 )
{
//unsigned long currentMillis = millis();
if(extractordetected==false)
{
SendEchoDisabled(); //Will cause a OK\r as answer from the extractor, ignored in this code
extractordetected=true;
}
//Read all values
gear = GetOBD2GearValue(); //Notice: offset +1 because of reverse gear
speed = GetOBD2SpeedValue();
rpm = GetOBD2RpmValue();
pos = GetOBD2PositionValue();
rpm = rpm/4;
//unsigned long currentMillis = millis();
button = module.getButtons();
switch ( button )
{
case 0b00000001:
mode = 1;
module.clearDisplay();
output = "Gear Spd";
module.setDisplayToString( output );
delay ( 500 );
module.clearDisplay();
break;
case 0b00000010:
mode = 2;
module.clearDisplay();
output = "Gear Rpm";
module.setDisplayToString( output );
delay ( 500 );
module.clearDisplay();
break;
case 0b00000100:
mode = 3;
module.clearDisplay();
output = "Posion";
module.setDisplayToString( output );
delay ( 500 );
module.clearDisplay();
break;
case 0b00001000: mode = 4;
break;
case 0b00010000: mode = 5;
break;
case 0b00100000: mode = 6;
break;
case 0b01000000: mode = 7;
break;
case 0b10000000:
mode = 8;
module.clearDisplay();
switch ( setrpm )
{
case 0:
setrpm = 1;
output = "Set RPM";
rpmmax = 100;
module.setDisplayToString( "Set RPM" );
mode = 8;
delay (500);
break;
case 1:
setrpm = 0;
module.clearDisplay();
module.setDisplayToString( "Gear Spd" );
mode = 1;
delay (500);
break;
}
break;
}
if(gear!=-1 && speed!=-1 && rpm!=-1)
{
digitalWrite(13, HIGH); //We have connection and all values are ok, turn on the LED
//Do here your LCD or display stuff
if ( mode == 1 )
{
module.setDisplayToDecNumber( speed, 0, false ); //displays numerical the speed
if ( gear >= 2 and gear <10 )
{
module.setDisplayDigit( gear - 1, 0, false ); // displays numerical value of the current gear
}
if ( gear == 1 )
{
module.setDisplayToString( neutral, 0, 0 ); // displays the character for neutral
}
if ( gear == 0 )
{ // -1 that reprecents reverse rollover to 255 so...
module.setDisplayToString( reverse, 0, 0 ); // displays the character for reverse
}
}
if ( mode == 2 )
{
module.setDisplayToDecNumber( rpm, 0, false ); //displays numerical the speed
if ( gear >= 2 and gear <10 )
{
module.setDisplayDigit( gear - 1, 0, false ); // displays numerical value of the current gear
}
if ( gear == 1 )
{
module.setDisplayToString( neutral, 0, 0 ); // displays the character for neutral
}
if ( gear == 0 )
{ // -1 that reprecents reverse rollover to 255 so...
module.setDisplayToString( reverse, 0, 0 ); // displays the character for reverse
}
}
if ( mode == 3 )
{
module.setDisplayToDecNumber( pos, 0, false );
if ( gear >= 2 and gear <10 )
{
module.setDisplayDigit( gear - 1, 0, false ); // displays numerical value of the current gear
}
if ( gear == 1 )
{
module.setDisplayToString( neutral, 0, 0 ); // displays the character for neutral
}
if ( gear == 0 )
{ // -1 that reprecents reverse rollover to 255 so...
module.setDisplayToString( reverse, 0, 0 ); // displays the character for reverse
}
}
if ( mode == 8 )
{
module.setDisplayToDecNumber( rpmmax, 0, false );
if ( rpmlast > ( rpmmax + 200 ) )
{
rpmmax = rpmlast;
}
}
//color the leds
rpmleds = map( rpm,0,rpmmax,0,50 ); // distributes the rpm level to the 8 leds + 1 for shift change
if ( rpmleds<=39 ) {
module.setLEDs(0x0000);
}
if (rpmleds==40){
module.setLEDs(0x0001);
}
if ( rpmleds==41 ) {
module.setLEDs(0x0003);
}
if ( rpmleds==42 ) {
module.setLEDs(0x0007);
}
if ( rpmleds==43 ) {
module.setLEDs(0x000f);
}
if ( rpmleds==44 ) {
module.setLEDs(0x001f);
}
if ( rpmleds==45 ) {
module.setLEDs(0x003f);
}
if ( rpmleds==46 ) {
module.setLEDs(0x403f);
}
if ( rpmleds==47 ) {
module.setLEDs(0xc03f);
}
if ( rpmleds==48 ) {
module.setLEDs(0xff00);
}
if ( rpmleds>=49 ) {
module.setLEDs(0xffff);
delay ( 20 );
module.setLEDs(0x0000);
delay ( 20 );
}
}
rpmlast = rpm;
}
extractordetected=false;
digitalWrite(13, LOW); //No connection, turn off the LED
//Do here stuff to set display to zero or default
// module.setDisplayToString( "no data" ); //prints the banner
//delay(1000);
module.clearDisplay();
}
El perfil para el RBR en el Extractor:
Y para que funcione directamente con el Extractor hay que añadir la Arduino en la configuración de OBD2. Con esto no hay que usar el Converter para nada:
Por último dejo un cutre-vídeo que he grabado con el móvil en un momento. Está ahí puesto con un cartón pero al menos sirve para probar si funciona jaja.
Ya me dirás qué tal te fue si lo pruebas.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Que gran trabajo que te curraste te FELICITO
Pues te comento parece que ahora lo veo mas claro para que funcione, ahora si que se conecta con RBR , pero no marca nada de info ni encienden los leds , ah mi TM1638 es diferente , solo leds rojos , pero n deveria influir para el resto no?
Pulsando los Botones del display aparece lo mismo que en tu video pero no llega a marcar info se queda a cero todo y los leds no alumbran , revise los cables con el codigo como me dijiste pero aun asi con tu codigo y tus fotos que son de gran ayuda logre que se necendiera el display en RBR solo me falta la info , pero yo de codigo na de na ni papa¡¡
Supongo que algo hice mal, esta tarde con calma que tengo tiempo trasteare un rato , haber si logro hacerla funcionar por fin
Pues te comento parece que ahora lo veo mas claro para que funcione, ahora si que se conecta con RBR , pero no marca nada de info ni encienden los leds , ah mi TM1638 es diferente , solo leds rojos , pero n deveria influir para el resto no?
Pulsando los Botones del display aparece lo mismo que en tu video pero no llega a marcar info se queda a cero todo y los leds no alumbran , revise los cables con el codigo como me dijiste pero aun asi con tu codigo y tus fotos que son de gran ayuda logre que se necendiera el display en RBR solo me falta la info , pero yo de codigo na de na ni papa¡¡
Supongo que algo hice mal, esta tarde con calma que tengo tiempo trasteare un rato , haber si logro hacerla funcionar por fin
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
Si tu placa es la que lleva los LED sólo rojo cambian algunas cosas pero al menos marcha y velocidad o rpm numéricas lo debería mostrar. Una vez funcione corregimos los LED.
La placa en cuanto arrancas el Extractor debería marcar una "n" a la izquierda del todo, eso significa que hay comunicación entre Extractor y Arduino.
Una cosa, hay que esperar a que termine la cuenta atrás para que empiece a mostrar algo eh.
Entiendo además que has añadido el juego al Extractor como se ve en la foto de arriba. Si le has dado a búsqueda automática y lo ha encontrado, al dar a Edit debería verse tal que así:
Luego das al botón azul de abajo que pone "Play Game" y debería cantar en inglés "game detected" y arrancar el juego.
Otra cosa, con lo de los pines no te compliques la vida. Coge el sketch que hayas probado y funcione la información y copias la distribución de pines de él y lo pones en el que yo pegué. Es lo mejor ya que si te equivocas en un pin te vas a volver loco buscando sin encontrar la solución.
La placa en cuanto arrancas el Extractor debería marcar una "n" a la izquierda del todo, eso significa que hay comunicación entre Extractor y Arduino.
Una cosa, hay que esperar a que termine la cuenta atrás para que empiece a mostrar algo eh.
Entiendo además que has añadido el juego al Extractor como se ve en la foto de arriba. Si le has dado a búsqueda automática y lo ha encontrado, al dar a Edit debería verse tal que así:
Luego das al botón azul de abajo que pone "Play Game" y debería cantar en inglés "game detected" y arrancar el juego.
Otra cosa, con lo de los pines no te compliques la vida. Coge el sketch que hayas probado y funcione la información y copias la distribución de pines de él y lo pones en el que yo pegué. Es lo mejor ya que si te equivocas en un pin te vas a volver loco buscando sin encontrar la solución.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Si todo eso correcto lo tengo como en las fotos , cuando arranca pone fran en el display encienden todos los leds y eso arranco el rbr dice lo de game detected y todo pero dentro del rbr queda con la n en la esquina y no hace nada mas . habra que configurar algo en el comberted? acabo de desenchufar la otra arduino que tengo para el H por si habia conflicto o algo pero nada, sigue igual .
Alguna idea?
Alguna idea?
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
El Converter aquí no se usa, sólo el Extractor. Es raro porque no tiene mayor complicación una vez elegimos bien el puerto COM de la Arduino para que envíe datos obd2.
¿Has probado con algún otro juego a ver si va?
No se me ocurre nada raro, salvo que tus pins y los míos no sean los mismos y Arduino no tenga cómo enviar datos al TM1638
¿Has probado con algún otro juego a ver si va?
No se me ocurre nada raro, salvo que tus pins y los míos no sean los mismos y Arduino no tenga cómo enviar datos al TM1638
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Bueno, en Assetto funcionando. Aunque con una pega ya conocida y es que en el sketch hay que restar 1 a las marchas porque sino va siempre una por arriba, es decir si vas en 1ª te dice que vas en 2ª y así.
Al menos funciona.
He modificado una cosa en el script que utiliza el programa para buscar el juego y también he actualizado la .dll que hay una más actual en el foro.
Al menos funciona.
He modificado una cosa en el script que utiliza el programa para buscar el juego y también he actualizado la .dll que hay una más actual en el foro.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Si probe en Asseto que es el unico Sim que tengo aparte de rbr , y nada ai si que no me aparece ni la N , en que placa la tienes conectada ? la mia esta e una Nano con chip 328p , si me puedes mandar una foto de las conexiones para comprobar que estea igual...
Aunque deveria funcionar porque en versiones anteriores de asseto funcionaba perfectamente , algo se me debe escapar seguro que una tonteria pero nn encuentro el fallo .....
Aunque deveria funcionar porque en versiones anteriores de asseto funcionaba perfectamente , algo se me debe escapar seguro que una tonteria pero nn encuentro el fallo .....
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
En RBR funcionando , solucionado la placa tiene 2 GND cambie de uno para otro y empezo a marcar
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
Hola,buenas, este pos me viene perfecto para mi tambien, estoy haciendo exactamente lo mismo,con esa isma tm de leds rojos, a maiores queri añadir un display solo para marchas con otra nano v3 independiente de la TM y la pegunta es..como conectar y si funcionaria.
sergiomaxi- Mensajes : 11
Fecha de inscripción : 09/02/2017
Re: Ayuda Arduino Y Display TM1638
adriangz escribió:En RBR funcionando , solucionado la placa tiene 2 GND cambie de uno para otro y empezo a marcar
Vaya, más o menos los tiros podían venir por ahí ya que si a mi me funciona, tenía que funcionarte a ti también.
Ahora mismo no puedo sacar la foto a las conexiones pero si la necesitas aviso que lo busco y las hago.
sergiomaxi escribió:Hola,buenas, este pos me viene perfecto para mi tambien, estoy haciendo exactamente lo mismo,con esa isma tm de leds rojos, a maiores queri añadir un display solo para marchas con otra nano v3 independiente de la TM y la pegunta es..como conectar y si funcionaria.
No sé muy bien cómo funcionan esos display pero debe ser algo parecido a la TM. En el hilo de x-sim y obd2 el chaval que colgó el código lo hizo en origen para usar combinados un display para la marcha actual y la TM para el resto.
No debería hacer falta que pongas una cosa en cada nano, pueden ir los dos conectados a la misma placa.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
no doy encontrado el hilo jaja ademas el display no tiene las mismas conexiones que la tm,tiene dos distintas,yo si las pongo individual es por evitar problemas,aunque en una sola mas comodo menos cables
sergiomaxi- Mensajes : 11
Fecha de inscripción : 09/02/2017
Re: Ayuda Arduino Y Display TM1638
sergiomaxi escribió:no doy encontrado el hilo jaja ademas el display no tiene las mismas conexiones que la tm,tiene dos distintas,yo si las pongo individual es por evitar problemas,aunque en una sola mas comodo menos cables
A partir de este mensaje comentan cosas acerca de poner la TM1638 en conjunción con un display de 8 segmentos para la marcha.
http://www.x-sim.de/forum/viewtopic.php?f=40&t=1083&start=90#p10322
Unos mensajes más abajo tienes hasta el código que usó el chaval por si quieres probarlo.
No sé qué conexiones lleva el display pero casi te diría que es fácil que vayan en paralelo a la TM en cuanto a los 3 pines de datos y control.
Por cierto, también puedes mirar en la página de Simtools que me consta que está más activa que x-sim. La putada es que hay que pagar el software, unos 19€ me parece
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Buenas!
Vete borrando todos los sketchs que tengas y si cuadra hasta el x-sim.
http://www.racedepartment.com/downloads/simhub-diy-sim-racing-dash.10252/
Con esta aplicación lo tienes todo: soporte para un montón de pantallas diferentes, tiene un menú para ir diciendo lo que tienes y te genera él solo el sketch para subirlo al Arduino.
Y luego tiene una app normal con la lista de juegos, configuras la ruta al juego y a funcionar.
Y si quieres puedes modificar al gusto funcionamiento de LEDs, info en pantalla, las diferentes pantallas por las que puedes ir pasando, etc.
Está genial. Yo la llevo usando semanas con Assetto y de lujo. Ahora a ver qué tal el RBR que he entrado y parece ir bien.
Ojo, para que funcione hay que copiar dos archivos de la carpeta de plugins que viene en el paquete al directorio del RBR.
Vete borrando todos los sketchs que tengas y si cuadra hasta el x-sim.
http://www.racedepartment.com/downloads/simhub-diy-sim-racing-dash.10252/
Con esta aplicación lo tienes todo: soporte para un montón de pantallas diferentes, tiene un menú para ir diciendo lo que tienes y te genera él solo el sketch para subirlo al Arduino.
Y luego tiene una app normal con la lista de juegos, configuras la ruta al juego y a funcionar.
Y si quieres puedes modificar al gusto funcionamiento de LEDs, info en pantalla, las diferentes pantallas por las que puedes ir pasando, etc.
Está genial. Yo la llevo usando semanas con Assetto y de lujo. Ahora a ver qué tal el RBR que he entrado y parece ir bien.
Ojo, para que funcione hay que copiar dos archivos de la carpeta de plugins que viene en el paquete al directorio del RBR.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Ohh que bueno ¡¡¡ esto es un adelanto grandisimo .
gracias por el aporte esta tarde si tengo tiempo lo pruebo , aparte me viene genial q tube q formatear el pc y aun no tengo nada de software para el display , aun voy tener que hacer un pedido para mejorar el dispaly
gracias por el aporte esta tarde si tengo tiempo lo pruebo , aparte me viene genial q tube q formatear el pc y aun no tengo nada de software para el display , aun voy tener que hacer un pedido para mejorar el dispaly
adriangz- Mensajes : 28
Fecha de inscripción : 23/04/2012
Edad : 37
Localización : Santiago De Compostela
Re: Ayuda Arduino Y Display TM1638
Por ahora no funciona fino del todo ya que al meter varios plugins algo ha liado que a veces se "traba" un poco. Me ha pasado antes una versión nueva para que la pruebe ya que fui yo el que se dio cuenta del problemilla y parece que hoy por la noche subirá esa nueva versión.
En el RBR justo acabo de estar yo jugando y va perfecto. Detecta las rpm de cada coche y tanto marcha como velocidad los marca correcto.
Si estás pensando en aumentar los displays, esta app te viene de lujo porque tiene un configurador para el sketch de Arduino que le dices lo que tienes y a correr.
Ya me contarás qué tal.
En el RBR justo acabo de estar yo jugando y va perfecto. Detecta las rpm de cada coche y tanto marcha como velocidad los marca correcto.
Si estás pensando en aumentar los displays, esta app te viene de lujo porque tiene un configurador para el sketch de Arduino que le dices lo que tienes y a correr.
Ya me contarás qué tal.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Re: Ayuda Arduino Y Display TM1638
Parece que ya está solucionado. Además lo ha afinado más para que consuma menos recursos.
http://www.racedepartment.com/downloads/simhub-diy-sim-racing-dash.10252/
Por cierto, mira bien en la carpeta Game Plugins, ahí te dice lo que has de hacer. Hay que copiar 2 archivos a la carpeta del RBR -o las carpetas si tienes varios.
Y, por desgracia, no lee las rpm máximas. En el .ini hay una línea donde se ponen las rpm máximas para el coche que haya en ese slot. Si no se es de cambiar mucho, tampoco es tanto jaleo.
Una pena que no sea capaz de hacer algo similar al sketch de x-sim que le dabas al botón y registraba el valor máximo.
http://www.racedepartment.com/downloads/simhub-diy-sim-racing-dash.10252/
Por cierto, mira bien en la carpeta Game Plugins, ahí te dice lo que has de hacer. Hay que copiar 2 archivos a la carpeta del RBR -o las carpetas si tienes varios.
Y, por desgracia, no lee las rpm máximas. En el .ini hay una línea donde se ponen las rpm máximas para el coche que haya en ese slot. Si no se es de cambiar mucho, tampoco es tanto jaleo.
Una pena que no sea capaz de hacer algo similar al sketch de x-sim que le dabas al botón y registraba el valor máximo.
manc0ntr0- Mensajes : 430
Fecha de inscripción : 03/06/2010
Temas similares
» AYUDA para INSTALAR PALANCA DE CAMBIOS G29 con Arduino
» ayuda por fa
» [Solucionado] Arduino Leonardo no se enciende
» Problema freno de mano basado en arduino
» Presentación CERA 2015
» ayuda por fa
» [Solucionado] Arduino Leonardo no se enciende
» Problema freno de mano basado en arduino
» Presentación CERA 2015
SIM-control :: General RBR :: Taller
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.