Conversao uint32_t para uint8_t Nextion NX4832T035 + Arduino Uno

Preciso converter esses dados para ser armazenado em EEPROM, Alguem me ajuda pf ?

A eeprom recebe bytes (8 bits) e a variável hora é uint32 (32 bits);

Linhas do Codigo 

uint32_t  hora;

hora=EEPROM.read(1);

n0.getValue(&hora);

n0.setValue(hora);
EEPROM.write(1, hora);

Display utilizado no projeto : Nextion NX4832T035

Codigo ino em anexo.

Pegando_Dados.ino

Exibições: 365

Responder esta

Respostas a este tópico

Boa noite JPMN (se não gosta que te chame pelas iniciais, avise),

não precisava criar um novo tópico, bastava corrigir o anterior.

O que ocorre com seu code é que você quer gravar 4 byyes (uint32_t) em um endereço de 1 byte.

Mas vamos lá.

O arduino quando usa as funções de EEPROM.read(); e EEPROM.write(), somente manuseia 1 byte.

Mas na documentação do arduino tem umas funções que manuseiam bytes do tamanho da variável definida.

 Se você definir uma variável :

     tipo byte ou uint8_t, ela grava/le um byte na EEPROM; 

     tipo int ou unsigned int ou uint16_t, ela grava/le dois bytes na EEPROM; 

     tipo long ou unsigned long ou uint32_t ou ainda float , ela grava/le quatro bytes na EEPROM; 

           as funções são :   EEPROM.put(addr,data);  grava na EEPROM  e

                                       EEPROM.get(addr,data);  Le da EEPROM

Veja que se por exemplo:

           gravar um int em um endereço X, e for gravar outro Y em outro endereço, este novo endereço

           deverá ser addr  usado em X + 2.

           gravar um float em um endereço Z, e for gravar outro W em outro endereço, este novo endereço

           deverá ser addr  usado em Z + 4.

Modifique seu code para usar estas funções e depois conta o resultado pra gente.

RV mineirin

Estou com dificudades para montar o codigo, poderia me instruir  ?

Boa noite JPMN, (se não gosta que te chame pelas iniciais, avise),

modifique seu code para usar as funções put()  e get().

Mas vou te alertar que se você usar ele gravando na EEPROM a cada segundo como você escreveu

no seu code, a sua EEPROM vai durar muito pouco.

Uma EEPROM de Atmega328 suporta em media 100.000 gravações.

Se a cada segundo (delay 1000) você gravar na EEPROM, faça as contas:

100.000/ 60 segundos =  1.666,66 minutos e 166,66 /60 minutos = 27,7 horas.

Ou seja, em 27 horas sua EEPROM já era...

Depois conta o resultado do teste.

RV mineirin

Pegando_Dados_V02.ino

Boa noite  RV mineirin ,agradeço pela ajuda mas o mesmo continua com o mesmo problema, toda configuraçao do display esta correta, nao consigo entender esse erro, apos reiniciar o projeto ele retorna o valor , mas quando desligado da tomada ele zera o valor novamente.

Bom dia JPMN, (se não gosta que te chame pelas iniciais, avise),

Nas minhas postagens eu não preocupei com a lógica do seu code, e somente foquei na questão

da gravação e leitura da EEPROM para variáveis maior que 1 byte.

Não tenho este dispositivo (Nextion) e não tenho como testar seu code.

Nos informe onde você obteve este code que está testando?  "Pegando_Dados.ino"

O que você espera que esta linha faça?    "n0.getValue(&hora);"

Breve flowchart do seu code:

No setup lê EEPROM        hora=EEPROM.read(1);      // Possível valor desconhecido  ou 0
      Set um valor             n0.setValue(hora);             // Set valor desconhecido ou 0

No loop                          n0.getValue(&hora);           // Busca um valor desconhecido ou 0

                                     EEPROM.write(1, hora);      // Grava na EEROM um valor desconhecido ou 0

Como não entendi, por favor me explique que logica usou para este code?

RV mineirin

Boa tarde RV mineirin , queria te agrader por se mostrar empenhado a me ajudar, nao esta sendo facil lidar com essa tela,  tenho conhecimento mas não suficiente para reparar esse erro.

Pegando_Dados.ino

Estou te enviando a ino totalmente comentada para tentar te passar a ideia do projeito, esta faltando muita coisa nessa ino porem é apenas para testar o Envio e amarzenamento do numero na tela, muito obrigado pela ajuda.

Estou tentando gravar o valor nesse campo da tela, os demais estao desativados ate concluir o teste inicial do projeto.

Boa tarde JPMN, (se não gosta que te chame pelas iniciais, avise),

Estou devolvendo o seu code, mas inclui 3 linhas de impressão para ver o que aparece em 3 momentos na variável hora.

Por favor, rode o code e depois copie os dados do serial monitor e post aqui para

que possa vê-los.

RV mineirin

Pegando_Dados_V3.ino

Boa noite   mineirin RV, fiz o teste...  esta salvando na eemprom sim, porem nao retorna na tela display, em teste isolado declarando o valor  exemplo  hora=01; manualmente no codigo ele retorna a tela sem nenhum problema, creio que tem alguma forma de enviar o valor de forma isolada pois acredito que o problema esta no getvalue e setvalue do display, quando aberto a pagina de modificação ele ja envia valor 0, fiz o teste com o serial e observei isso, ou seja altero o valor e salva, mas quando vou na tela de modificação o valor se declara 0 sozinho.

Dados serial do Ino modificado por voce.

loop_2 A
n0.val=10⸮⸮⸮get n0.val⸮⸮⸮loop_1 A
loop_2 A
n0.val=10⸮⸮⸮get n0.val⸮⸮⸮

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço