Go Down

Topic: Gravando valores EEPROM (Read 3287 times) previous topic - next topic

lucas-appr2

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

fbrenomoura

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 ?

lucas-appr2

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

bubulindo

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

AlxDroidDev

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?
Learn to live: Live to learn.
Showing off my work: http://arduino.cc/forum/index.php/topic,126197.0.html

bubulindo


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.

http://arduino.cc/en/Reference/EEPROM

Tem um exemplo para escrever e outro para ler.
This... is a hobby.

phalgus

kra da uma olhada nisso :

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

Talvez lhe seja util...

lucas-appr2

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

bubulindo

Code: [Select]


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?
This... is a hobby.

lucas-appr2

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?

mmoscz

#10
Sep 05, 2012, 05:48 am Last Edit: Sep 05, 2012, 05:52 am by mmoscz Reason: 1
faz assim
Code: [Select]

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


para gravar na EEPROM os bytes de um float
Code: [Select]

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]);

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

lucas-appr2

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?

bubulindo

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() ).
This... is a hobby.

lucas-appr2

Ola bubulindo.

Como eu faria isso? Tem como dar um exemplo?


obrigado.

neuron_upheaval

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

Go Up