Platím ovšem, že VEŠKERÝ kód týkající se daného čidla musí být mezi #define a #undefine, protože #define a #undefine mění hodnotu pro PŘEKLADAČ a NE PRO PROGRAM !!! To znamená, že funkci “změř” musí mít napsanou 3x a ne ji 3x volat.
Nebo připoj všechny čidla na 1 pin a adresuj je. 1-wire sběrnice to umí…
Protože ve funkci ds18b20_gettemp(); nemáš DS18B20_DQ nadefinováno. Jak jsem psal výše - ds18b20_gettemp(); musíš mít mezi #define a #undefine FYZICKY VE ZDROJOVÉM, KÓDU NAPSANOU !!!
Ale tím si nejsem 100% jistý. Výhodou by byla jednodušší úprava programu pro čidlo - nemusel bys to fyzicky rozkopírovávat. Jenže teďka nemám u sebe AS a nemůžu tuhle variantu překladu vyzkoušet.
Vždyť v tom kódu DS18B20_DQ nemáš nikde použitý. Tady je Ti jeho definice k ničemu. #define NENÍ proměnná programu, ale musíš na ní koukat jako na proměnnou pro překladač. Překladač “čte” a překládá postupně kód. Když narazí na DS18B20_DQ, tak tam dosadí hodnotu, kterou DS18B20_DQ zrovna obsahuje (pokud není definovaná, vyhodí chybu). Takže přeloží rutinu pro obsluhu a víc už DS18B20_DQ nepotřebuje. To, že pak měníš obsah definice DS18B20_DQ a vkládáš volání obsluhy teploměru už nic neřeší, protože tam už s DS18B20_DQ překladač nepracuje. Jinak jsi správně pochopil, že pro 3 teploměry musíš mít 3 v podstatě identické rutiny (až na ten pin). Tady je pak už jenom jediná možnost - a to vzít rutiny pro teploměr a zkopírovat je jako :
V každém případě musíš mít obsluhu každého teploměru samostatně.
A pokud obsluha teploměru není Tvá vlastní, ale nějaká knihovna, pak budeš muset všechny teploměry pověsit na 1 pin a doufat, že knihovna umí komunikovat s více teploměrama na jednom pinu. Je tam trochu nevýhoda v tom, že si podle adres jednotlivých teploměrů musíš zjistit, který teploměr to fyzicky je.