1. For downloading SimTools plugins you need a Download Package. Get it with virtual coins that you receive for forum activity or Buy Download Package - We have a zero Spam tolerance so read our forum rules first.

    Buy Download Package Now!
  2. Do not try to cheat our system and do not post an unnecessary amount of useless posts only to earn credits here. We have a zero spam tolerance policy and this will cause a ban of your user account. Otherwise we wish you a pleasant stay here! Read the forum rules
  3. We have a few rules which you need to read and accept before posting anything here! Following these rules will keep the forum clean and your stay pleasant here. Do not following these rules will lead to permanent exclusion from this website: Read the forum rules.

Showroom TM1638 and Gamedash.

Discussion in 'DIY peripherals' started by Archie, Apr 23, 2015.

  1. Archie

    Archie Eternal tinkerer

    Joined:
    Dec 31, 2014
    Messages:
    1,081
    Location:
    Wollongong, NSW, AU
    Balance:
    3,616Coins
    Ratings:
    +1,366 / 4 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    Managed to get this working with help from @soraz (the code) and @eaorobbie (pin advice)

    TM1638 (China fake) with a Funduino Mega 2560. (China Fake)
    Will replace with a NANO when it arrives (another China fake.. )

    (The whole china fake thing amuses me when EVERYTHING is made in China anyway!!)

    I modified the code a little to bring the G (gear) and S (speed) display in by one Segment
    So instead of sitting on 0 and 7, then now sit on 1 and 6.
    Also made the LED's "sweep" on Start up.

    The screen is just a black piece of glass from a welders helmet. It's dark enough to not see anything until
    powered on, and lets just enough light through to look nice.

    The box is just cardboard and gaffa tape for now until I can make something better.

    The box:
    https://docs.google.com/a/fmit.com.au/file/d/0B9UVNikjcBjCUlRHdW1WOE5pOUU/view

    In action on Project Cars: (excuse the ambient noise, it's the sim coupled with one hand driving!)
    https://docs.google.com/a/fmit.com.au/file/d/0B9UVNikjcBjCOU05VTlHeTRITDQ/view
    • Like Like x 1
  2. noorbeast

    noorbeast VR - The Next Generation Staff Member Moderator

    Joined:
    Jul 13, 2014
    Messages:
    12,620
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    96,525Coins
    Ratings:
    +8,108 / 40 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
    Would you mind posting your modified code @Archie, I know others would be interested.

    Thumbs up for @soraz and @eaorobbie's support in getting it sorted, way to go :thumbs
  3. Archie

    Archie Eternal tinkerer

    Joined:
    Dec 31, 2014
    Messages:
    1,081
    Location:
    Wollongong, NSW, AU
    Balance:
    3,616Coins
    Ratings:
    +1,366 / 4 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    Sure. I take no credit, all credit to @soraz for the original code, I simply added a sweep for the LED's and changed the Segment numbers.
    I could have used a loop, but I'm still getting used to Arduino, so I did it "long hand" for the LED sweep.

    Code:
         
            /* 
             Arduino code for simple dashboard with TM1638
            */
    
            // Serial parser for Interface - Output : M<Dash2>S<Dash1>G<Dash3>
            // Serial extended parser with kart racing pro : S<Dash1>M<Dash2>G<Dash3>W<Dash4>O<Dash5>F<Dash7>
            // Serial parser for Shutdown - Output : Z00
            // M : rpm              (16bit - hexadecimal output)
            // S : speed            (16bit - hexadecimal output)
            // G : gear             (16bit - hexadecimal output)
            // O : oil temp         (16bit - hexadecimal output)
            // W : water temp       (16bit - hexadecimal output)
            // F : fuel             (16bit - hexadecimal output)
            // L : lap              (16bit - hexadecimal output)
            // P : position         (16bit - hexadecimal output)
            // Z : clear            (to clear display and max rpm value)
            //
            // for dashboard defined in TM1638.h
            // Pin xx : STB0 - strobe // Change these values in TM1638.h
            // Pin xx : CLK - clock
            // Pin xx : DIO - data
    
            ////////////////////////////////////////////////////////////////////////////////
            // DashBoard include
            //////////////////////////////////////////////////////////////////////////////// 
            // module can be downloaded from http://forum.arduino.cc/index.php?topic=190472.0
            // (search TM1638_v1.02.zip)
            #include <TM1638.h>
            #include <TM1638Font.h>
            TM1638 module;
          
            // buttons TM1638 (left to right)
            #define btnSpeed      0b00000001 // 1
            #define btnGear       0b00000010 // 2
            #define btnRPM        0b00000100 // 4
            #define btnOIL        0b00001000 // 8
            #define btnWater      0b00010000 // 16
            #define btnFuel       0b00100000 // 32
            #define btnLAP        0b01000000 // 64
            #define btnPosition   0b10000000 // 128
    
            ////////////////////////////////////////////////////////////////////////////////
            // EEPROM include
            ////////////////////////////////////////////////////////////////////////////////        
            #include "EEPROM.h"
    
            ////////////////////////////////////////////////////////////////////////////////
            // variable init
            ////////////////////////////////////////////////////////////////////////////////        
            int i;
            unsigned int carspeed;      // holds the speed data (0-65535 size)
            unsigned int gear;          // holds gear value data (0-65535 size)
            unsigned int rpm;           // holds the rpm data (0-65535 size)
            unsigned int oil;           // holds the oil temp data (0-65535 size)
            unsigned int water;         // holds the water temp data (0-65535 size)
            unsigned int fuel;          // holds the fuel data (0-65535 size)
            unsigned int lap;           // holds the lap data (0-65535 size)
            unsigned int posit;         // holds the position data (0-65535 size)
          
            unsigned int rpmleds;          // holds the 8 leds values
            unsigned int rpmmax = 5000;    // retrieves from rpm live with minimum setting on initialization and Shutdown - Output
            unsigned int beforeButton = 0; // holds the previous pressed button      
            unsigned int valButton = 0;    // retrieve the pressed buttons
            unsigned int offset = 0;       // holds the display position
            unsigned int leftButton;       // holds the pressed button (default left gear)
            unsigned int rightButton;      // holds the pressed button (default right speed)
            unsigned long timeButton;      // holds the first pressed button time
          
            byte speeddata = 0;         // marker that new data are available
            byte geardata = 0;          // marker that new data are available 
            byte rpmdata = 0;           // marker that new data are available
            byte oildata = 0;           // marker that new data are available
            byte waterdata = 0;           // marker that new data are available
            byte fueldata = 0;           // marker that new data are available
            byte lapdata = 0;           // marker that new data are available
            byte positiondata = 0;           // marker that new data are available
          
            char* neutral = "n";        // sets the character for neutral
            // char* neutral = "0";        // sets the character for neutral
            char* reverse = "r";        // sets the character for reverse
             
            char* namesz = "StArt uP"; // sets a custom logo start up banner
        
            ////////////////////////////////////////////////////////////////////////////////
            // INITIALIZATION
            ////////////////////////////////////////////////////////////////////////////////
            void setup()
            {
              // serial initialization
              Serial.begin(115200);
    
              timeButton = millis();
                    
              // initialize the screen with leds test
              module.clear();                       // clears the display from garbage if any
              module.setChars(namesz);           // prints the banner
              delay(2000);                                 // small delay 2 sec
              module.clear();                       // clears the display
    
              // LED SWEEP - Archie
            
              module.setLEDs(0b00000001 , 0b00000000); // GREEN LEDS SWEEP
              delay(75);
              module.setLEDs(0b00000010 , 0b00000000);
              delay(75);
              module.setLEDs(0b00000100 , 0b00000000);
              delay(75);
              module.setLEDs(0b00001000 , 0b00000000);
              delay(75);
              module.setLEDs(0b00010000 , 0b00000000);
              delay(75);
              module.setLEDs(0b00100000 , 0b00000000);
              delay(75);
              module.setLEDs(0b01000000 , 0b00000000);
              delay(75);
              module.setLEDs(0b10000000 , 0b00000000);
              delay(75);      
              module.setLEDs(0b00000000 , 0b10000000); // RED LEDS SWEEP
              delay(75);
              module.setLEDs(0b00000000 , 0b01000000);
              delay(75);
              module.setLEDs(0b00000000 , 0b00100000);
              delay(75);
              module.setLEDs(0b00000000 , 0b00010000);
              delay(75);
              module.setLEDs(0b00000000 , 0b00001000);
              delay(75);
              module.setLEDs(0b00000000 , 0b00000100);
              delay(75);
              module.setLEDs(0b00000000 , 0b00000010);
              delay(75);
              module.setLEDs(0b00000000 , 0b00000001);
              delay(75);
              module.setLEDs(0b00000000 , 0b00000000);
              delay(150);
              // END OF SWEEP
              module.setLEDs(0b00000000 , 0b11111111); // ALL RED
              delay(350);
              module.setLEDs(0b11111111 , 0b00000000); // ALL GREEN
              delay(350);
              module.setLEDs(0b00000000 , 0b00000000); // turn off all leds
           
              // read saved display config
              valButton = EEPROM.read(1020);
              rightButton = valButton;
              valButton = EEPROM.read(1021);
              leftButton = valButton;
              // if EEPROM empty
              if (rightButton == 255 && leftButton == 255){
                leftButton = btnGear;
                rightButton = btnSpeed;
              }
              // show saved display config
              butDisp(leftButton,1); // Moved in one Segment - Archie
              butDisp(rightButton,6);  // Move in one Segment - Archie
              delay(1000);
              module.clear(); 
            
            }
         
            ////////////////////////////////////////////////////////////////////////////////
            ///////////////////////////////// Main Loop ////////////////////////////////////
            ////////////////////////////////////////////////////////////////////////////////
            void loop()
            ////////////////////////////////////////////////////////////////////////////////
            {
    
              // read input data
              readSerialData();
            
              // read pressed button
              buttons();
    
              // update dashboard
              dashboard();
    
            }
         
            ////////////////////////////////////////////////////////////////////////////////
            // Procedure: read serial data
            ////////////////////////////////////////////////////////////////////////////////
            void readSerialData()
            ////////////////////////////////////////////////////////////////////////////////
            {
              byte Data[5]={'0','0','0','0','0'};
    
              // parse the buffer
              if (Serial.available()>4){
                Data[0]=Serial.read();                   // read command
                if (Data[0]=='M'){                       // if rpm data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  rpm = NormalizeData(Data);
                  rpmdata=1;                             // we got new data!     
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }
                if (Data[0] == 'S' ){                    // if speed data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  carspeed = NormalizeData(Data);
                  speeddata=1;                           // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }
                if (Data[0] == 'G' ){                    // if gear data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  gear = NormalizeData(Data);
                  geardata=1;                            // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'O' ){                    // if oil data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  oil = NormalizeData(Data);
                  oildata=1;                             // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'W' ){                    // if water data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  water = NormalizeData(Data);
                  waterdata=1;                           // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'F' ){                    // if fuel data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  fuel = NormalizeData(Data);
                  fueldata=1;                            // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'L' ){                    // if lap data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  lap = NormalizeData(Data);
                  lapdata=1;                             // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'P' ){                    // if position data
                  Data[1]=Serial.read();                 // store high byte
                  Data[2]=Serial.read();                 //
                  Data[3]=Serial.read();                 //
                  Data[4]=Serial.read();                 // store low byte
                  posit = NormalizeData(Data);
                  positiondata=1;                        // we got new data!
                  if (Serial.available()>4){
                    Data[0]=Serial.read();               // re-read command
                  }
                }           
                if (Data[0] == 'Z' ){                      // if Shutdown - Output
                  Serial.flush();
                  rpmmax=5000;                             // reset rpmmax
                  module.clear();                          // clear display 
                  module.setLEDs(0b00000000 , 0b00000000); // clear leds
                }           
              }
              if (Serial.available()>60) Serial.flush();
            }
    
            ////////////////////////////////////////////////////////
            // Procedure: display values
            ////////////////////////////////////////////////////////
            void dashboard()
            ////////////////////////////////////////////////////////
            { 
              if (speeddata == 1) {
                // filter of negative value
                // reported from 65535 to down in some games
                if (carspeed > 50000){                            // reverse velocity in some games are negative value
                  carspeed = 65536 - carspeed;                    // convert positive with 16bit value
                }
                if (leftButton == btnSpeed) {
                  module.setNumberPad(carspeed,2,3);              // displays numerical the speed - Moved in One Segment - Archie.
                }
                if (rightButton == btnSpeed) {
                  module.setNumberPad(carspeed,6,3);              // displays numerical the speed - Moved in One Segment - Archie.
                }          
                // if (carspeed == 0){
                //   module.setChars("0",7);
                // }          
                speeddata=0;         
              }
              if (geardata == 1) {
       
                if (leftButton == btnGear) {
                  offset = 1;     // Moved in one Segment - Archie
                }
                if (rightButton == btnGear) {
                  offset = 6;    // Moved in one Segment - Archie
                }          
                if (leftButton == btnGear || rightButton == btnGear) {
                  if (gear >= 1 and gear <10 ){       
                    module.setNumber(gear,offset);                        // displays numerical value of the current gear
         
                  }
                  if (gear == 0){
                    module.setChars(neutral,offset);                      // displays the character for neutral
                  }
                  if (gear == (65535)){                                   // -1 that reprecents reverse rollover so...
                    module.setChars(reverse,offset);                      // displays the character for reverse
                  }
                }
                geardata=0;
              }
              if (rpmdata == 1) {
              
                if (leftButton == btnRPM) {
                  module.setNumberPad(rpm,3,4);
                }
                if (rightButton == btnRPM) {
                  module.setNumberPad(rpm,7,5);
                }          
                // auto set max rpm
                // with filter of negative value
                // reported from 65535 to down in some games
                if (rpm>rpmmax && rpm<50000) {
                  rpmmax=rpm;
                }
                rpmleds = map(rpm,0,rpmmax*1.1,0,9);              // distributes the rpm level to the 8 leds + 1 for shift change
                if (rpmleds==0){
                  module.setLEDs(0b00000000 , 0b00000000);
                }
                if (rpmleds==1){
                  module.setLEDs(0b00000001 , 0b00000000 );
                }
                if (rpmleds==2){
                  module.setLEDs(0b00000011 , 0b00000000 );
                }
                if (rpmleds==3){
                  module.setLEDs(0b00000111 , 0b00000000 );
                }
                if (rpmleds==4){
                  module.setLEDs(0b00001111 , 0b00000000);
                }
                if (rpmleds==5){
                  module.setLEDs(0b00011111 , 0b00000000);
                }
                if (rpmleds==6){
                  module.setLEDs(0b00011111 , 0b00100000 );
                }
                if (rpmleds==7){
                  module.setLEDs(0b00011111 , 0b01100000 );
                }
                if (rpmleds==8){
                  module.setLEDs(0b11111111 , 0b1111111111 );
                }
                rpmdata=0;
              }
              if (oildata == 1) {
                if (leftButton == btnOIL) {
                  module.setNumberPad(oil,2,3);
                }
                if (rightButton == btnOIL) {
                  module.setNumberPad(oil,7,3);
                }          
                oildata=0;         
              }
              if (waterdata == 1) {
                if (leftButton == btnWater) {
                  module.setNumberPad(water,2,3);
                }
                if (rightButton == btnWater) {
                  module.setNumberPad(water,7,3);
                }          
                waterdata=0;         
              }
              if (fueldata == 1) {
                if (leftButton == btnFuel) {
                  module.setNumberPad(fuel,1,2);
                }
                if (rightButton == btnFuel) {
                  module.setNumberPad(fuel,7,2);
                }          
                fueldata=0;         
              }
              if (lapdata == 1) {
                if (leftButton == btnLAP) {
                  module.setNumberPad(lap,1,2);
                }
                if (rightButton == btnLAP) {
                  module.setNumberPad(lap,7,2);
                }          
                lapdata=0;
              }
              if (positiondata == 1) {
                if (leftButton == btnPosition) {
                  module.setNumberPad(posit,1,2);
                }
                if (rightButton == btnPosition) {
                  module.setNumberPad(posit,7,2);
                }          
                positiondata=0;
              }
            }
    
            ////////////////////////////////////////////////////////
            // Procedure: read pushed button
            ////////////////////////////////////////////////////////
            void buttons()
            ////////////////////////////////////////////////////////
            {      
              valButton = module.getButtons();
              if (valButton > 0 && valButton != beforeButton){
                // if second button
                if (millis()-timeButton < 3000){
                  // store slection
                  leftButton = valButton;
                  EEPROM.write(1021,leftButton);
                  //
                  butDisp(leftButton,0);
                  delay(300);
                  module.clear();
                }
                // if first button
                if (millis()-timeButton > 3000){
                  module.clear();
                  // store selection
                  rightButton = valButton;
                  EEPROM.write(1020,rightButton);            
                  leftButton = 0;
                  EEPROM.write(1021,leftButton);            
                  //
                  butDisp(rightButton,7);
                  delay(300);
                  module.clear();
                  timeButton = millis();            
                }
              }
              beforeButton = valButton;
            }
          
            ////////////////////////////////////////////////////////////////////////////////
            // Function: display select function
            ////////////////////////////////////////////////////////////////////////////////
            void butDisp(int iButton,int off){
            ////////////////////////////////////////////////////////////////////////////////
                  if (iButton == btnSpeed){
                      module.setChars("S",off);
    
                  }
                  if (iButton == btnGear){
                      module.setChars("G",off);
                  
                  }
                  if (iButton == btnRPM){
                      module.setChars("r",off);
    
                  }
                  if (iButton == btnOIL){
                      module.setChars("O",off);
    
                  }
                  if (iButton == btnWater){
                      module.setChars("H",off);
    
                  }
                  if (iButton == btnFuel){
                      module.setChars("F",off);
    
                  }
                  if (iButton == btnLAP){
                      module.setChars("L",off);
    
                  }
                  if (iButton == btnPosition){
                      module.setChars("P",off);
    
                  }
            }
          
            ////////////////////////////////////////////////////////////////////////////////
            // Function: convert Hex to Dec
            ////////////////////////////////////////////////////////////////////////////////
            unsigned int NormalizeData(byte x[5])
            ////////////////////////////////////////////////////////////////////////////////
            {
            unsigned int result;
    
            for (int i=1; i<5; i++)
            {
              if (x[i]>47 && x[i]<58 ){   //for xA to xF
                x[i]=x[i]-48;
              }                     
              if (  x[i]>64 && x[i]<71 ){ //for x0 to x9
                x[i]=x[i]-55;             
              }
            }  
            result = (x[1]*16*16*16+x[2]*16*16+x[3]*16+x[4]);
            return result;
            }
          
    
    • Like Like x 1
    • Winner Winner x 1
    Last edited: Apr 24, 2015
  4. Archie

    Archie Eternal tinkerer

    Joined:
    Dec 31, 2014
    Messages:
    1,081
    Location:
    Wollongong, NSW, AU
    Balance:
    3,616Coins
    Ratings:
    +1,366 / 4 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    In AC.. the Gear read out on the TM1638 is One higher than the actual game is displaying, so you have to adjust the Output in GameDash.

    The code for this (enter into the GameDash Pencil Icons for DASH3) is:

    TOHEX
    MATH - 1
    PAD 4 0

    This fails when you go into Reverse (shows Neutral) but I can live with that.. I know the difference between a car going forwards and backwards... :D
    • Informative Informative x 1
  5. Archie

    Archie Eternal tinkerer

    Joined:
    Dec 31, 2014
    Messages:
    1,081
    Location:
    Wollongong, NSW, AU
    Balance:
    3,616Coins
    Ratings:
    +1,366 / 4 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    This is the part in TM1638.h that needs to change to determine the pins. I used 24-22 on the digital connector of the Arduino as 5V and GND is also accessible from this side.

    Code:
    #define PA2 2 //D24 = DIO
    #define PA1 1 //D23 = CLK
    #define PA0 0 //D22 = STB0
    //
    #define TM_OUT PORTA
    #define TM_IN PINA
    #define TM_DDR DDRA
    #define TM_BIT_STB _BV(PA0)
    #define TM_BIT_CLK _BV(PA1)
    #define TM_BIT_DAT _BV(PA2)
    
    • Informative Informative x 2
  6. maphf60

    maphf60 New Member

    Joined:
    Jul 18, 2012
    Messages:
    10
    Balance:
    - 487Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, Arduino
    Hello everyone,
    I introduce myself, I am maphf60 and I live north of Paris, I am retired and I am passionate about motor racing.
    For several months I have begun construction of a simulator 2 DOFs.
    I use engines windscreen wipers 24v, IBT-2 H-bridge and an Arduino Nano. The steering wheel is a Thrustmaster T300 RS + 2 TH8 and pedal parts.
    To improve overall, I would add a display Gear (gear ratio), Speed (speed) and rpm (revolutions per minute engine). For this I use TM1638 + Arduino Nano.

  7. maphf60

    maphf60 New Member

    Joined:
    Jul 18, 2012
    Messages:
    10
    Balance:
    - 487Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, Arduino
    gameDash: M <dash2> S <dash1> G <Dash3> 20 ms
    Z00 (output)
    Dash1: MATH * 3.6 TOHEX PAD 4 0
    Dash2: TOHEX PAD 4 0
    Dash3: MATH - 1 4 0 TOHEX PAD
    Assetto Corsa and rfactor 2: Gear and rpm are displayed correctly but never Speed.
    Dirt Rally Gear only appears
    Project Cars: NOTHING
    It would be nice if someone could give me the solution to my problems.
    Thank you in advance hello.
  8. maphf60

    maphf60 New Member

    Joined:
    Jul 18, 2012
    Messages:
    10
    Balance:
    - 487Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, Arduino
    Hello, Archie.
    How to driver 2 modules TM1638.
    What modifications should be made in the TM1638 library.
    Thanks and greetings.
  9. Archie

    Archie Eternal tinkerer

    Joined:
    Dec 31, 2014
    Messages:
    1,081
    Location:
    Wollongong, NSW, AU
    Balance:
    3,616Coins
    Ratings:
    +1,366 / 4 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    @maphf60 - Hello! I'm sorry, it's been well over 18 months since I last played with Gamedash and the TM1638. I've forgotten most of it and I ended up taking all that stuff off my Sim when I got into VR.

    Can't help :(
  10. maphf60

    maphf60 New Member

    Joined:
    Jul 18, 2012
    Messages:
    10
    Balance:
    - 487Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, Arduino
    Hello Archie is still maphf60 with its problem TM1638 library.
    Library: TM1638_v1.02.
    What needs to be done to modify an arduino library?

    You know another person who could help me.
    Acknowledgments and sincere greetings
  11. noorbeast

    noorbeast VR - The Next Generation Staff Member Moderator

    Joined:
    Jul 13, 2014
    Messages:
    12,620
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    96,525Coins
    Ratings:
    +8,108 / 40 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
  12. maphf60

    maphf60 New Member

    Joined:
    Jul 18, 2012
    Messages:
    10
    Balance:
    - 487Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, Arduino
    Thanks a lot to Archie and Noorbeast for your help
    I will contact Soraz who is still working on TM1638
    Salutations to all
    • Like Like x 2
  13. Peter Lane

    Peter Lane New Member

    Joined:
    Dec 9, 2016
    Messages:
    4
    Location:
    UK
    Balance:
    90Coins
    Ratings:
    +4 / 0 / -0
    My Motion Simulator:
    Arduino
    Great looking project! I hope I can get mine looking as good.

    Sorry for the stupid question but, if I was to copy the code below and paste into Arduino sketch, would this work for me. I am also using a Tm1638 and currently I am using an example from Joao Ubaldo to run in rfactor.