Wpis z mikrobloga

Czy ta reguła jest poprawna? Programuję ESP8266 i mam wrażenie, że czasem nie zwraca true, choć warunek jest prawdziwy. Chodzi mi m.in. czy nie trzeba wprowadzić jakichś dodatkowych nawiasów i czy można pisać + 6 przy znaku && (czy nie trzeba nawiasów. Dziś miałem wrażenie, że kod się zaciął, ale nie miałem go jak zdebugować, ale to musi być raczej ta linijka.

#arduino #esp8266 #esp32 #mikrokontrolery #jezykc #c++ #programowanie
  • 26
@MisiekD: Bym Ci napisał dokładnie gdzie ale wrzuciłeś zrzut ekranu i nie chce mi się przepisywać. Wklej normalnie kod na pastebin.com jak normalny człowiek.

I tak przy okazji poczytaj o magic numbers w programowaniu i dlaczego się ich nie stosuje.
@MisiekD: Ja bym powiedział, że nawiasów nigdy za wiele, raczej lepiej więcej, niż mniej i bym to wszystko pooddzielał nawiasami.
Poza tym, to może nie jest problem z tym if-em, tylko z tym następnym, ewentualnie jeszcze może Tobie się wydaje, że warunek powinien być spełniony, a jednak nie powinien, bo jest źle napisany.

if((((tP2 >= (tB1 + 6)) && (tP2 >= 50))) || (tP1 >= 70)))
@MisiekD: Właściwie coś tam przedobrzyłem chyba, spróbowałem jeszcze raz i wychodzi mi inaczej ( ͡° ͜ʖ ͡°)
Najlepiej na spokojnie każdą część sobie pooddzielać według odpowiedniej logiki.

if(((tP2 >= (tB1 + 6)) && (tP2 >= 50)) || (tP1 >= 70))
Co Twoim zdaniem się pierwsze wykona? AND czy OR z tej linijki? Bo ja szczerze mówiąc nie mam pojęcia- dlatego dodaje się nawiasy.


@To_ja_moze_pozamiatam: Ogólnie warunek jest sprawdzany po kolei, więc raczej kolejność wystąpienia decyduje. Poza tym nie zauważyłeś, że tam jednak jest nawias oddzielający lewą stronę względem OR. Więc lewa strona i prawa względem ORa, to tak jakby dwa "równorzędne" warunki (można by je na przykład rozdzielić na dwa osobne
@MisiekD: Zgodnie z prawem wykonywania działań (czy tam operator precedence w C) żaden nawias nie jest potrzebny. Najpierw się wykona +6, potem porównania, potem &&, potem ||.
Czyli wygląda ok, chyba że kompilator jakiś #!$%@?. Pora na dupa debugging. Może problem leży kompletnie gdzie indziej.

@stivenus: Generalnie gówno prawda, może poza tym:

chociaż ja już dawno nie programowałem


Chyba że masz na myśli Pascala, tam owszem kolejność wykonywania działań jest
@MisiekD: Jak się wczytałem w nazwy to sam kod wygląda dziwnie:
temperaturaPiecCO2 >= temperaturaBufor1 + 6 && temperaturaPiecCO2 >= 50 znaczy dokładnie to samo co temperaturaBufor1 >= 44, bo wtedy obie strony && są tożsame, więc czemu taki złożony warunek? Na pewno o to chodziło?
via Android
  • 0
@Turbojurek ma to sens, w sensie cały kod, już przetestowane. Ale wczoraj zauważyłem, że po raz kolejny jakby wszystkie pompy mi wyłączyło po kilku dniach bezproblemowego działania, a warunek jest spełniony (podstawiając wszystkie wartości), dlatego zacząłem doszukiwać się jakichś problemów.
@MisiekD: Warunek wygląda ok, bez logów może być ciężko namierzyć problem. Może esp się zawiesza/restartuje, może jest problem z odczytem temp i logika wariuje.

PS zmiennej bool nie trzeba porównywać do true czyli zamiast if(isOk==true) dajemy if(isOk)