Skocz do zawartości

Połączenie dwóch esp8266 do pomiaru temperatur


jaro44

Pomocna odpowiedź

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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?

Link do komentarza
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).

 

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

 

Link do komentarza
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.

Link do komentarza
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

 

Link do komentarza
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?

 

Link do komentarza
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!

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.