@Martin: To že čidlo čte nějakou analogovou veličinu neznamená, že jí vždycky vrací jako analogovou hodnotu. S čidlem se může komunikovat digitálně a dají se mu i nastavovat některé vlastnosti jako přesnost měření a pod, jako u zřejmě použitého DS18S20, které komunikuje po 1-wire
@hoonza123: každé čidlo může mít vlastní drát, ale proč by měla být připojená k různým pinům? 1wire je zvládne i na jednom.
zjisti si adresy obou čidel (udělej si prográmek co ti je vypíše, nebo to možná budou nějaké blechy na čidle) a pak v té getTemp nebudeš zjišťovat adresy čidel na drátě, ale budeš číst hodnotu podle adresy z parametru, kterou dáš natvrdo do programu. Takže ta getTemp bude začínat až tím
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
a addr bude prametr getTemp
A pokud trváš na různých pinech abys třeba nemusel řešit různé adresy čidel, tak zkus
OneWire ds1(DS18S20_Pin1);
OneWire ds2(DS18S20_Pin2);
a v následném kódu čti na střídačku z ds1 a ds2, přepiš si tu getTemp, aby měla ds jako parametr.
Jo, a pokud je správné spínání nějak fatální, tak si správně ošetřit stav kdy nebude žádné čidlo připojeno a nějak filtruj hodnoty pro případ chyby měření a následné špičky a možná ověřuj crc i pro vlastní měřenou hodnotu a nejen pro zjištěné adresy.
Tak jak to máš teď a dojde k chybě čtení adresy nebo bude třeba chybně připojené/nezapojené čidlo, tak i když bude teplota nad padesát, tak ti to vrátí "teplotu" -1000 a relé ti přecvakne. Takže by to asi chtělo řešit jednotlivý výpadek -> nechat relé v původním stavu a dlouhodobý výpadek (vrací souvisle chyby) -> nastavit relé do bezpečné polohy (teď pokud se tím řeší třeba nějaký ohřev, tak se to v případě chyby bude chovat jako "pořád studený, přidej") a případně nějak indikovat/řešit chybu.