Juntar 4 variavel hexadecimal e formar um numero hexadecimal.

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.

Exibições: 313

Responder esta

Respostas a este tópico

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]);"

Ela está lexicalmente errada.

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

Boa noite.

Pessoal desculpa não tinha entendido, mas prometo que não farei mais, como o codigo e muito grande postei trechos dele, mais uma vez peço desculpa o codigo esta anexo, fiz um resumo.

GPS_CanBus_250K.ino

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço