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
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por