Skocz do zawartości

Połączenie dwóch esp8266 do pomiaru temperatur


Pomocna odpowiedź

2 godziny temu, ethanak napisał:

Podpowiedź:


static uint32_t last_packet_time[4];

Wystarczy czy trzeba jeszcze?

 

to ma dotyczyć tylko wyników zdalnych, czy lokalnych też?

Bo jakbym napisał [2] to byś pytał czemu dwa. Ja nie piszę gotowego programu, tylko staram się naprowadzić na rozwiązanie  - gotowca to miałbyś już dawno i dalej byś nie wiedział jak działa.

poproszę o małą podpowiedź,

czy to ma być na pewno tutaj:

    if (packetBuffer[0] == 'T' && packetBuffer[0] >='1' && packetBuffer[1] <= '2')
    {
      int indeks = packetBuffer[1] - '1' + 2;
      termometr[indeks] = atoi(packetBuffer+2);
    }

bo coś mi nie wychodzi to poprawnie i może próbuję to zrobić w złym momencie?

Tutaj po przyjściu pakietu wrzucasz do tablicy czasów bieżącą wartość millis().

Gdzieś dalej masz coś w rodzaju:
 

if (millis() - czas_przyjscia_pakietu > ileśtam) {
    termometr[cośtam] = -12700;
}

oczywiście w jakiejś sensownej pętli dla dwóch termometrów. Ileśtam dobierz sobie sensownie (pamiętaj, że jeden pakiet ma prawo się zgubić, Udp nie jest pewnym połączeniem).

 

"aaa widzisz radziu" to ja tam wszystko ładowałem.

A co drugiej sugestii, to wcześniej dawałem czas 6000 skoro client wysyła co 5000,

wiec jak dam >11000 będzie dobrze?

Dobra znów muszę poprosić o pomoc, aby zawęzić pole poszukiwań,

dlaczego nie zapisuje -12700 po odłączeniu zewnętrznego drugiego esp?

czy to jest poprawnie:

  static uint32_t czas_przyjscia_pakietu[2];

if (packetBuffer[0] == 'T' && packetBuffer[0] >='1' && packetBuffer[1] <= '2')
  {
    int indeks = packetBuffer[1] - '1' + 2;
    char indeks2 = packetBuffer[1] - '1' + 2;
    termometr[indeks] = atoi(packetBuffer+2);
    czas_przyjscia_pakietu[indeks2] = millis();
  }

 

Przede wszystkim:

char indeks2 = packetBuffer[1] - '1' + 2;

Czyli dla numeru '1' indeks2 będzie równy 2, tak? I wskazywać na trzeci element w tablicy? A czemu nie na pierwszy?

A czas_przyjścia_pakietu ma tylko dwa elementy, podczas gdy usilnie chcesz wpakować to do trzeciego?

Dlaczego indeks2 jest typu char?

W ogóle po co zmienna indeks2 - przecież indeks2 zawsze będzie równe indeks - ilość_termometrów_wbudowanych, na upartego można zrobić:

indeks2 = indeks - 2;

ale ponieważ tę zmienną wykorzystujesz tylko raz - lepiej:

termometr[indeks] = atoi(packetBuffer+2);
czas_przyjscia_pakietu[indeks - 2] = millis();

 

A tak w ogóle

44 minuty temu, jaro44 napisał:

dlaczego nie zapisuje -12700 po odłączeniu zewnętrznego drugiego esp?

A gdzie masz kod który to wstawia? Tym razem miałeś go napisać, ja podałem tylko algorytm.

 if (millis() - czas_przyjscia_pakietu[1] > 11000)
 {
    termometr[2] = -12700;
 }
 if (millis() - czas_przyjscia_pakietu[2] > 11000)
 {
    termometr[3] = -12700;
 }

 

6 minut temu, ethanak napisał:

Dlaczego indeks2 jest typu char?

ponieważ nie potrafiłem sobie poradzić z błędem:

error: invalid types 'uint32_t {aka unsigned int [2]}[char*(const char*, int)]' for array subscript

 

3 minuty temu, ethanak napisał:

Skąd pomysł na uint32_t jako indeks w tablicy i dlaczego nie int?

stąd:

21 godzin temu, ethanak napisał:

Podpowiedź:


static uint32_t last_packet_time[4];

Wystarczy czy trzeba jeszcze?

 

Odróżniasz indeks (czyli numerek elementu w tablicy) od wartości owego elementu?

Jeśli masz cztery szklanki wódki, to indeksem będzie mililitr czy int?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...