DADOS GRAVADOS SEM UM BIT NA EEPROM, PORQUE? - ARDUINO

  • boa noite pessoal, alguem ja teve problemas em gravar uma variavel na EEPROM, alguns bits sao perdidos, alguem sabe o motivo.

  • O valor da variavel e 551486205

  • e grava 55148625

  • retira o Zero! Porque?

Preciso de ajuda, abraco a todos

Exibições: 333

Responder esta

Respostas a este tópico

Reveja as ligações e o programa. Tem alguma coisa errada.

Qual EEPROM esta usando? qual montagem?

Estou

Será que sua rotina que converte de longo pra byte não está passando em algum momento por "char" ?
O Char é um tipo de variavel com sinal. Pode ser isso.
Vc precisa usar byte ou unsigned char.
Agora, se as vezes vai outras não pode ser que vc esteja escrevendo muito rápido. Nem termina de gravar um byte e vc já manda outro (chute). Ou mesmo que escreveu tanto que já chegou no limite dela. Memorias desse tipo não podem ser escritas "o tempo todo".
Poste sua rotina de escrita.

Eduardo obrigado por tentar me ajudar.

Explico o meu projeto e um controle remoto universal, aonde eu recebo o codigo usando a library IRremote e gravo em um endereco na EEPROM usando a Library Memory.libre o código e grande mais o void que esta com problema e este.

Codigo abaixo, abraço

void learnKeycodes()
{
digitalWrite(LED_VERMELHO, HIGH);
beep2();

while(irrecv.decode(&results)) // empty the buffer
irrecv.resume();

long prevValue = -1;
int i=0;
while( i < numberOfKeys)
{
Serial.print("Favor Pressionar a Funcao! ");
if (i == 0) {
Serial.print(" Power");
}
if (i == 1) {
Serial.print(" Vol +");
}
if (i == 2) {
Serial.print(" Vol -");
}
if (i == 3) {
Serial.print(" Can +");
}
if (i == 4) {
Serial.print(" Can -");
}
if (i == 5) {
Serial.print(" Mudo");
}
if (i == 6) {
Serial.print(" AV");
}

while(true)
{
if( irrecv.decode(&results) )
{

if(results.value != -1 && results.value != prevValue)
{

showReceivedData();
irKeyCodes[i] = results.value;
i = i + 1;
prevValue = results.value;
value = prevValue;
codeLen = results.bits;
codeType = results.decode_type;
memory.write(i, value); //Parametros: Endereco, Valor tipo int/long
memory.write((i+10), codeType);
memory.write((i+20), codeLen); //Parametros: Endereco, Valor tipo int/long
memory.write(31, 0);
memory.write(32, 0);
digitalWrite(LED_VERDE, HIGH);
delay(400);
digitalWrite(LED_VERDE, LOW);
irrecv.resume(); // Receive the next value
break;
}
irrecv.resume(); // Receive the next value
}
}
}

Serial.println("Gravando Comandos.....");
delay(1500);
Serial.println("Programacao Concluida!");
beep3();
digitalWrite(LED_VERMELHO, LOW);
delay(400);
menustatus = 0;
delay(800);
asm volatile ("jmp 0");
}

Vide:

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

Esse numero todo nao pode ser escrito em um comando só, precisa ser dividido em varios bytes.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço