Zapis adresu DS'a do EEPROM'u

User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Thu Oct 29, 2020 1:03 pm

Code: Select all

  char inputString[] = "0x28, 0x6E, 0xCA, 0x79, 0xA2, 0x1, 0x3, 0xF5";
  DeviceAddress ds;
  int counter = 0;
  char *pch = strtok(inputString, " ,");
  while (pch != NULL) {
    ds[counter] = strtol(pch, NULL, 16);
    pch = strtok(NULL, " ,"); 
    counter++;
    if (counter >= 8) break;
  }
Ok, czyli do inputboxa wpsiuję

Code: Select all

0x28, 0x6E, 0xCA, 0x79, 0xA2, 0x1, 0x3, 0xF5
a do eepromu wrzucam zawartość ds?

Code: Select all

EEPROM.put(cell_addr, ds);
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

Tak.
Natomiast jeśli chcesz potem odczytaną wartość pokazać w gui, to musisz ją skonwertować do stringa
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Thu Oct 29, 2020 1:39 pm Tak.
Natomiast jeśli chcesz potem odczytaną wartość pokazać w gui, to musisz ją skonwertować do stringa
Ok, dzięki :)
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Thu Oct 29, 2020 1:39 pm Tak.
Natomiast jeśli chcesz potem odczytaną wartość pokazać w gui, to musisz ją skonwertować do stringa
Nie może być tak łatwo.

Code: Select all

char s_dsaddr[] = server.arg("dsAddress");

Code: Select all

initializer fails to determine size of 's_dsaddr'
a jak wrzucam w [] np. 20 to dostaję błąd:

Code: Select all

array must be initialized with a brace-enclosed initializer
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

Tablicę char możesz inicjalizowac tylko stałymi.
Jeśli chcesz kopiować, lub zwracać z jakiejś metody, to musisz użyć metod do kopiowania "c string". Poszukaj sobie jakiegoś tutoriala o "c string"
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

W tym sofcie masz cały zapis i odczyt DSów do EEPROM z prezentacją w GUI viewtopic.php?f=24&t=4077
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

Duch__ wrote: Fri Oct 30, 2020 10:28 am W tym sofcie masz cały zapis i odczyt DSów do EEPROM z prezentacją w GUI viewtopic.php?f=24&t=4077
Dzięki :) na pewno zapożyczę wstawianie domyślnie 0xFF kiedy brak jest adresu.

Póki co udało mi się osiągnąć cel korzystając z podpowiedzi od @klew i @krycha88

Zapis: (0x28,0x6E,0xCA,0x79,0xA2,0x1,0x3,0xF5)

Code: Select all

int ep_start = ep_min_ds_addr;
for (int i = 0; i < max_ds; i++) {
  s_dsaddr[i] = server.arg("dsAddress" + String(i) + "");
  if (s_dsaddr[i].length() > 0) {
    char c_dsaddr[8];
    strcpy(c_dsaddr, s_dsaddr[i].c_str());
    int counter = 0;
    char *pch = strtok(c_dsaddr, " ,");
    while (pch != NULL) {
      dsaddr[i][counter] = strtol(pch, NULL, 16);
      pch = strtok(NULL, " ,"); 
      counter++;
      if (counter >= 8) break;
    }
    EEPROM.put(ep_start, dsaddr[i]);
    EEPROM.commit();
    Serial.printf("\n\r# saved ds(%d) address > %s > (%d)", i, s_dsaddr[i].c_str(), ep_start);
  }
    ep_start += sizeof(dsaddr[i]);
}
Odczyt: (286ECA79A20103F5)

Code: Select all

int ep_start = ep_min_ds_addr;
for (int i = 0; i < max_ds; i++) {
  EEPROM.get(ep_start, dsaddr[i]);
  for (uint8_t ii = 0; ii < 8; ii++) {
    if (dsaddr[i][ii] < 16) ds_address[i] += String(0, HEX);
    ds_address[i] += String(dsaddr[i][ii], HEX);
  }
  Serial.printf("# ds(%d) address: %s > (%d)\n\r", i, ds_address[i].c_str(), ep_start);
  ep_start += sizeof(dsaddr[i]);
}
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl

Return to “Pomoc”