Leave Your Message

【Código Aberto】Solução de Head-Up Display para Automóveis Baseada em Tela Inteligente T5L

26/09/2024

--De DWIN Fórum de desenvolvedores

Hoje, destacamos um caso premiado do fórum de desenvolvedores da DWIN: a solução de head-up display para carros com tecnologia T5L. A solução integra a tela COF da DWIN e a tecnologia T5L. PODE A porta exibe dados de velocidade e RPM do veículo em tempo real, obtidos diretamente da porta de diagnóstico OBDII. Isso proporciona aos motoristas um auxílio visual prático e intuitivo durante a viagem.

[Demonstração de Material de Interface do Usuário]

1.png

[Projeto de Design de Interface Gráfica do Usuário]

2.jpg

[Projeto de código de programa]

Obtenha dados de velocidade e RPM do veículo através da interface CAN T5L. Uma parte do código de referência é a seguinte:

vazio principal(vazio)

{

T5LInit();

T0_Init(); // Configurar o temporizador 0

EA = 1;

// Aguarde Fonte de energia estabilizar

TemporizadorExtDelayMs(2000);

GaugeViewInit();

enquanto (1)

{

//OBDII O sistema inicia o processo de reconhecimento

se (ObdiiSysEnter())

{

quebrar;

}

}

//Entrada de função primária do HUD

GaugeViewFunc();

}

 

void GaugeViewFunc(void)

{

uint8_t rawDataBuff[256];

uint8_t resultBuff[5];

float vehicleSpeed ​​= 0;

float rotateSpeed ​​= 0;

uint32_t tempData = 0;

enquanto (1)

{

memset(rawDataBuff, 0, 256);

// ler velocidade do veículo

se (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0C))

{

ObdiiLdsCalResult(0x0C, rawDataBuff, resultBuff);

tempData = resultBuff[3];

tempData = resultBuff[2] + (tempData

tempData = resultBuff[1] + (tempData

tempData = resultBuff[0] + (tempData

rotateSpeed ​​= (float)tempData;

GaugeViewRotateSpeedSet(rotateSpeed);

}

memset(rawDataBuff, 0, 256);

// Ler a velocidade do veículo

se (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0D))

{

ObdiiLdsCalResult(0x0D, rawDataBuff, resultBuff);

tempData = resultBuff[3];

tempData = resultBuff[2] + (tempData

tempData = resultBuff[1] + (tempData

tempData = resultBuff[0] + (tempData

velocidadeDoVeículo = (float)dadosTempo;

GaugeViewPointerSet((uint8_t)vehicleSpeed);

GaugeViewVehicleSpeedSet(vehicleSpeed);

}

}

}

void GaugeViewFunc(void)

{

uint8_t rawDataBuff[256];

uint8_t resultBuff[5];

float vehicleSpeed ​​= 0;

float rotateSpeed ​​= 0;

uint32_t tempData = 0;

enquanto (1)

{

memset(rawDataBuff, 0, 256);

// Leia as RPMs

se (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0C))

{

ObdiiLdsCalResult(0x0C, rawDataBuff, resultBuff);

tempData = resultBuff[3];

tempData = resultBuff[2] + (tempData

tempData = resultBuff[1] + (tempData

tempData = resultBuff[0] + (tempData

rotateSpeed ​​= (float)tempData;

GaugeViewRotateSpeedSet(rotateSpeed);

}

memset(rawDataBuff, 0, 256);

// Ler a velocidade do veículo

se (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0D))

{

ObdiiLdsCalResult(0x0D, rawDataBuff, resultBuff);

tempData = resultBuff[3];

tempData = resultBuff[2] + (tempData

tempData = resultBuff[1] + (tempData

tempData = resultBuff[0] + (tempData

velocidadeDoVeículo = (float)dadosTempo;

GaugeViewPointerSet((uint8_t)vehicleSpeed);

GaugeViewVehicleSpeedSet(vehicleSpeed);

}

}

}