Go Down

Topic: Gravando valores EEPROM (Read 2581 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?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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() ).
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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