Arduino schéma - arduino.sk

EEPROM put get

Programovanie arduina
Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

EEPROM put get

Poslaťod barado » Ned 23. Okt 2016 19:01:43

Ahojte.
Asi niekde robím chybu.

tu mám nadefinované dvojdimenzionálne pole pre adresy cidiel a aj jednu pomocnú adresu

Kód: Vybrať všetko
uint8_t sensorAdress[10][8] =  {{ 0x28, 0xFF, 0x4E, 0xB8, 0x92, 0x15, 0x1, 0xA4 },
                        { 0x28, 0xFF, 0x42, 0xB8, 0x92, 0x15, 0x1, 0x85 },
                        { 0x28, 0xFF, 0xE8, 0x7F, 0x92, 0x15, 0x1, 0xB4 },
                        { 0x28, 0xFF, 0xD8, 0xB9, 0x92, 0x15, 0x1, 0x0 },
                        { 0x28, 0xFF, 0x9A, 0x7A, 0x92, 0x15, 0x1, 0xDB },
                        { 0x28, 0xFF, 0x7A, 0xB5, 0x92, 0x15, 0x1, 0xA2 },
                        { 0x28, 0xFF, 0x31, 0xBA, 0x92, 0x15, 0x1, 0xA1 },
                        { 0x28, 0xFF, 0x6E, 0xB8, 0x92, 0x15, 0x1, 0x5C },
                        { 0x28, 0xFF, 0x24, 0xBA, 0x92, 0x15, 0x1, 0xF },
                        { 0x28, 0xF3, 0x03, 0x3B, 0x06, 0x0, 0x0, 0x76 }};

uint8_t pomSensorAdress[] = { 0x28, 0xD6, 0xDE, 0xDC, 0x00, 0x00, 0x00, 0x87 };                           


toto mi neviem prečo nefunguje:
Kód: Vybrať všetko
void eepromReadAdress(void)              //nacitanie adries z eeprom pri starte
{
  for (int eepromAdress = 0; eepromAdress <= 72; eepromAdress+=8)
  {
     EEPROM.get( eepromAdress, sensorAdress[(eepromAdress/8)] );
  }


a preto to robím takto:
Kód: Vybrať všetko
void eepromReadAdress(void)              //nacitanie adries z eeprom pri starte
{
  for (int eepromAdress = 0; eepromAdress <= 72; eepromAdress+=8)
  {
     EEPROM.get( eepromAdress, pomSensorAdress );
     for (int i = 0; i < 8; i++)
     {
        sensorAdress[(eepromAdress/8)][i] = pomSensorAdress[i];
     }
    
  }


a zaujímavé je to, že toto mi funguje:
Kód: Vybrať všetko
//update adries v eeprom
void eepromSaveAdress(void)               
{
  for (int eepromAdress = 0; eepromAdress <=72; eepromAdress+=8)
  {
     EEPROM.put( eepromAdress, sensorAdress[(eepromAdress/8)] );
  }    
}

Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

Re: EEPROM put get

Poslaťod Robo Ulbricht » Ned 23. Okt 2016 21:12:41

Netreba to komplikovat. Staci to takto napisat.

Kód: Vybrať všetko
#include <EEPROM.h>

template< typename T > void dumpHex(T &t) {
  int       theValue;
  char      textString[16];
  char      asciiDump[16];
  uint8_t *myAddressPointer = (uint8_t*) &t;
  int mySize = sizeof(t);
  int maxrow;

  while (mySize > 0) {
    maxrow = min(16, mySize);
    sprintf(textString, "%04X - ", myAddressPointer);
    Serial.print(textString);
    asciiDump[0]    = 0;
    for (int ii = 0; ii < maxrow; ii++) {
      theValue  = *myAddressPointer;
      sprintf(textString, "%02X ", theValue);
      Serial.print(textString);
      if ((theValue >= 0x20) && (theValue < 0x7f))
        asciiDump[ii]  = theValue;
      else
        asciiDump[ii]  = '.';
      myAddressPointer++;
    }
    asciiDump[maxrow] = 0;
    Serial.println(asciiDump);
    mySize -= maxrow;
  }
}

uint8_t sensorAdress[10][8] = {{ 0x28, 0xFF, 0x4E, 0xB8, 0x92, 0x15, 0x1, 0xA4 },
  { 0x28, 0xFF, 0x42, 0xB8, 0x92, 0x15, 0x1, 0x85 },
  { 0x28, 0xFF, 0xE8, 0x7F, 0x92, 0x15, 0x1, 0xB4 },
  { 0x28, 0xFF, 0xD8, 0xB9, 0x92, 0x15, 0x1, 0x0 },
  { 0x28, 0xFF, 0x9A, 0x7A, 0x92, 0x15, 0x1, 0xDB },
  { 0x28, 0xFF, 0x7A, 0xB5, 0x92, 0x15, 0x1, 0xA2 },
  { 0x28, 0xFF, 0x31, 0xBA, 0x92, 0x15, 0x1, 0xA1 },
  { 0x28, 0xFF, 0x6E, 0xB8, 0x92, 0x15, 0x1, 0x5C },
  { 0x28, 0xFF, 0x24, 0xBA, 0x92, 0x15, 0x1, 0xF },
  { 0x28, 0xF3, 0x03, 0x3B, 0x06, 0x0, 0x0, 0x76 }
};

void setup() {
  Serial.begin(9600);
  dumpHex(sensorAdress);
  Serial.println("---");
  EEPROM.put(0, sensorAdress);
  EEPROM.get(0, sensorAdress);
  dumpHex(sensorAdress);
}

void loop() {
}

Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

Re: EEPROM put get

Poslaťod barado » Ned 23. Okt 2016 22:52:10

Robo Ulbricht píše:Netreba to komplikovat. Staci to takto napisat.



Mnoooo. Tak toto si budem musieť trochu naštudovať. Lebo zatiaľ netuším, čo tu vidím.

Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

Re: EEPROM put get

Poslaťod barado » Uto 25. Okt 2016 22:24:09

barado píše:
Robo Ulbricht píše:Netreba to komplikovat. Staci to takto napisat.



Mnoooo. Tak toto si budem musieť trochu naštudovať. Lebo zatiaľ netuším, čo tu vidím.

Ja som ale blb.

to Robo Ulbricht:
2 dni tu pozeram na ten kod, co si mi poslal a zistujem, ako to vlastne upravujes tie data, aby to s tou EEPROM fungovalo. A ten kod tie adresy neupravuje.

Ja som ale blb...

Takze toto normalne funguje tak ako ma:
Kód: Vybrať všetko
  EEPROM.put(0, sensorAdress);
  EEPROM.get(0, sensorAdress);

Späť na Software