(26-08-2018, 22:34)Stark napisał(a): Próbowałem zrobić jak napisałeś wyżej... nadal to samo. Na zagranicznych forach natknąłem się, że jest to problem który nie tylko mnie spotkał. Dziś już na to nie mam siły. Będę próbował, aż się uda.
W programie musisz po swojemu ponumerować DS18B20. Musisz stworzyć funkcję przypisującą te numery. Powinna ona przeskanować magistralę. W tablicy będziesz miał kolejne numery seryjne. W programie przypiszesz, że termometr nr 0 to ID z elementu np 3 tablicy, nr 2 to np ID 1, nr 3 to ID pod indeksem 0, itd.
Tablicę musisz zapamiętać w eeprom. Program może wykrywać brak termometru jak i pojawienie się nowego.
Jest też inna metoda. Każdy DS18B20 ma 2 bajty eeprom. Przeznaczyć można je do alarmu temperatury albo ID układu. Możesz więc w tym eeprom zapisac swoje identyfikatory i uwzględniać je podczas wyświetlania temperatury. Metoda o tyle dobra, ze nie potrzebujesz eeprom w uC. Standardowo, wgrywając soft programatorem eeprom jest kasowany. Można ustawić w fuses EESAVE i takiego kasowania nie będzie. Arduino jest dość kiepskim narzędziem i pewnie nie daje możliwości zapisu eeprom z bootloadera, choć same pliki ELF tworzone przez GCC/G++ mają taką możliwość (atrybut EEMEM). Następna korzyść to większa przenośność kodu, bo np tylko nieliczne ARM mają EEPROM a powoli, używanie AVR staje się coraz mniej sensowne i może niedługo kod przeniesiesz na ARM.