Hej
Pozwól, że napiszę moj tok rozumowania :
1. onewire.search(). wyszukuję czujnik, rozumiem, że są one indexowane losowo od 0 do nie wiekszej niż ilosc -1
( czujniki nie są podpięte w 1 lini tylko w siatce - w moim przykładzie)
2. Rom code - czyli teraz odnaszac sie gdziekolwiek w przykladzie do jego Nazwy (nazwa1 = Rom code1 itd)
dostaje odpowiedz z odpowiedniego rom code
3. odczyt temp w ten sam sposob
nazwa = rom , wpisujac nazwe po rom odczyt temp.
Mam wszystko zrobione tak jak napisałeś ale tu właśnie pojawia sie moj problem.
Przykład. 1
mam 10 czujników
Jesli zamienię 5 z nich nie bede wstanie okreslic ich fizycznego polozenia.
przykład. 2
montuje czujnik na kablu jeden w odleglosci 1 metra drugi 50 metrow
tworze x takich kabli
Chce aby czyjnik w odleglosci 1 metra zawsze byl to temp wewnatrz a
w odlegloscie 50 na zewnatrz, nie wazne ktory kabel podłacze.
Jak pisałem moze w przypadku 2 czujnikow nie bedzie problemu bo ardu indexuje czyba po czasie odpowiedzi z czujnika (opornosci) ale jesli stworze siatke i dodam jeszcze termometr w kuchni i pokojach zacznie mi to mieszac.
Jedyny pomysl jaki mam to nazwanie ich w eepromie
Spowoduje to ze eeprom 11 bedzie zawsze czujnikiem na 1 metrze, a
eeprom 50 zawsze na 50 metrach. itd.
Pewnie sie zastanawiasz dlaczego nie odczytam ich addresow i nie przypisze ich na stale
Bylo by pięknie jak bym nie musial co chwile sprawdzać nowego kabla
jednego z ilosci nieogranicznej.
Wiem ze to troche dziwne ale nie potrafie tego lepiej opisac.
A teraz do konkretów
DeviceAddress insideThermometer, outsideThermometer; - w taki sposób określam sobie nazwy czujników.
Nie podaje adresów, bo niemożliwa będzie ich wymiana.
Następnie muszę przypisać nazwę do odpowiedniego Indexu.
sensors.getAddress(insideThermometer, 0)
sensors.getAddress(outsideThermometer, 1)
Problem w tym że index przydzielany jest dość losowo. Jeśli czujniki chcę podłączyć w siatce nie widzę innego sposobu niż ich nazwanie w eepromie.
Czy dało by sie sprawdzic czy w eeprom indexu 0 jest wartosc 0x11 to nazwij index 0 jako nazwa1
jesli jest wartosc 0x22 nazwij jako nazwa 22 itd ( mowie o bajcie 2 lub 3)
Próbowałem sprawdzić p0jedyńczy BAJT tak jak to jest w tym przykładzie:
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
Oczywście przykład tyczy się addresu nie eepromu.
Jednak nie udało mi sie odnieść do odpowiedniego Bajtu - z tego co napisales jesli dobrze rozumialem nie bedzie to mozliwe
Znalazłem też coś takiego:
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
ale tutaj jest odczyt 9 bajtow
Jak by mi się udało porównać to co jest w 2 bajcie i stworzyc takie takie warunki jak powyzej (case 0x11 itd)
J
Zablokowałem się strasznie już chyba od miesiąca szukam info na ten temat ........
Znalazłem jeszcze takie cos:
isConnected(uint8_t* deviceAddress, uint8_t* scratchPad)
Jestem w trakcie ustalania jak działa ta funkcja
Pozdrawiam i proszę o kolejne rady
Seba
ps.sorki za błedy