Boa noite!

         Galera to em uma luta aqui mas não estou conseguindo gravar o valor 37,73 na EEPROM do arduino alguema ai tem alguma ajuda sobre este assunto. desde ja ficarei muito agradecido.

to usando o modo abaixo:

Para gravar na eeprom

  byte hiByte = highByte(temperatura);
  byte loByte = lowByte(temperatura);
  EEPROM.write(0, hiByte);
  EEPROM.write(1, loByte);

para ler a eeprom

    byte hiByte = EEPROM.read(0);
    byte loByte = EEPROM.read(1);
    temperatura = word(hiByte, loByte);

Novamente agradeço qualquer ajuda.

Exibições: 1049

Responder esta

Respostas a este tópico

para salvar


EEPROM.write(t, *((char*)&temperatura ));

EEPROM.write(t, *((char*)&temperatura + 1));

para ler

*((char*)&temperatura) = EEPROM.read(0);

*((char*)&temperatura + 1) = EEPROM.read(1);

Amigo eu fiz aqui mas ta dando erro.

void setup()
{
    Serial.begin(9600);
    lcd.begin(20, 4);
    DS1307.begin();
    pinMode(13, OUTPUT);
    pinMode(up, INPUT);
    pinMode(dow, INPUT);
    pinMode(set, INPUT);
    pinMode(esc, INPUT);
    pinMode(aquecedor, OUTPUT);
    lcd.createChar(0, termo);


*((char*)&temperatura) = EEPROM.read(0);

*((char*)&temperatura + 1) = EEPROM.read(1);
   
}

void settemperatura()
{ wdt_disable();
  delay(1000);
  while(st > 0)
  {
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Definir temperatura");
  if(digitalRead(up) == HIGH){temperatura ++;}
  if(digitalRead(dow) == HIGH){temperatura --;}
  if(digitalRead(set) == HIGH){st = 0;}
  lcd.setCursor(9, 1); lcd.print(temperatura);
  delay(200);
  }


EEPROM.write(t,*((char*)&temperatura ));

EEPROM.write(t, *((char*)&temperatura + 1));
 
}

O erro é 't' was not declared in this scope.

para salvar

EEPROM.write(0, *((char*)&temperatura ));

EEPROM.write(1, *((char*)&temperatura + 1));

para ler

*((char*)&temperatura) = EEPROM.read(0);

*((char*)&temperatura + 1) = EEPROM.read(1);

Para ficar claro o que está havendo é o seguinte

*((char*)&temperatura)

*((char*) é um modificador, que transforma de alguma coisa em um array de char.

&temperatura é um ponteiro para a posição de memória onde está temperatura

então *((char*)&temperatura) é um ponteiro para temperatura modificado para um array de char.

O ponteiro aponta sempre para o início da posição de memória.

Quando fazemos EEPROM.write(0, *((char*)&temperatura )), estamos gravando o primeiro byte de temperatura.

EEPROM.write(1, *((char*)&temperatura + 1)) grava o byte da posição do ponteiro + 1.

A leitura segue o mesmo princípio.

*((char*)&temperatura) = EEPROM.read(0), coloca na primeira posição apontada pelo ponteiro o valor lido da EEPROM no endereço 0

*((char*)&temperatura + 1) = EEPROM.read(1), coloca na segunda posição apontada pelo ponteiro o valor lido da EEPROM no endereço 1

Marcelo, funciono perfeitamente.

 

Muito obrigado.

Bom dia, aproveitando o ganchoo eu estou usando um sensor de temperatura, e onde eu tenho um valor pré-setado

ex:SETPOINT

eu tenho um botão aumentando ( alvo +1 )

eu tneho outro botão diminuindo( alvo -1 )

quando quero deixar em 25°C ele fica, quando eu desligo da bateria/USB o ARDUINO... e ligo... ele volta no 25°C

mesmo usando

EEPROM.write

tenho que fazer condiçoes. ?

Bom, você lê o valor setado na eeprom, quando liga o arduino para carregar essa definição?

eu apaguei toda a programaçao, irei recomeçar aqui. só me da um luz, essa foi a ultima vez que tentei mecher.... eu sei que esta errado se puder me ajudar só nesse detalhe....

quando aperto botao, vai aumentar pra 81, 82 ... pra baixo faz o inverso.. isso eu já fiz... só nao coloquei a programção pq ta mt grande... OBJETIVO: VOU SETAR O SETPOINT E QUERO QUE QUANDO FOR DESLIGADO DA ENERGIA O ARDUINO GUARDA PRA QUANDO RESTABELECER O MESMO VOLTE NA PROGRAMACAO SALVADA....

#include <EEPROM.h>

float Setpoint

Setpoint = 80

voide setup

void loop {

switch (lcd_key)

case botao-alto:{

Setpoint = Setpoint +1;

break;

}

case botao-baixo:{

Setpoint = Setpoint -1;

break;

}

SetpointState[80] = 1;

EEPROM.write(0, SetpointState[80]);
}

Não deu para entender
Toda vez q apertar um dos botões vai salvar? Melhor vc colocar um botão para confirmar.

você tem que gravar assim

EEPROM.write(0, *((char *) &SetpointState);

EEPROM.write(1, *((char *) &SetpointState + 1);

sim, isso mesmo, quando for prescionado botao_alto soma mais 1 e guada....

eu nao expliquei completo por que estava no meu serviço e nao estava com o codigo completo.... QUANDO eu chegar em casa eu vou testar...

abraço

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço