Essa biblioteca vai ajudar!
Quando desenvolvemos um projeto com o Arduino nosso de cada dia, muitas vezes precisamos manter os valores de algumas variáveis, de forma que seja possível desligar o circuito sem a perda da mesma.
Um circuito de um relógio, por exemplo, para ter a função alarme/despertador, temos que guardar o horário em memória.
A biblioteca que já conhecemos e utilizamos para acessar a memória, nos permite escrever em cada endereço apenas 1 byte (valores de 0 a 255).
Mas se precisarmos armazenar um valor lido por um sensor conectado na porta analógica, que nos retorna valores de 0 a 1024?
E se entre as infinitas possibilidades, precisarmos armazenar um valor compreendido entre 0 a 999999999?
Para esses casos já começamos a ter um certo trabalho. Foi pensando nisso que resolvi desenvolver essa biblioteca que faz esse gerenciamento da memória EEPROM e facilita a minha vida!
E só incluir a MemoryLib.h no projeto e vida nova!
Agora pode-se armazenar variáveis do tipo int e também do tipo long. Sem dor de cabeça.
A sintaxe para escrever na memória é:
memory.write(endereço, valor);
Para retornar o valor armazenado na memória:
memory.read(endereço);
Para ser mais prático no exemplo, vamos armazenar uma varíavel do tipo int no endereço 5 da EEPROM, e em seguida ler o valor gravado.
int valor = 32767;
memory.write(5, valor);
int valorLido = memory.read(5);
E se a variável fosse do tipo long, como seria? A mesma coisa!
long valor = 2147483647;
memory.write(5, valor);
long valorLido = memory.read(5);
Ficou fácil utilizar a EEPROM agora!
Senhoras e senhores, venho por meio deste compartilhar essa íncrivel biblioteca com vocês.
Biblioteca disponível em:
https://github.com/fellipecouto/MemoryLib.h
A instalação pode ser realizada através do gerenciador de bibliotecas da IDE Arduino:
Junto com a biblioteca tem os exemplos de uso para não ter dúvidas.
É isso! Espero que seja útil!
Biblioteca muito boa, obrigado por compartilhar!
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirEsta biblioteca é fantástica! Facilita em muito o trabalho. Parabéns.
ResponderExcluirObrigado! Abraços!
ExcluirSomente uma pergunta, tenho 36 variáveis do tipo INT que serão gravadas na eeprom, assim como uma do tipo LONG. Tem como configurar para trabalhar com dois tamanhos de variáveis? Obrigado
ResponderExcluirBoa noite! Vc pode deixar configurado como LONG, assim funciona tanto para INT e LONG. Abraços!
ExcluirBoa tarde Felipe... Vc tem algum exemplo da utilização dessa biblioteca em alguma rotina, pois para mim está dando o seguinte erro " error 'memory' was not declared in this scope ", pode-me ajudar a identificar o sucedido, adicionei a biblioteca. Desde já o meu obrigado. Abraços.
ResponderExcluirBoa noite! No arquivo disponibilizado para download, junto com a biblioteca, tem exemplos. O erro parece ser por estar faltando instanciar a biblioteca no inicio do código.
Excluir//Inicia a biblioteca passando como parametros a capacidade da EEPROM em KB e o tipo de variavel
MemoryLib memory(1, 1); //memory(sizeMemory, typeVar) : sizeMemory = KB / typeVar = 1=int | 2=long
Verifica se é isso mesmo. Abraços!
Muito obrigado por compartilhar seu trabalho!!!
ResponderExcluirSeus projetos e suas bibliotecas são fantásticas!!!
Seu site é uma fonte de inspiração para quem esta começando e
para os avançados.
Obrigado, Ernado!
ExcluirAbraços!
Bom dia Felipe Couto... Antes de mais parabéns pelo trabalho, a biblioteca foi uma preciosa ajuda.. Tenho a seguinte duvida; posso escrever exemplo no endereço de memoria 0 o valor 2147483647 e no endereço 1 o valor 1546632999
ResponderExcluirlong valor = 2147483647;
memory.write(0, valor);
long valor1 = 1546632999;
memory.write(1, valor1);
Quando efetuar a leitura de cada um desses endereços, vou ter o nr. tal e qual como gravado?
Aguardo,
Abraço
Seria isso mesmo.
ExcluirAbraços!
Bom dia Filipe Couto...Já utilizo à algum tempo sua biblioteca, muito funcional e facilitou muito minha vida..., acontece que recentemente verifiquei o seguinte erro ao utilizar a variável LONG.
ResponderExcluirQuando é escrito em memoria os seguintes valores;
100 - Grava 10
101 - Grava 11
201 - Grava 21
210 - Grava 21
10000 - Grava 100
Estes são alguns exemplos do que está acontecendo, quando se grava ou quando é feita a leitura, não consegui entender em que momento acontece.
Minha pergunta, é de fácil correção?
Seria possível dar uma olhada? E disponibilizar a correção para download.
Muito obrigado,
Abraço,
Manuel Henriques
mejhenriques@gmail.com
Claro / WhatsApp (11) 98648 2242
Oi Manuel! Boa tarde!
ExcluirAgradeço o seu contato! Realmente quando é variavel Long está apresentando esse problema. Vou verificar e efetuar a correção.
Abraços!
Bom dia!
ExcluirApós muito tempo, consegui parar e dar uma olhada no erro. Ajustado!
Links para download no post atualizados.
https://www.4shared.com/rar/ovITpRiuca/MemoryLib.html
Abraços!
Olá Felipe Couto, achei a sua biblioteca incrível, muito prática e simples de ser utilizada.
ResponderExcluirPorém está acontecendo o mesmo que o colega mencionou anteriormente, eu gravo o dado long 1000 e quando vou ler me dá 10.
Você já efetuou essa correção? Se sim o que devo fazer para funcionar perfeitamente?
Obrigado
Bom dia!
ExcluirApós muito tempo, consegui parar e dar uma olhada no erro. Ajustado!
Links para download no post atualizados.
https://www.4shared.com/rar/ovITpRiuca/MemoryLib.html
Abraços!
Boa tarde Fellipe!
ResponderExcluirtem que desenvolver um projeto que trabalha com teclas para acionar reles com 74hc595 são 30 teclas para acionar as saidas temporizadas tipo ligo n*5 dispara o rele 5 e depois de 20 seg dispara 3,4,6, 7
vc pode me ajudar?
obrigado.
Paulo, bom dia!
ExcluirPelo pouco que entendi, não parece ser muito complicado. Já tem algo pronto?
As saídas temporizadas pode-se usar o Delay, ou o exemplo de Delay que tem na própria IDE do Arduino chamada BlinkWithoutDelay.
Abraços!
como eu pesquisaria na EEPROM se por exemplo o valor 324567898 está gravado nela?
ResponderExcluirBom dia!
ExcluirPara retornar um valor onde sabe qual o endereço está (Ex.: Endereço 20):
memory.read(20);
Para localizar um valor, não sabendo em qual endereço está armazenado, teria que efetuar um loop, passando por cada endereço verificando os valores armazenados.
Abraços!
Essa estrutura irá funcionar no caso de uma memória eeprom externa. Apenas trocando o endereçamento ela já faria toda a gestão?
ResponderExcluirOi Thiago! Esse teste em memória externa não realizei e não sei te informar no momento. Mas todo o desenvolvimento não foi considerando eeprom externa.
Excluir