RKS+CAN Adapter für CAN-Bus Sniffing
CAN-Interface
CAN Hardware, CAN Software, CAN Protokolle - CAN-Bus Forum für Dein CAN-Bus Projekt. CAN-Bus und Elektronik.

My golf5 custom dashboard


 
Neues Thema beginnen Auf Beitrag antworten Weitergeben, Thema teilen Lesezeichen setzen Druckansicht CANhack.de - Übersicht » Mikrocontroller und Elektronik, Programmierung
Autor Nachricht
muurman



CAN Hacker seit: 24.07.2016
Beiträge: 14
Karma: +4 / -1   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag21-09-2016, 19:47    Titel: My golf5 custom dashboard Antworten mit Zitat

I have put an 3.5inch tft in my dashboard.
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
CAN-Diagnose
Administrator
Administrator
Avatar-CAN-Diagnose

CAN Hacker seit: 07.06.2011
Beiträge: 538
Karma: +27 / -0   Danke, gefällt mir!
Wohnort: Ländle



Beitrag21-09-2016, 19:57    Titel: My golf5 custom dashboard Antworten mit Zitat

Hi, that is nice, but isn't the sense of a forum to put the information there instead of using it as link farm?

You are invited to use the "Datei auswählen" button below to upload your things. icon_razz.gif
Dipl.-Ing. (FH) Rainer Kaufmann - Kaufmann Automotive GmbH
CANhack.de CAN-Bus Interface RKS+CAN: CAN-Bus Interface
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden Website dieses Benutzers besuchen
muurman



CAN Hacker seit: 24.07.2016
Beiträge: 14
Karma: +4 / -1   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag22-09-2016, 19:50    Titel: foto and arduino code Antworten mit Zitat

I thought a link is better because this doesn't take resources on the server.
And there is a button to add an imaga as a link so... ?

but attached foto and arduino code.



Du bist nicht berechtigt diese Datei(en) zu sehen, logge Dich ein bzw. registriere Dich für erweiterte Rechte oder Status-Updates.

Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
muurman



CAN Hacker seit: 24.07.2016
Beiträge: 14
Karma: +4 / -1   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag22-09-2016, 19:51    Titel: My golf5 custom dashboard Antworten mit Zitat

Code:


#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GREY    0x5AEB

#define Achtergrond BLACK
#define Voorgrond   WHITE
#define Labels      MAGENTA
#define Waarden     WHITE

#include <mcp_can> // can-bus

#include <SPI>          // f.k. for Arduino-1.5.2
#include "Adafruit_GFX.h"// Hardware-specific library
#include <MCUFRIEND_kbv>


MCUFRIEND_kbv tft;


int KleurMeterRand = GREY;
int KleurMeterStreep = WHITE ;

int LaatsteTurboWaarde = 0 , LaatsteRPMWaarde = 0 , LaatsteSnelheidWaarde = 0;

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];

unsigned char rxBufSerieel[16];
//int Ypos=5;
int WaardenGrote=3;

long KmStand=0;
String strSerial="";
String tijd="00:00:00";
String Melding, KnipperLicht,Rem, HexString;
int coolant=0,coolantnew=0, tdruk=0, rpm=0,rpmnew=0 , snelheid=0, SnelheidVorig=0, olie=0,olienew=0 , brandstof=0;
int teller35b ,  teller351 ;
int uur , minuut , seconde ;
int Scherm=1;

// Meter

float M_SIZE=1;
float Yoffset=3.5;
float Xoffset=1;

float ltx = 0;    // Saved x coord of bottom of needle
uint16_t osx = M_SIZE*120, osy = M_SIZE*120; // Saved x & y coords
uint32_t updateTime = 0;       // time for next update

int MeterMin=-90 ,MeterMax=90;

int old_analog =  -999; // Value last displayed

int value[6] = {0, 0, 0, 0, 0, 0};
int old_value[6] = { -1, -1, -1, -1, -1, -1};
int d = 0;

int NeedleMin=-180;
int NeedleMax=180;
int i2 ;
int j=0;



MCP_CAN CAN0(10);                               // Set CS to pin 10

void drawBarTurbo (int nPer){
  int y = 136;
  if(nPer < LaatsteTurboWaarde){
    tft.fillRect(10 + nPer, y , LaatsteTurboWaarde - nPer, 10,  Achtergrond);     
  }
  else{
    tft.fillRect( 10 + LaatsteTurboWaarde, y , nPer - LaatsteTurboWaarde, 10 ,  WHITE);
  }   
  LaatsteTurboWaarde = nPer;   
}

void drawBarRPM (int nPer){
  int y = 211;
int   factor = 1;
  if(nPer < LaatsteRPMWaarde){
    tft.fillRect(10 + nPer, y , LaatsteRPMWaarde / factor - nPer / factor, 10,  Achtergrond);     
  }
  else{
    tft.fillRect( 10 + LaatsteRPMWaarde / factor, y , nPer - LaatsteRPMWaarde / factor, 10 ,  WHITE);
  }   
  LaatsteRPMWaarde = nPer;   
}


void drawBarSnelheid (int nPer){
  int y = 270+1;
  float factor = 1;
  if(nPer < LaatsteSnelheidWaarde){
    tft.fillRect(10 + nPer, y , LaatsteSnelheidWaarde * factor - nPer * factor, 10,  Achtergrond);     
  }
  else{
    tft.fillRect( 10 + LaatsteSnelheidWaarde * factor, y , nPer - LaatsteSnelheidWaarde * factor, 10 ,  WHITE);
  }   
  LaatsteSnelheidWaarde = nPer;   
}

void TFTprint(int X, int Y,  uint16_t Kleur ,int tsize, String txt)
{
     tft.setTextSize(tsize);
     tft.setTextColor(Kleur);
     tft.setCursor(X, Y);
     tft.print(txt);
  }

void plotNaald(int NaaldPunt, float Xoffset, float Yoffset, float M_SIZE  ,char Kleur )
{
   float sx = cos((NaaldPunt - 90) * 0.0174532925 );
   float sy = sin((NaaldPunt - 90) * 0.0174532925 );

   uint16_t x1 = sx * M_SIZE*100 + M_SIZE*120*Xoffset;
   uint16_t y1 = sy * M_SIZE*100 + M_SIZE*140*Yoffset;

   tft.drawLine(120*Xoffset*M_SIZE, 140*Yoffset*M_SIZE, x1, y1, Kleur);
}

void plotKorteNaald(int NaaldPunt, float Xoffset, float Yoffset, float M_SIZE  ,char Kleur )
{
    float sx = cos((NaaldPunt - 90) * 0.0174532925 );
    float sy = sin((NaaldPunt - 90) * 0.0174532925 );
    int tl = 20;
    uint16_t x0 = sx * (M_SIZE*100 - tl) + M_SIZE*120*Xoffset;
    uint16_t y0 = sy * (M_SIZE*100 - tl) + M_SIZE*140*Yoffset;
    uint16_t x1 = sx * M_SIZE*100 + M_SIZE*120*Xoffset;
    uint16_t y1 = sy * M_SIZE*100 + M_SIZE*140*Yoffset;
    tft.drawLine(x0, y0, x1, y1, Kleur);
 
}

void streepMeter(float Xoffset,float Yoffset,float M_SIZE,int i,int tl)
{

    float sx = cos((i - 90) * 0.0174532925 );
    float sy = sin((i - 90) * 0.0174532925 );
    //tl = +
    uint16_t x0 = sx * (M_SIZE*100 + tl) + M_SIZE*120*Xoffset;
    uint16_t y0 = sy * (M_SIZE*100 + tl) + M_SIZE*140*Yoffset;
    uint16_t x1 = sx * M_SIZE*100 + M_SIZE*120*Xoffset;
    uint16_t y1 = sy * M_SIZE*100 + M_SIZE*140*Yoffset;
    tft.drawLine(x0, y0, x1, y1, KleurMeterStreep);
}

void WaardeMeter(float Xoffset,float Yoffset,float M_SIZE,int i,String txt)
{
   int tl=15;
    float sx = cos((i - 90) * 0.0174532925 );
    float sy = sin((i - 90) * 0.0174532925 );
   
    uint16_t x0 = sx * (M_SIZE*100 + tl) + M_SIZE*120*Xoffset;
    uint16_t y0 = sy * (M_SIZE*100 + tl) + M_SIZE*140*Yoffset;
    uint16_t x1 = sx * M_SIZE*100 + M_SIZE*120*Xoffset;
    uint16_t y1 = sy * M_SIZE*100 + M_SIZE*140*Yoffset;
    int x = x0-txt.length()/2*18;
    TFTprint( x, y0-20,Waarden,2,txt);
   
}



void analogMeter(float Xoffset,float Yoffset,float M_SIZE)
{


  // Draw ticks every 5 degrees from -50 to +50 degrees (100 deg. FSD swing)
  for (int i = MeterMin; i <MeterMax> vorig)
 
  for ( int j = vorig; j < huidig; j +=1 )
  {
   
   //int jj = j * 0.036 - MeterMax;
   int jj = j  - MeterMax;
    plotKorteNaald(jj,Xoffset,Yoffset,M_SIZE,BLUE); }

if (huidig <vorig> huidig; j -=1 )
  {
    //int jj = j * 0.036 - MeterMax;
   
    int jj = j  - MeterMax;
    plotKorteNaald(jj,Xoffset,Yoffset,M_SIZE,Achtergrond); }

 
}






void setup()
{

  Serial.begin(115200);
// Serial.println("MCP2515 Library Receive Example...");


  tft.reset();

uint16_t identifier = tft.readID();

  // tft.begin(37697);
   //tft.begin(37672);  //test
   //tft.begin(0x9325);  //test
  //  tft.begin(0x9481); // 0x9488 3.5inch
   tft.begin(identifier);
   
  tft.fillRect(0,0,320,480,Achtergrond);
  TFTprint(10,10,Labels,2,"Welkom Bestuurder");
  TFTprint(10,30,Labels,2,"Gaspedaal zit rechts");
  TFTprint(10,50,Labels,2,"Koppeling zit links");
  TFTprint(10,70,RED,2,"Rem .. afblijven");
 
  delay(6000);
  CAN0.begin(CAN_100KBPS);                       // init can bus :
 
  scherm1Opbouw();
 
   
teller35b = 10;
teller351=10;

  KnipperLicht = "<>";
  TFTprint(196,430,YELLOW,3,KnipperLicht);
  delay(1000);
  TFTprint(196,430,Achtergrond,3,KnipperLicht);
analogWrite(A5,1023);
 
 
   
}
void scherm1Opbouw()
{
  tft.fillRect(0,0,320,480,Achtergrond);
 
  TFTprint(5,50,Labels,2,"Coolant/Oil");
  TFTprint(5,85,Labels,2,"Turbo");
  TFTprint(130,85,Labels,2,"Fuel");
  TFTprint(5,125,Labels,2,"RPM");
  M_SIZE=1;
  Yoffset=2.9;
  Xoffset=1.2;
  analogMeter(Xoffset,Yoffset,M_SIZE);

  for (int i = 0; i < 5000; i += 100)
  {
  j = i * 0.036 - MeterMax;
  int tl = 10;
  if ( i == 1000 or i == 1500 or i == 2000 or i == 2500 or i == 3000 or i == 3500 or i == 4000 ) {tl=20;}
  if ( i == 2500) {WaardeMeter(Xoffset,Yoffset,M_SIZE,j,"2500");}
  streepMeter(Xoffset,Yoffset,M_SIZE,j,tl);
  } 
}

