Gravando valores EEPROM

Ola Pessoal!

Mais uma vez estou aqui perguntando algo, rsrs.
Montei um voltimetro com arduino, mas as vezes preciso gravar o valor que ele esta exibindo no LCD na memoria EEPROM, sei que e possivel mas nao sei como. Preciso gravar numero com 2 casas decimais. Alguem pode me ajudar?
Achei algo do tipo na biblioteca do arduino mas ele so grava valor exato e quando coloco decimal nao funciona.

Obrigado,
Lucas

Aqui tem um exemplo que encontrei:

#include <EEPROM.h>

void setup()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, i);
}

void loop()
{
}

acho que é mais ou menos oque você procura, não ?

Nao, esse e o que eu encontrei tambem e ele nao grava numeros decimais...

Que código estás a usar para verificar o que gravaste na EEPROM?

EEPROMs não gravam números decimais, pois ela não conhece "tipos de dados", apenas bytes sem qualquer representação. Você é quem tem que fazer o tratamento disto no seu código.

Uma maneira é gravar 2 números inteiros: um para a parte inteira e outro para a parte decimal. Gravação e leitura são momentos distintos para cada um e seu código é quem faz a soma deles.

Só de curiosidade, qual IC de EEPROM você está usando?

AlxDroidDev:
Só de curiosidade, qual IC de EEPROM você está usando?

EEPROM interna.

O exemplo funciona... mas apenas um quarto... daí ser importante saber como é que ele está a verificar a escrita na EEPROM. Ainda assim, nada como fazer isso como deve ser.

Tem um exemplo para escrever e outro para ler.

kra da uma olhada nisso :

http://arduiniana.org/libraries/flash/

Talvez lhe seja util...

Vi o exemplo mas nao entendi muito bem.

Um de voces me respondeu que eu poderia separar o valor antes da virgula e o valor depois da virgula. Como eu faria isso?

Obrigado,
Lucas

unsigned char decimas=7, unidade=4;

setup(){

EEPROM.write(0, unidade);
EEPROM.write(1, decimas);
delay (1000);
Serial.begin(19200);

Serial.print( EEPROM.read(0) );
Serial.print(".");
Serial.print( EEPROM.read(1) );
}

void loop() {
}

Tens o código do LCD para ver que tipo de dados estás a apresentar?

A parte de exibir e facil (nao tenho aqui, estao em meu Mac) mas ainda nao e isso o que eu preciso.

Eu preciso separar o seguinte numero:

taravolt = 3.94;

Eu preciso gerar 2 variaveis, uma antes do ponto e uma depois do ponto. E possivel fazer isso com o Arduino?

faz assim

taravolt = 3.94;
int inteiro = (int)taravolt;
int decimal = (int)(taravolt * 100);

para gravar na EEPROM os bytes de um float

union FLOAT_tag {byte b[4]; float val;} FLOAT_Union;

FLOAT_Union.val = 3.34; // Aqui recebe o valor de float;
EEPROM.write(0, FLOAT_Union.b[0]); // Aqui grava cada um dos bytes do FLOAT
EEPROM.write(1, FLOAT_Union.b[1]);
EEPROM.write(2, FLOAT_Union.b[2]);
EEPROM.write(3, FLOAT_Union.b[3]);

Belezinha vou fazer aqui os testes. Agora como eu faria pra juntar 2 variaveis? No PHP eu sei que posso fazer assim:

$var1 = 'lucas';
$var2 = 'm.';

$var3 = "$var1 $var2";

Como eu faco isso no arduino?

Acho que perceberes um pouco mais sobre tipos (algo que o PHP não é muito famoso) facilitaria isto.

Regra geral tens de converter os dados que tens para string (não String) e depois concatenar strings (concat() ).

Ola bubulindo.

Como eu faria isso? Tem como dar um exemplo?

obrigado.

O que exatamente você quer juntar? Duas strings? Juntar para que, exatamente? Escrever na serial?