Skocz do zawartości
jaro44

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ż?

Udostępnij ten post


Link to post
Share on other sites

Lokalnych nie ma sensu - jeśli pobranie z termometru się nie powiedzie i tak zgłosi awarię. Tak że tylko dla zdalnych.

Udostępnij ten post


Link to post
Share on other sites

no to nie  rozumiem po co

24 minuty temu, jaro44 napisał:

last_packet_time[4];

 

 

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

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).

 

Udostępnij ten post


Link to post
Share on other sites

"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?

Udostępnij ten post


Link to post
Share on other sites

Idę spać może mi to pomoże, bo zamiast czynić postępy to robię się coraz głupszy.

 

Udostępnij ten post


Link to post
Share on other sites

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();
  }

 

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites
 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

 

Udostępnij ten post


Link to post
Share on other sites

Indeksy w tablicy liczy się od zera a nie od jeden.

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

 

Udostępnij ten post


Link to post
Share on other sites
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?

 

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...