void scherm1Waarden()
{
   
      CAN0.readMsgBuf(&len, rxBuf);              // Read data: len = data length, buf = data byte(s)
      rxId = CAN0.getCanId();                    // Get message ID
if ( rxId == 0x10 )
{   
    // vanaf andere arduino


if ( rxId == 0x621 )
{   
  // byte 0 handrem geeft 20
  // ook wellicht deur
   
    TFTprint(190,85,Achtergrond,WaardenGrote,String(brandstof));
     brandstof = rxBuf[3] ;
    bitWrite(brandstof,7,0);
     TFTprint(190,85,Waarden,WaardenGrote,String(brandstof));
    TFTprint(210,150,Achtergrond,6,"T");
    if ( brandstof <6> 1 )
   {
    teller35b = 0;
    coolantnew = (rxBuf[3]-32)/1.8;
    if (coolant-coolantnew>2 or coolant-coolantnew<2>20 or rpmnew-rpm<20 )
      {
        TFTprint(60,125,Achtergrond,WaardenGrote,String(rpm));
        MeterWaarde(rpm * 0.036,rpmnew * 0.036);
        rpm=rpmnew;
        if ( rpm <4000> 1700) {TFTprint(60,125,Waarden,WaardenGrote,String(rpm));}
        if ( rpm <1700> 4000 ) {TFTprint(60,125,MAGENTA,WaardenGrote,String(rpm));}
       
      }
   }
  }

if ( rxId == 0x555 )
{
   
      TFTprint(70,85,Achtergrond,WaardenGrote,String(tdruk));
      tdruk = rxBuf[4];
      TFTprint(70,85,Waarden,WaardenGrote,String(tdruk));
     
      olienew = (rxBuf[7]-32)/1.8;
      if (olienew-olie>2 or olienew-olie<2> 1)
    // if ( SnelheidVorig != snelheid )
     {
      teller351=0;

      snelheid=(rxBuf[2]*256+(rxBuf[1]-1))/200;
      //MeterWaarde(SnelheidVorig,snelheid);
      TFTprint(100,350,Achtergrond,6,String(SnelheidVorig));
      TFTprint(100,350,Waarden,6,String(snelheid)); 
      SnelheidVorig = snelheid;
      }
   
   }



if ( rxId == 0x65D )
{
    TFTprint(5,12,Achtergrond,3,String(KmStand));
    KmStand=(rxBuf[3]*65536+rxBuf[2]*256+rxBuf[1]);
    TFTprint(5,12,Waarden,3,String(KmStand));

  uur=00 ; minuut=00 ; seconde=00 ;
  bitWrite(uur,4,bitRead(rxBuf[6],0));
  bitWrite(uur,3,bitRead(rxBuf[5],7));
  bitWrite(uur,2,bitRead(rxBuf[5],6));
  bitWrite(uur,1,bitRead(rxBuf[5],5));
  bitWrite(uur,0,bitRead(rxBuf[5],4));

  bitWrite(minuut,5,bitRead(rxBuf[6],6));
  bitWrite(minuut,4,bitRead(rxBuf[6],5));
  bitWrite(minuut,3,bitRead(rxBuf[6],4));
  bitWrite(minuut,2,bitRead(rxBuf[6],3));
  bitWrite(minuut,1,bitRead(rxBuf[6],2));
  bitWrite(minuut,0,bitRead(rxBuf[6],1));

//  bitWrite(seconde,5,bitRead(rxBuf[7],4));
//  bitWrite(seconde,4,bitRead(rxBuf[7],3));
//  bitWrite(seconde,3,bitRead(rxBuf[7],2));
//  bitWrite(seconde,2,bitRead(rxBuf[7],1));
//  bitWrite(seconde,1,bitRead(rxBuf[7],0));
//  bitWrite(seconde,0,bitRead(rxBuf[6],7));

TFTprint(216,12,Achtergrond,3,tijd);
tijd = String(uur) + ":" + String(minuut)   ;
TFTprint(216,12,Waarden,3,tijd);
}

if ( rxId == 0x531  )
  {
    TFTprint(6,430,Achtergrond,4,Melding);
    TFTprint(196,430,Achtergrond,6,KnipperLicht);

    if ( ( rxBuf[1] == 0x11 ) or ( rxBuf[1] == 0x51 ) )
    {
     KnipperLicht = "<TFTprint> 1 )
   {
    teller35b = 0;
    coolantnew = (rxBuf[3]-32)/1.8;
    if (coolant-coolantnew>2 or coolant-coolantnew<2>20 or rpmnew-rpm<20 )
      {
        TFTprint(60,160,Achtergrond,6,String(rpm));
        rpm=rpmnew;
        if ( rpm <4000> 1700) {TFTprint(60,160,Waarden,6,String(rpm));}
        if ( rpm <1700> 4000 ) {TFTprint(60,160,MAGENTA,6,String(rpm));}
        drawBarRPM(rpm/20);
       
      }
   }
  }

if ( rxId == 0x555 )
{
   
      TFTprint(70,85,Achtergrond,6,String(tdruk));
      tdruk = rxBuf[4];
      TFTprint(70,85,Waarden,6,String(tdruk));
      drawBarTurbo(String(tdruk).toInt());
     
      olienew = (rxBuf[7]-32)/1.8;
      if (olienew-olie>2 or olienew-olie<2> 1)
    // if ( SnelheidVorig != snelheid )
     {
      teller351=0;

      snelheid=(rxBuf[2]*256+(rxBuf[1]-1))/200;
      drawBarSnelheid(snelheid);
      //MeterWaarde(SnelheidVorig,snelheid);
      TFTprint(80,350,Achtergrond,10,String(SnelheidVorig));
      TFTprint(80,350,Waarden,10,String(snelheid)); 
      SnelheidVorig = snelheid;
      }
   
   }



if ( rxId == 0x65D )
{
    TFTprint(5,12,Achtergrond,3,String(KmStand));
    KmStand=(rxBuf[3]*65536+rxBuf[2]*256+rxBuf[1]);
    TFTprint(5,12,Waarden,3,String(KmStand));

  uur=00 ; minuut=00 ; seconde=00 ;
  bitWrite(uur,4,bitRead(rxBuf[6],0));
  bitWrite(uur,3,bitRead(rxBuf[5],7));
  bitWrite(uur,2,bitRead(rxBuf[5],6));
  bitWrite(uur,1,bitRead(rxBuf[5],5));
  bitWrite(uur,0,bitRead(rxBuf[5],4));

  bitWrite(minuut,5,bitRead(rxBuf[6],6));
  bitWrite(minuut,4,bitRead(rxBuf[6],5));
  bitWrite(minuut,3,bitRead(rxBuf[6],4));
  bitWrite(minuut,2,bitRead(rxBuf[6],3));
  bitWrite(minuut,1,bitRead(rxBuf[6],2));
  bitWrite(minuut,0,bitRead(rxBuf[6],1));

//  bitWrite(seconde,5,bitRead(rxBuf[7],4));
//  bitWrite(seconde,4,bitRead(rxBuf[7],3));
//  bitWrite(seconde,3,bitRead(rxBuf[7],2));
//  bitWrite(seconde,2,bitRead(rxBuf[7],1));
//  bitWrite(seconde,1,bitRead(rxBuf[7],0));
//  bitWrite(seconde,0,bitRead(rxBuf[6],7));

TFTprint(216,12,Achtergrond,3,tijd);
tijd = String(uur) + ":" + String(minuut)   ;
TFTprint(216,12,Waarden,3,tijd);
}

if ( rxId == 0x531  )
  {
    TFTprint(6,430,Achtergrond,4,Melding);
    TFTprint(196,430,Achtergrond,6,KnipperLicht);

    if ( ( rxBuf[1] == 0x11 ) or ( rxBuf[1] == 0x51 ) )
    {
     KnipperLicht = "<";
     TFTprint(196,430,YELLOW,6,KnipperLicht);
    }

    if (( rxBuf[1] == 0x12 ) or ( rxBuf[1] == 0x52 ) )
    {
     KnipperLicht = ">";
     TFTprint(196,430,YELLOW,6,KnipperLicht);
    }
   
     
    if ( rxBuf[0] == 0x0 )
    {
     Melding = "L";
     TFTprint(6,430,RED,4,Melding);
    }

    if ( rxBuf[0] == 0xc3 )
    {
     Melding = "L";
     TFTprint(6,430,GREEN,4,Melding);
    }
  }
   
 
}



void logserieel()
{
  Serial.println("");
  Serial.print(rxId,HEX);
  Serial.print(",");
      for(int i = 0; i<len; i++)                // Print each byte of the data
      {
        if(rxBuf[i] < 0x10)                     // If data byte is less than 0x10, add a leading zero
        {
          Serial.print("0");
        }
       Serial.print(rxBuf[i],HEX);
       Serial.print(",");
      }
}

void logscherm()
{
//     TFTprint(0,265,Achtergrond,2,HexString);
//     HexString = String(rxBuf[0], HEX) + " "+String(rxBuf[1], HEX) + " "+String(rxBuf[2], HEX) + " "+String(rxBuf[3], HEX) + " "+String(rxBuf[4], HEX) + " " + String(rxBuf[5], HEX) + " " + String(rxBuf[6], HEX) + " " + String(rxBuf[7], HEX) ;
//     TFTprint(0,265,Waarden,2,HexString);
}

void loop()
{

if ( analogRead(A5) == 0 )
  {
    Scherm++ ;
    delay(500);
    analogWrite(A5,1023);
     tft.fillRect(0,0,320,480,Achtergrond);
    if ( Scherm == 3 ){Scherm = 1;}
    if (Scherm == 1 ) { scherm1Opbouw(); }
    if (Scherm == 2 ) { scherm2Opbouw(); }
  }

if (Scherm == 1 ) { scherm1Waarden() ; }
if (Scherm == 2 ) { scherm2Waarden() ; }



}


Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
CAN-Diagnose
Administrator
Administrator
Avatar-CAN-Diagnose

CAN Hacker seit: 07.06.2011
Beiträge: 538
Karma: +27 / -0   Danke, gefällt mir!
Wohnort: Ländle



Beitrag22-09-2016, 20:46    Titel: My golf5 custom dashboard Antworten mit Zitat

Looks very nice, which information do/can you show on your TFT?

Best, Rainer
Dipl.-Ing. (FH) Rainer Kaufmann - Kaufmann Automotive GmbH
CANhack.de CAN-Bus Interface RKS+CAN: CAN-Bus Interface
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden Website dieses Benutzers besuchen
muurman



CAN Hacker seit: 24.07.2016
Beiträge: 14
Karma: +4 / -1   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

CAN-Diagnose gefällt das.
Beitrag23-09-2016, 13:00    Titel: My golf5 custom dashboard Antworten mit Zitat

I can show everything which i would if i know what all can-bus messages mean.
At this moment i show:
km's the car has driven
time
coolant temp
oil temp
turbo pressure
fuel status
rpm
speed
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Mackhack



CAN Hacker seit: 09.10.2012
Beiträge: 17
Karma: +0 / -0   Danke, gefällt mir!
Wohnort: Offline

CAN Support

Beitrag01-01-2017, 4:09    Titel: My golf5 custom dashboard Antworten mit Zitat

Very interesting. Kudos to you for your ingenuity and work.
Mackhack
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
irobles



CAN Hacker seit: 13.06.2017
Beiträge: 3
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag14-06-2017, 13:31    Titel: My golf5 custom dashboard Antworten mit Zitat

Hello,

Which can-bus shield do you use? It has 2 can interfaces or only one?

Thanks
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
jeroenveer



CAN Hacker seit: 23.07.2014
Beiträge: 3
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag13-11-2017, 15:52    Titel: My golf5 custom dashboard Antworten mit Zitat

Cool
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Splasher



CAN Hacker seit: 02.02.2018
Beiträge: 1
Karma: +0 / -0   Danke, gefällt mir!


Kostenloser Account, kein CAN Entwicklungs-Support

Beitrag02-02-2018, 10:15    Titel: My golf5 custom dashboard Antworten mit Zitat

Wow! Looks very nice!

Respect for your work and thanks a lot for the code!
Nach oben CAN Hacker - Profil anzeigen Private Nachricht senden  
Neues Thema beginnen Auf Beitrag antworten Weitergeben, Thema teilen Lesezeichen setzen Druckansicht CANhack.de - Übersicht » Mikrocontroller und Elektronik, Programmierung
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.