Estou precisando ler dados de um arquivo no SD onde estes dados estão em hexadecimal.

Preciso pegar estes valores e transforma-los em decimal

nesta imagem estão os dados no arquivo

cada valor hexadecimal eu preciso ler transformar em decimal e eu vou mandar ele em uma saída especifica. então eu leio transformo e mando, leio transformo e mando e assim por diante

preciso fazer isto um numero x deve vezes.

mas não sei como extrair dados hexadecimais de um arquivo no SD usando um arduino UNO

Exibições: 2169

Anexos

Responder esta

Respostas a este tópico

obrigado pela resposta.

o arquivo não é TXT, na verdade ele não tem extensão

vou postar o arquivo aqui

este arquivo contem dados DMX cada valor é o valor de um canal dmx que varia entre 0 e 255 mas está em hexadecimal (00 até FF)

Logo eu preciso ler os valores deste arquivo em um SD card. O primeiro a ser lido seria o valor do canal 1 isso se repetiria até chegar no valor do canal 512 depois o próximo a ser lido seria novamente o valor do canal 1. isso se repetiria até terminar os dados do arquivo.

eu só não sei ler cada dado hexadecimal separadamente.

Bom dia, 

Primeiro passo - como o arquivo foi gravado? Qual formato?

Poste o sketch usado para a gravação dos dados.

obrigado pela resposta.

na verdade não tem sketch de gravação, isto e um arquivo gerado por um programa.

e ele não tem extensão. na resposta anterior eu postei o arquivo para caso alguém queria baixar e olhar ele

Boa tarde,

Você deveria ter explicado isto no post.

O seu arquivo foi gerado por um dispositivo DMX?

Qual o formato?

Caso seja como descreveu, e parece que sim pois tem que repetir a cada 0x200 do endereço e o único dado visível diferente do resto (01) está repetindo (posição 0x000 e posição 0x200). O 0x01 da posição 0x1FF não tem seu correspondente visível pois seu dump só vai até 0x27F.

Simplesmente use um sketch de exemplo de leitura de arquivo de SD ( https://www.arduino.cc/en/Tutorial/DumpFile ) e faça o dump deste jeito:

Usando Serial.write( dataFile.read() ); imprime tentando converter byte em caractere.

Usando Serial.print( dataFile.read() ); imprime tentando converter byte em decimal.

Usando Serial.print( dataFile.read(), HEX ); imprime tentando converter byte em Hexadecimal.

Eu acho mais fácil de entender DMX em Hexa do que decimal pois as vezes tem luzes onde o valor HEX é um controle ou comando e também porque fica tudo alinhado e fácil de encontrar.

Boa sorte,

  'Eiju

obrigado pela resposta, vou pesquisar a respeito do que você falou no começo pois não entendi nada, mas é pq eu não sei mesmo sobre isso.

sobre o que você falou no final funciona assim

eu uso um software que gera o arquivo com o sinal dmx este software nao é meu logo não tenho como alterar nada, o arquivo é este que eu mandei varias vezes durante o post

 e eu preciso ler ele e tenho que ter os valores em decimal pois a biblioteca que eu vou usar para manipular estes valores obtidos usa decimal.

Boa tarde,

Seu arquivo possui dados a cada 2048 bytes.

Eu já te passei instruções de como imprimir valores em decimal, por favor, me diga se funcionou ou não terei como te ajudar.

Em todo caso, segue um trecho que converte valores em hexadecimal para inteiro:

byte b = 0x5A;
int i = int(b);

Boa sorte,

  'Eiju

quando eu mando ler este arquivo ele lê e me retorna o texto contido usando esta formula:

myFile = SD.open("0.txt");
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();

o que eu preciso e obter os valores hexadecimais contidos no arquivo e cada valor transforma-lo em decimal

Amigo, o arquivo que enviou não tem nenhuma extensão.

Seu programa esta tentando abrir um arquivo de texto !   myFile = SD.open("0.txt");

Tente abrir assim (não sei se dará certo) 

 myFile = SD.open("0");

Sim eu entendi, desculpa eu que escrevi errado, seria myFile = SD.open("0");

Mesmo assim o resultado é o mesmo. o que eu obtenho é o mesmo que se eu abrisse no bloco de notas e não o hexadecimal.

Para você ler o arquivo será necessário descobrir o formato que foi gravado.

Qual programa foi usado ?

exemplos :

https://en.wikipedia.org/wiki/Intel_HEX

http://www.keil.com/support/docs/1584/

http://www.elproducts.com/understanding-hex-files.html

Entendi. Este arquivo e gerado por um programa de iluminação pois como eu mencionei cada valor hexadecimal corresponde ao valor de um canal DMX pois eu abro o arquivo em um visualizador de hexadecimal e bate certinho o valor hexa com o valor que eu coloquei no canal na hora de gerar o arquivo

Como internamente o programa gera o arquivo eu não sei mas me parece ser algo "cru", "simples" pois não tem nada de informação além dos valores dos canais em hexadecimal. eu preciso só ler esses valores hex e usar eles no meu sketch

obrigado pela resposta, é quase isso no exemplo que eu mandei do arquivo e na foto que eu mandei os dados estão no seguinte formato

1 0x000000 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F

2 0x000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

3....................................

exatamente como você descreveu, mas eu quero pegar 7F (por exemplo) que convertendo daria em decimal 127 entende? Como eu não entendo muito desta parte posso ter me espessado mal, mas seria pegar dois caracteres e converter pois como são decimais de 0 a 255 que eu quero obter só um caractere não resolveria então seria pegar dois caracteres transformar em decimal depois mais dois depois mais dois e por ai vai.

o programa gera este arquivo "0" com os valores que eu preciso extrair dessa forma de dois em dois caracteres está o valor que eu preciso obter.

fui mais claro agora?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço