【Código Aberto】Solução de Head-Up Display para Automóveis Baseada em Tela Inteligente T5L
--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]

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

[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);
}
}
}







