Digium pontosan megírta (ő is) a lényeget.
Ha megnézed az első kódot, rájössz, hogy a két if--else páros szépen kiüti egymást bizonyos értékeknél, emiatt nem igazán úgy fog működni, ahogy elvárod.
if(DHT22.temperature < 28)
{
digitalWrite(HEATERRELAY, HIGH);
}
else
{
digitalWrite(HEATERRELAY, LOW);
}
if(DHT22.temperature > 31)
{
digitalWrite(HEATERRELAY, LOW);
}
else
{
digitalWrite(HEATERRELAY, HIGH);
}
Tegyük fel, hogy a kiolvasott hőmérséklet 29 fok. Első vizsgálat: kisebb, mint 28? Válasz: NEM, így az "else" megy tovább, tehát alacsony szintre húzza a lábat. Második vizsgálat: nagyobb, mint 31? Válasz: NEM, így itt is az "else" megy tovább, ami magasra húzza a lábat. Ezzel a 28-nál nem kevesebb (28-at is beleértve) és a 31-nél nem több (a 31-et is beleértve) minden kiolvasott értékre két egymást követő vizsgálat során két egymásal ellentétes parancs megy ki.