Problema ao ler dados da EEPROM

E ai galera!

Estou com problema ao ler os dados da eeprom, sempre que é feita uma nova leitura, o vetor "ip" é alterado, mesmo que o mesmo não seja alterado em código.

  // IP
    EEPROM.write(0, 192);
    EEPROM.write(1, 168);
    EEPROM.write(2, 1);
    EEPROM.write(3, 50);

    // Mascara
    EEPROM.write(4, 255);
    EEPROM.write(5, 255);
    EEPROM.write(6, 255);
    EEPROM.write(7, 0);

    // Gateway
    EEPROM.write(8, 192);
    EEPROM.write(9, 168);
    EEPROM.write(10, 1);
    EEPROM.write(11, 1);

    // DNS
    EEPROM.write(48, 8);
    EEPROM.write(49, 8);
    EEPROM.write(50, 8);
    EEPROM.write(51, 8);




     ip[0] = EEPROM.read(0);
     ip[1] = EEPROM.read(1);
     ip[2] = EEPROM.read(2);
     ip[3] = EEPROM.read(3);

     Serial.println(ip[0]);
     Serial.println(ip[1]);
     Serial.println(ip[2]);
     Serial.println(ip[3]);

     mask[0] = EEPROM.read(4);
     mask[1] = EEPROM.read(5);
     mask[2] = EEPROM.read(6);
     mask[3] = EEPROM.read(7);

     Serial.println(ip[0]);
     Serial.println(ip[1]);
     Serial.println(ip[2]);
     Serial.println(ip[3]);

     gateway[0] = EEPROM.read(8);
     gateway[1] = EEPROM.read(9);
     gateway[2] = EEPROM.read(10);
     gateway[3] = EEPROM.read(11);

      Serial.println(ip[0]);
      Serial.println(ip[1]);
      Serial.println(ip[2]);
      Serial.println(ip[3]);

     domain_server[0] = EEPROM.read(48);
     domain_server[1] = EEPROM.read(49);
     domain_server[2] = EEPROM.read(50);
     domain_server[3] = EEPROM.read(51);

      Serial.println(ip[0]);
      Serial.println(ip[1]);
      Serial.println(ip[2]);
      Serial.println(ip[3]);

  Serial.println(EEPROM.read(0));
  Serial.println(EEPROM.read(1));
  Serial.println(EEPROM.read(2));
  Serial.println(EEPROM.read(3));

  Ethernet.begin(mac, ip, gateway, mask);
  server.begin();

A saída no monitor serial é:

192
168
1
50

1
1
1
50

1
1
1
53

1
1
1
53

como faço para resolver este problema?

Obs: as variáveis estão no tipo "byte"

Olá...

Seria interessante vc. postar como está declarando as variáveis, se vc. declarar uma variável tipo ponteiro por exemplo, ela irá se alterar conforme outra variável é alterada...

Talvez sua variável Mask seja um ponteiro apontando para Ip ou vice e versa, ou ainda algum outro elemento trabalhando e efetuando esta substituição...

Outro cuidado que sempre tomo é que ao trabalhar com EEPROM, eu procuro colocar os endereços de memória no formado hexadecimal... por exemplo 0X01, ou 0x0A e assim por diante.

Ainda sobre a função print, uma variável byte pode conter um valor decimal como o seu IP ou um char, para ter certeza que vai mostrar o valor decimal dela, utilize:

serial.print(ip[0], DEC); // assim garante que ele vai assumir o valor do byte em decimal.

Abs;

Olá,

Estou declarando as variáveis globais da seguinte forma:

byte ip[] = {};
byte mask[] = {};
byte gateway[] = {};
byte domain_server[] = {};

Utilizei o exemplo que você deu com a utilização do DEC, não resolveu:

192
168
1
53

255
255
0
53

1
1
0
56

8
1
0
56

Os prints para a serial que eu estou utilizando, era apenas por questão de debug. Estava tentando entender o porque do vetor estar mudando no momento de iniciar a shield ethernet.

Nem alterando o endereçamento para o modo hexadecimal resolveu. :confused:

Tente declarar os arrays de forma fixa..

byte ip[4] = 0;
byte mask[4] = 0;

Acho que pode ajudar...

martlima, resolveu o problema! era esta declaração mesmo!

Muito Obrigado!