Bom dia Pessoal, tudo bem?

 Então estou a enviar para meu Arduino uma sequência de dados Hexadecimais, por exemplo:

 AB50D27399272A1457F5

 Nesta "String" temos AB como 1 Byte, 50 como outro Byte e assim vai....

AB sendo 1 Byte temos a sequência de bits: 10101011.

50 sendo 1 Byte temos a sequência de bits: 01010000. 

Eu preciso pegar todos os bits dessa sequência de bytes, isto daria:

10101011010100001101001001110011100110010010011100101010000101000101011111110101

E depois tratá-lo como DATA.

Alguém tem ideia de como fazer isto?

Eu vi que o arduino está pensando que A é um byte e B é outro, quando na verdade teria que ver AB como apenas 1 byte. Outra coisa é que se eu faço como teste uma variável byte receber AB ele também não verifica como apenas 1 Byte, eu tenho que colocar sempre o 0xAB para funcionar...

Antes de tudo, muito obrigado!

Exibições: 2437

Responder esta

Respostas a este tópico

Olá, ET.

   A questão está na definição do HEX. Ele é assim... Ele é a representação por caracteres (letras e numeros) de 4 bits. Se quer 8 bits precisa de 2 letras.

  Se quer extrair o valor das 2 letras e acumular como numero, num int, precisa do valor da primeira letra, multiplicar por seu "peso" e somar o valor da segunda letra. 

  Para poder converter de string hex para binário vc precisa converter mesmo cada letra. Desconheço que exista uma função pronta. Vc precisa fazer. Pode usar vários metodos. Passar por int antes pode ajudar. Se não conseguir ajudamos.

  Não entendi o tal formato DATA. Não é nativo do Arduino, é ?

  Veja também o topico:

http://labdegaragem.com/forum/topics/ajuda-converter-de-hexa-para-d...

  Onde se converte de hex para dec. Também é uma conversão sem bibliotecas prontas..

Bom dia, 

Os dados recebidos são no formato BYTE. 

https://www.arduino.cc/reference/pt/language/variables/data-types/b...

Para manipular os bits não é necessário a conversão em número binário. 

Veja as funções abaixo: 

Bits and Bytes

bit() 
bitClear() 
bitRead() 
bitSet() 
bitWrite() 
highByte() 
lowByte() 

Guilherme,

Comunicação em Hexadecimal é muito utilizada na computação!

Os microcontroladores se valem muito deste recurso para se comunicarem!

Eu fiz um vídeo sobre protocolo Hexadecimal com reconhecimento de voz utilizando o módulo de voz V3 com o Arduino

Confere lá

https://www.youtube.com/watch?v=xp0z5dHS364

Eu preciso no final ter em um vetor todos os meus Bytes, desta maneira:

arrayByte[0] -> Teria que ser -> 0xAB ou 171(AB em Decimal)

arrayByte[1] -> Teria que ser -> 0x50 ou 80(0x50 em Decimal)

Assim por diante..

Eu quero depois pegar os bits de cada posição do Array.

Array eu sei usar, o problema é que eu recebo AB de um serial e este AB eu devo colocar dentro de um Byte com ele sabendo que AB na verdade é um 0xAB(apenas um byte).

Basicamente é isto que eu preciso pessoal:

https://www.codeproject.com/Questions/1224418/I-want-to-convert-hex...

Eu tenho apenas o AB em string(li em uma entrada serial) eu preciso fazer um vetor de bytes colocando 0xAB.

Boa noite GS,

é isto que vc precisa?

Convertendo.ino

RV

Exatamente isto cara, muito obrigado!

Seria muito eu lhe pedir para você me explicar o código?

Obrigado!

Boa tarde GS.

vamos lá, vou tentar:

esta linha :  recebido.toCharArray(matriz1, 21);

transforma a string que vc recebeu que tem 20 caracteres em uma array de tamanho 21,

para que o ultimo carácter seja o valor "null".

em seguida existe um "for" que roda 20 vezes testando cada carácter.

Se o carácter for A até F, o valor dele será em hexadecimal de 0x41 até 0x46,

e se for de 0 a 9, o valor dele será em hexadecimal de 0x30 até 0x39.

Se for maior que 40, eu subtraio 0x37, para obter valores de 0x0A até 0x0F,

caso contrario, eu retiro a parte alta do byte (0x3..).para obter valores de 0x00 até 0x09.

e salvo na mesma matriz.

Em seguida em outro "for", eu pego o valor da matriz e desloco 4 bits para esquerda e faço 

um "or" com o próximo valor resultando em por exemplo:

0x0A left 4 bits = 0xA0,   0xA0 or 0x05 =  0xA5,

ai incremento mais um na contagem da matriz.

Se ainda tiver dúvida, pode perguntar.

RV

Muito obrigado pela explicação!

Valeu!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço