Boa tarde preciso untar 4 variável hexadecimal e formar um numero hexadecimal só.
Uso uma Arduino mega e um shiel Can bus.Etou lendo dados de um GPS 250k.
Por exemplo;
//***********************Lat Long******************************
if ( rxId == 0x18FEF302 ){
Lat_Long[0]= buf[0];
Lat_Long[1]= buf[1];
Lat_Long[2]= buf[2];
Lat_Long[3]= buf[3];
// 0x6B 0x75 0x24 0x3C
Latitude = ((unsigned long)buf[3] 24 | buf[2] 16 | buf[1] 8 | buf[0]);
Serial.println(Latitude);
}
Juntando 0x6B 0x75 0x24 0x3C = 1802839100
pegando este valor ((1802839100)*0,000001)-210=-29.71609 so que ele ta pegando em vez do 0x75 pega um zero no luga e acaba ficando a latitude em -30.4828612
O problema tá aqui Latitude = ((unsigned long)buf[3] 24 | buf[2] 16 | buf[1] 8 | buf[0]);
Se alguem puder me ajudar.
Tags:
Acabou não colando Certo o codigo é este que esta com problema.
((unsigned long)buf[3] 24 | buf[2] 16 | buf[1] 8 | buf[0]);
Boa noite,
acho que você ainda não entendeu que postar fragmentos de códigos aqui não faz sentido.
No seu tópico anterior:
"https://labdegaragem.com/forum/topics/juntar-4-variaveis-recebidas-pela-porta-serial",
eu orientei sobre a necessidade de fornecer as informações completas.
Acho que você já está está abusando da nossa boa vontade e da nossa paciência.
Ficar aqui pedindo informações para ajuda-lo tem limite.
Por exemplo:
Qual o formato da variável "Latitude "?
Qual o formato e tamanho da matriz "Lat_Long[]"?
Qual o formato e tamanho da matriz "buf[]"?
O que é e qual formato da variável "rxId"
Você pode explicar o que você pretendia com esta linha?
"Latitude = ((unsigned long)buf[3] 24 | buf[2] 16 | buf[1] 8 | buf[0]);"
Da próxima vez que pedir ajuda , se não vir bem documentada, vou escrever seu nome na minha lista de
"personas non gratas".
RV mineirim
Bom dia,
este seu post foi um bom exemplo que mostra claramente a razão da
recomendação de não postar nada de código na área de texto do tópico.
No seu código original a linha :
" Latitude = ((unsigned long)buf[3] 24 | buf[2] 16 | buf[1] 8 | buf[0]); "
tem vários duplos sinais de menor (<) significando shift left, mas ao postar a linha na
área de texto do tópico os sinais desapareceram e a linha ficou totalmente sem sentido.
Acho que agora você(s) entenderá(ão) a razão da recomendação.
O que é isto: " long unsigned int rxId; " , long int?
RV mineirin
Boa tarde.
Esta variavel é assim mesmo "O que é isto: " long unsigned int rxId; " , long int?"
Vi varios exemplos de Rede CanBus J1939 e usa a variavel deste jeito, e outra coisa eu uso este codigo faz anos nunca tive problema, mas agora tive que usar latitude e longitude no meu projeto e necessito fazer esta junção de variaveis.
https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/CAN...
Olá Felipe!
Embora você possa usar desta forma a declaração de um inteiro longo no C++, não é aconselhável, de vez que confunde.
Um long no C++ já é um inteiro, não há necessidade do int.
O melhor seria declarar :
unsigned long rxId ;
D. T. Ribeiro
Grande RV:
Acho até que mereceria ser sempre citado como exemplo, para enfatizar a necessidade de postar códigos somente no anexo e nunca na área de mensagem do post.
D. T. Ribeiro
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por