DIY - tm1638 x2 arduino game dash simtool

  • bonsoir

    j'aimerai faire fonctionner mon compteur diy (2 x tm1638 et arduino ) je l'avais acheter a l'époque a tronicgr (thanos)

    il fonctionnait sous xsim3

    j'ai mon pc qui est mort le hdd et tous ce qu'il contenait

    j'ai remonté un pc et je souhaite passer par simtool (vers 2.51) et game dash (2.3)

    j'ai tenter avec le tuto de racing mat http://www.racingfr.com/forum/index.php?showtopic=48223 mais les images sont indisponibles

    j'aurais besoin d'un coup main pour faire fonctionner tous ca :sos:

  • Tu veux un coup de main sur quelle partie ? La programmation ?

    Intel 13600KF WC, MSI Z690-A PRO, 32 GB 6000Mhz, MSI RTX 3080ti WC, Simétik K2, Reverb G2, MOZA R9, Fanatec V3, handbrake HE, Shifter SRT

  • Lachaussette 26 octobre 2020 à 02:12

    A changé le titre de la discussion du forum de “tm1638 x2 arduino game dash simtool” à “DIY - tm1638 x2 arduino game dash simtool”.
  • bonjour

    j'ai retrouver le code de d'origine fait par thanos (injoignable ...)

    // X-sim3dashboard v1 (using TM1638 display and Arduino Nano v3)

    // Made by TronicGr (Thanos) 1-30-2013 for X-sim3

    // Shared as Public Domain

    // Serial parser example: R~a01~~95~S~a02~G~a03~

    // Where:

    // ~a01~ is 16bit value for rpm

    // ~95~ is data value parameter for RPM_MAX divided by 1000 to fit into a byte so actual value is 9500

    // ~a02~ is 16bit value for speed

    // ~a03~ is 8bit value for gear / neutral / reverse

    // You can set the USO pause safely to 10ms for nice fast refresh rates!


    #include <TM1638.h> //can be downloaded from http://code.google.com/p/tm1638-library/

    // define a module on data pin 5, clock pin 4 and strobe pin 3

    TM1638 module1(5, 4, 3);

    TM1638 module2(5, 4, 2);

    const int ledPin = 13; // the number of the LED pin

    int ledState = LOW; // ledState used to set the LED

    long previousMillis = 0; // will store last time LED was updated

    byte oldbtn = 0;

    byte btn =0;

    byte btnstate =1;

    unsigned long time;

    // 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)

    void setup() {

    //Create Serial Object

    Serial.begin(125000);

    //Serial.begin(115200);

    pinMode(ledPin, OUTPUT);

    // initialize the screen:

    module1.clearDisplay(); //clears the display from garbage if any

    module2.clearDisplay(); //clears the display from garbage if any

    String name = "Thanos"; //sets a custom logo start up banner

    module1.setDisplayToString(name); //prints the banner

    name = "Tronicgr"; //sets a custom logo start up banner

    module2.setDisplayToString(name); //prints the banner

    module1.setLEDs(0b10000000 | 0b00000001<< 8 );

    module2.setLEDs(0b10000000 | 0b00000001<< 8 );

    delay(50);

    module1.setLEDs(0b11000000 | 0b00000011<< 8 );

    module2.setLEDs(0b11000000 | 0b00000011<< 8 );

    delay(50);

    module1.setLEDs(0b11100000 | 0b00000111<< 8 );

    module2.setLEDs(0b11100000 | 0b00000111<< 8 );

    delay(50);

    module1.setLEDs(0b11110000 | 0b00001111<< 8 );

    module2.setLEDs(0b11110000 | 0b00001111<< 8 );

    delay(50);

    module1.setLEDs(0b11111000 | 0b00011111<< 8 );

    module2.setLEDs(0b11111000 | 0b00011111<< 8 );

    delay(50);

    module1.setLEDs(0b11111100 | 0b00111111<< 8 );

    module2.setLEDs(0b11111100 | 0b00111111<< 8 );

    delay(50);

    module1.setLEDs(0b11111110 | 0b01111111<< 8 );

    module2.setLEDs(0b11111110 | 0b01111111<< 8 );

    delay(50);

    module1.setLEDs(0b11111111 | 0b11111111<< 8 );

    module2.setLEDs(0b11111111 | 0b11111111<< 8 );

    delay(200);

    module1.setLEDs(0b00000000 | 0b00000000<< 8 );

    module2.setLEDs(0b00000000 | 0b00000000<< 8 );

    delay(50);

    module1.setLEDs(0b11111111 | 0b11111111<< 8 );

    module2.setLEDs(0b11111111 | 0b11111111<< 8 );

    delay(100);

    module1.setLEDs(0b00000000 | 0b00000000<< 8 );

    module2.setLEDs(0b00000000 | 0b00000000<< 8 );

    delay(50);

    module1.setLEDs(0b11111111 | 0b11111111<< 8 );

    module2.setLEDs(0b11111111 | 0b11111111<< 8 );

    delay(100);

    module1.setLEDs(0b00000000 | 0b00000000<< 8 );

    module2.setLEDs(0b00000000 | 0b00000000<< 8 );

    delay(50);

    module1.setLEDs(0b11111111 | 0b11111111<< 8 );

    module2.setLEDs(0b11111111 | 0b11111111<< 8 );

    delay(100);

    module1.setLEDs(0b00000000 | 0b00000000<< 8 );

    module2.setLEDs(0b00000000 | 0b00000000<< 8 );

    //delay(1500); //small delay 1.5 sec

    module1.clearDisplay(); //clears the 1st display

    module2.clearDisplay(); //clears the 2nd display

    btn=1;

    }

    void loop() {

    unsigned long currentMillis = millis();

    int i;

    char bufferArray[20]; // holds all serial data into a array

    unsigned int rpm; //holds the rpm data (0-65535 size)

    unsigned int rpmleds; //holds the 8 leds values

    unsigned int rpmmax; //retrieves from x-sim USO this value as parameter divided by 100

    unsigned int carspeed; //holds the speed data (0-65535 size)

    unsigned int carspeedkm; //holds the speed data KM (0-65535 size)

    byte gear; // holds gear value data

    byte d1; // high byte temp variable

    byte d2; // low byte temp variable

    byte rpmdata = 0; // marker that new data are available

    byte speeddata = 0; // marker that new data are available

    byte geardata = 0; // marker that new data are available

    unsigned int blinkled = 0;


    if (Serial.available() >= 9) { //if 6 bytes available in the Serial buffer...

    for (i=0; i<9; i++) { // for each byte

    bufferArray[i] = Serial.read(); // put into array

    }

    }

    digitalWrite(13, LOW);

    delay(10);

    digitalWrite(13, HIGH);

    //Serial.flush();

    if (bufferArray[0] == 'R' ){ // if new bytes have been recieved

    d1 = bufferArray[1]; // store high byte of rpm

    d2 = bufferArray[2]; // store low byte of rpm

    rpm = ((d1<<8) + d2); // concatonate bytes (shift 8 bits)

    rpmmax = bufferArray[3]; // retrieves the maxrpm value

    rpmmax = (rpmmax * 100)+200; // multiplies the rpm data into thousants

    rpmdata=1; // we got new data!

    }

    if (bufferArray[4] == 'S' ){

    d1 = bufferArray[5]; // store high byte of speed

    d2 = bufferArray[6]; // store low byte of speed

    carspeed = ((d1<<8) + d2); // concatonate bytes (shift 8 bits)

    speeddata=1; // we got new data!

    }

    if (bufferArray[7] == 'G' ){

    gear = bufferArray[8]; // retrieves the single byte of gear (0-255 value)

    geardata=1; // we got new data!

    }

    if (btn != 0){

    btnstate = btn;

    }

    if (speeddata == 1) {

    if (btnstate == 1){

    module1.setDisplayToDecNumber(carspeed, 0, false); //displays numerical the speed

    speeddata=0;}

    if (btnstate == 2){

    carspeedkm = carspeed * 1.60934;

    module1.setDisplayToDecNumber(carspeedkm, 0, false); //displays numerical the speed

    speeddata=0;}

    }

    if (geardata == 1) {

    char* neutral = "n"; // sets the character for neutral

    char* reverse = "r"; // sets the character for reverse

    gear = gear - 127; // offset the 0 value in 8-bit

    if (gear >= 1 and gear <10 ){

    module1.setDisplayDigit(gear, 0, false); // displays numerical value of the current gear

    }

    if (gear == 0){

    module1.setDisplayToString(neutral, 0, 0); // displays the character for neutral

    }

    if (gear == 255){ // -1 that reprecents reverse rollover to 255 so...

    module1.setDisplayToString(reverse, 0, 0); // displays the character for reverse

    }

    geardata=0;

    }

    Serial.flush();

    btn = module1.getButtons();

    if (btn != 0) {

    if (time+200 < millis()){

    oldbtn=255;

    time=millis();

    }

    if (oldbtn != btn){

    time=millis();

    oldbtn=btn;

    //module1.setDisplayToDecNumber(btn, 0, false);

    }

    }

    if (rpmdata == 1) {

    module2.setDisplayToDecNumber(rpm, 0, false); //displays numerical the speed

    rpmleds = map(rpm,0,rpmmax,0,17); // distributes the rpm level to the 8 leds + 1 for shift change

    if (rpmleds==0){

    module1.setLEDs(0b00000000 | 0b00000000 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==1){

    module1.setLEDs(0b00000000 | 0b00000001 << 8 );

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==2){

    module1.setLEDs(0b00000000 | 0b00000011 << 8 );

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==3){

    module1.setLEDs(0b00000000 | 0b00000111 << 8 );

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==4){

    module1.setLEDs(0b00000000 | 0b00001111 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==5){

    module1.setLEDs(0b00000000 | 0b00011111 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==6){

    module1.setLEDs(0b00000000 | 0b00111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==7){

    module1.setLEDs(0b00000000 | 0b01111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==8){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    }

    if (rpmleds==9){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000001 << 8);

    }

    if (rpmleds==10){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000011 << 8);

    }

    if (rpmleds==11){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00000111 << 8);

    }

    if (rpmleds==12){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00001111 << 8);

    }

    if (rpmleds==13){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00000000 | 0b00011111 << 8);

    }

    if (rpmleds==14){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b00100000 | 0b00011111 << 8 );

    }

    if (rpmleds==15){

    module1.setLEDs(0b00000000 | 0b11111111 << 8);

    module2.setLEDs(0b01100000 | 0b00011111 << 8 );

    }

    if (rpmleds==16){

    //blinkled++;

    //module.setLEDs(0b11100000 | 0b000011111<<8 );}

    //if (blinkled > 100){

    module1.setLEDs(0b00000000 | 0b00000000 << 8);

    module2.setLEDs(0b00000000 | 0b00000000 << 8);

    //delay(20);

    //}

    //if (blinkled > 200){

    if(currentMillis - previousMillis > interval) {

    // save the last time you blinked the LED

    previousMillis = currentMillis;

    module1.setLEDs(0b11111111 | 0b11111111 << 8 );

    module2.setLEDs(0b11111111 | 0b11111111 << 8 );

    }

    rpmdata=0;

    }

    }

    }


    si quelqu'un aurait fait un dashboard avec 2 tm1638 et arduino nano v3 ou meme avec un seul tm1638 ?

    j'y connais que dalle en arduino

  • Dude350z oui pour la programmation

    voici le code de chez simtool

    #include <TM1638.h>

    #include <TM1638Font.h>

    // To test in serial monitor , take comments out to see the output.

    // Need to send R00000G0S000

    int Speed;

    int Gear;

    int Rpm;

    int RpmLeds;

    int RpmMax = 8000;

    //int Water;

    //int Oil;

    //int Fuel;

    //int EngineOverHeat;

    //int BrakeOverHeat;

    //int TireDamage;

    //int ShiftUp;

    //int ShiftDown;

    //int PartsDetached;

    //int InPits;

    //int YellowFlag;

    //int Sector1Flag;

    //int Sector2Flag;

    //int Sector3Flag;

    int ShiftPoint = 4000;

    int LimitRange = 0;

    int UnderShiftPoint;

    int OverShiftPoint;

    int OverShift;

    int UnderShift;

    int buttonCheck = 1;

    int bufferArray[12];


    #include <TM1638.h>

    TM1638 module(9, 8, 7);

    void setup(){

    Serial.begin(57600);

    // initialize the screen:

    module.clearDisplay(); //clears the display

    String name = "NUKEM"; //sets a custom Label

    module.setDisplayToString(name); //prints the Label

    delay(3000); //small delay 3 sec

    module.clearDisplay(); //clears the display

    pinMode(3,OUTPUT);

    pinMode(4,OUTPUT);

    pinMode(5,OUTPUT);

    }

    void loop(){

    //****************************** READ DATA FROM SERIAL ******************************

    if (Serial.available() == 12) { //if 24 bits available in the Serial buffer...

    int i;

    for (i=0; i<12; i=i+1) { // read and label each byte.

    bufferArray[i] = Serial.read();

    }

    if (bufferArray[0] == 'R'){

    unsigned int rpmSmTools = ((bufferArray[1]-48)*10000) + ((bufferArray[2]-48)*1000) + // Take values 1-5.

    ((bufferArray[3]-48) *100) + ((bufferArray[4]-48)*10) + (bufferArray[5]-48);

    // Serial.print("You have set the Rpm to a Value of:");

    // Serial.println(rpmSmTools);

    Rpm = rpmSmTools;

    }

    if (bufferArray[6] == 'G'){

    unsigned int gearSmTools = ((bufferArray[7]-48)*1);

    Gear = gearSmTools;

    //Serial.print("You have set the Gear to a Value of:");

    //Serial.println(gearSmTools);

    }

    if (bufferArray[8] == 'S'){

    unsigned int speedSmTools = ((bufferArray[9]-48)*100) + ((bufferArray[10]-48)*10) + (bufferArray[11]-48); // Take values 1-5.

    Speed = speedSmTools;

    //Serial.print("You have set the Speed to a Value of:");

    //Serial.println(speedSmTools);

    }

    // if (bufferArray[12] == 'O'){

    //unsigned int oilSmTools = ((bufferArray[13]-48)*100) + ((bufferArray[14]-48)*10) + (bufferArray[15]-48); // Take values 1-5.

    //Serial.print("You have set the Oil to a Value of:");

    //Serial.println(oilSmTools);

    // }

    //if (bufferArray[16] == 'W'){

    // unsigned int waterSmTools = ((bufferArray[17]-48)*100) + ((bufferArray[18]-48)*10) + (bufferArray[19]-48); // Take values 1-5.

    //Serial.print("You have set the Water to a Value of:");

    //Serial.println(waterSmTools);

    // }

    //if (bufferArray[20] == 'F'){

    // unsigned int FuelSmTools = ((bufferArray[21]-48)*100) + ((bufferArray[22]-48)*10) + (bufferArray[23]-48); // Take values 1-5.

    //Serial.print("You have set the Fuel to a Value of:");

    //Serial.println(FuelSmTools);

    // }

    //if (bufferArray[24] == 'L'){

    // EngineOverHeat = bufferArray[25];

    // BrakeOverHeat = bufferArray[26];

    // TireDamage = bufferArray[27];

    // ShiftUp = bufferArray[28];

    // ShiftDown = bufferArray[29];

    // PartsDetached = bufferArray[30];

    // InPits = bufferArray[31];

    // YellowFlag = bufferArray[32];

    // Sector1Flag = bufferArray[33];

    // Sector2Flag = bufferArray[34];

    // Sector3Flag = bufferArray[35];

    // Serial.print("You have set the lights to a Value of:");

    //Serial.println( bufferArray[25]-48);

    //Serial.println( bufferArray[26]-48);

    //Serial.println( bufferArray[27]-48);

    //Serial.println( bufferArray[28]-48);

    //Serial.println( bufferArray[29]-48);

    //Serial.println( bufferArray[30]-48);

    //Serial.println( bufferArray[31]-48);

    //Serial.println( bufferArray[32]-48);

    //Serial.println( bufferArray[33]-48);

    //Serial.println( bufferArray[34]-48);

    //Serial.println( bufferArray[35]-48);

    //}

    CheckButtons();

    CheckShiftLightAdj();

    SetLimits();

    DisplayLeds();

    UpdateLCD();

    }

    }


    void UpdateLCD() {

    if (buttonCheck == 1){

    RpmLeds = map(Rpm, 500,RpmMax ,1 ,8);

    if (RpmLeds == 1) { module.setLEDs(0b00000001 | 0b00000000<< 8);}

    if (RpmLeds == 2) { module.setLEDs(0b00000011 | 0b00000000<< 8);}

    if (RpmLeds == 3) { module.setLEDs(0b00000111 | 0b00000000<< 8);}

    if (RpmLeds == 4) { module.setLEDs(0b00001111 | 0b00000000<< 8);}

    if (RpmLeds == 5){ module.setLEDs(0b00011111 | 0b00000000<< 8);}

    if (RpmLeds == 6){ module.setLEDs(0b00011111 | 0b00100000<< 8);}

    if (RpmLeds == 7){ module.setLEDs(0b00011111 | 0b01100000<< 8);}

    if (RpmLeds == 8){ module.setLEDs(0b00011111 | 0b11100000<< 8);}

    module.setDisplayToDecNumber(Speed, 0, false); //displays numerical the Speed

    //module.setDisplayToDecNumber(Rpm, 0, false); //displays numerical the rpm

    if (Gear == 9) {char* name = "r"; module.setDisplayToString(name,0);}//r- little r

    if (Gear == 0) {char* name = "n"; module.setDisplayToString(name,0);} //n - little n

    if (Gear == 1) {module.setDisplayDigit(1, 0, false);}

    if (Gear == 2) {module.setDisplayDigit(2, 0, false);}

    if (Gear == 3) {module.setDisplayDigit(3, 0, false);}

    if (Gear == 4) {module.setDisplayDigit(4, 0, false);}

    if (Gear == 5) {module.setDisplayDigit(5, 0, false);}

    if (Gear == 6) {module.setDisplayDigit(6, 0, false);}

    if (Gear == 7) {module.setDisplayDigit(7, 0, false);}

    }

    if (buttonCheck == 2){

    RpmLeds = map(Rpm, 500, RpmMax,1 ,8);

    if (RpmLeds == 1) { module.setLEDs(0b00000001 | 0b00000000<< 8);}

    if (RpmLeds == 2) { module.setLEDs(0b00000011 | 0b00000000<< 8);}

    if (RpmLeds == 3) { module.setLEDs(0b00000111 | 0b00000000<< 8);}

    if (RpmLeds == 4) { module.setLEDs(0b00001111 | 0b00000000<< 8);}

    if (RpmLeds == 5){ module.setLEDs(0b00011111 | 0b00000000<< 8);}

    if (RpmLeds == 6){ module.setLEDs(0b00011111 | 0b00100000<< 8);}

    if (RpmLeds == 7){ module.setLEDs(0b00011111 | 0b01100000<< 8);}

    if (RpmLeds == 8){ module.setLEDs(0b00011111 | 0b11100000<< 8);}

    //module.setDisplayToDecNumber(Speed, 0, false); //displays numerical the Speed

    module.setDisplayToDecNumber(Rpm, 0, false); //displays numerical the rpm

    if (Gear == 9) {char* name = "r"; module.setDisplayToString(name,0);}//r- little r

    if (Gear == 0) {char* name = "n"; module.setDisplayToString(name,0);} //n - little n

    if (Gear == 1) {module.setDisplayDigit(1, 0, false);}

    if (Gear == 2) {module.setDisplayDigit(2, 0, false);}

    if (Gear == 3) {module.setDisplayDigit(3, 0, false);}

    if (Gear == 4) {module.setDisplayDigit(4, 0, false);}

    if (Gear == 5) {module.setDisplayDigit(5, 0, false);}

    if (Gear == 6) {module.setDisplayDigit(6, 0, false);}

    if (Gear == 7) {module.setDisplayDigit(7, 0, false);}

    }

    }

    void CheckButtons(){

    if (module.getButtons() == 0b0000001){buttonCheck = 1;}

    if (module.getButtons() == 0b00000010){buttonCheck = 2;}

    if (module.getButtons() == 0b00000100){RpmMax = Rpm;}

    if (module.getButtons() == 0b00001000){ShiftPoint = Rpm;}

    }

    void CheckShiftLightAdj() {

    LimitRange = analogRead(0);

    int RpmAdjust = map(LimitRange, 1, 1023, 0, 2000);

    UnderShift = RpmAdjust;

    OverShift = RpmAdjust;

    }

    void SetLimits() {

    UnderShiftPoint = ShiftPoint - UnderShift;

    OverShiftPoint = ShiftPoint + OverShift;

    if (OverShiftPoint > RpmMax){OverShiftPoint = RpmMax;}

    }

    void DisplayLeds(){

    if (Rpm >= UnderShiftPoint){digitalWrite(3,HIGH);}

    if (Rpm >= ShiftPoint){digitalWrite(4,HIGH);}

    if (Rpm >= OverShiftPoint){digitalWrite(5,HIGH);}

    if (Rpm < UnderShiftPoint){digitalWrite(3,LOW);}

    if (Rpm < ShiftPoint){digitalWrite(4,LOW);}

    if (Rpm < OverShiftPoint){digitalWrite(5,LOW);}

    }

    quand je tente de le televerse j'obtien une erreur

    no matching function for call to 'TM1638::TM1638(int, int, int)'

  • Hey

    j'ai régler le problème de téléversement

    je n'avais pas les bonne bibliotheques et il faut selectionner arduino duemilanove dans arduino ide

    bon le plus dur reste le code arduino pour faire fonctionner avec simtool

  • Je vais essayer de regarder mais je te promets rien ;)

    Intel 13600KF WC, MSI Z690-A PRO, 32 GB 6000Mhz, MSI RTX 3080ti WC, Simétik K2, Reverb G2, MOZA R9, Fanatec V3, handbrake HE, Shifter SRT