logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] DS18b20 strzałki sygnalizujące spadek i wzrost temp

Mariuszek15 05 Lip 2008 13:59 5756 21
REKLAMA
  • #1 5313961
    Mariuszek15
    Poziom 24  
    Witam jak wykonać, szczałki sygnalizujące spadek tem i wzrost temp w bascom?? Jak napisać program, aby dobrze on działał i szczałki dobrze wskazywały?
  • REKLAMA
  • #2 5314000
    JmL(TM)
    Poziom 24  
    A co to jest SZCZAŁKA? :? I moglbys swoje pytanie troche rozwinac bo mozna te "szczalki" np. wyswietlac na LCD lub podlaczyc LED [takie jak w np. windach]. A zalozenie jest takie, ze pobierasz temp. i porownujesz z ostatnim pomiarem i jesli wartosc jest mniejsza to temp. spada, czyli "szczalka" w dol. Natomiast jesli temp. jest wieksza od poprzedniego pomiaru wtedy "szczalka" w gore. Proste prawda?! :D
  • REKLAMA
  • #5 5314348
    JmL(TM)
    Poziom 24  
    No nic prostrzego chyba juz nie ma do zrobienia. Deklarujesz 2 zmienne i najpierw dokonujesz odczytu i zapisujesz do jednej zmiennej, a nastepnie po min. 0,7sek bo chyba tyle potrzebuje DS z tego co pamietam dodkonujesz nastepnego pomiaru i wartosc zapisujesz do zmiennej nr 2. Pozniej tylko warunek:

    jesli [t2>t1] wtedy
      wyswietl strzalke [temp. rosnie]
    w przeciwnym wypadku
      jesli [t2<t1] // to zeby wyeliminowac gdy temperatura jest identyczna
        wyswietl strzalke [temp. maleje]


    A jesli chcesz gotowca to Balu chetnie ci pomoze bo w jego poscie na dole mozna przeczytac:

    Cytat:
    Przyjmę zlecenia na układy z uC (PIC/AVR/51/8080) w (C/ASM/BASCOM) i nie tylko, krótkie terminy, rzetelnie!


    wiec pewnie sobie z tym poradzi i niedrogo wezmie! :D
  • REKLAMA
  • #6 5314356
    Samuraj
    Poziom 35  
    Przecież JmL(TM) dość szczegółowo ci napisał jak to wykonać.
    Chyba że liczysz na gotowca, jeśli tak to nie tędy droga.
    Zrób sobie zmienną i w niej zapamiętaj wynik pomiaru.
    Przy kolejnym odczycie od tej zmiennej odejmij aktualną temperaturę:
    - jeśli wynik tej operacji będzie ujemny to temperatura spadła i strzałka w dół.
    - jeśli wynik równy jest 0 to temperatura się nie zmieniła
    - jeśli wynik po odejmowaniu będzie dodatni to temperatura wzrosła i strzałka w górę.
  • #7 5315327
    JmL(TM)
    Poziom 24  
    Samuraj ja nie tylko dosc szczegolowo to opisalem ale praktycznie napisalem potrzebny kawalek kodu, z ta tylko roznica, ze po polsku :D Jesli by to zamienic na angielski to otrzymujemy gotowca... hehehe Ale mam nadzieje, ze Mariuszek15 juz sobie z tym poradzil.
  • #8 5316762
    Mariuszek15
    Poziom 24  
    Tak tak poradziłem sobie :) Działa elegancko tylko jeszcze musze wykonać histerezę ;) Dla OUT 1*C a dla IN 0,3*C.
  • REKLAMA
  • #10 5387090
    JmL(TM)
    Poziom 24  
    Cytat:
    Histereza - zjawisko zależności aktualnego stanu układu od stanów w poprzedzających chwilach. Inaczej - opóźnienie w reakcji na czynnik zewnętrzny (...)


    A jesli chcesz wiecej to zapraszam na: http://pl.wikipedia.org/wiki/Histereza
  • #11 5390643
    daw_id
    Poziom 12  
    Jak ktoś pyta, co to jest histereza, to takiej jej definicji też raczej nie zrozumie ;p

    Chodzi o to, że np. strzałka zmieni się na rosnącą przy różnicy kolejnych dwóch wartości o 0.2°C, a na malejącą przy różnicy o -0.2°C - a nie od razu przy JAKIEJKOLWIEK różnicy. Tym sposobem strzałka nie będzie szaleć, jeśli temperatura będzie stała, albo prawie stała - bo nawet stała temp. tak na prawdę daje z czujnika lekko szalejący odczyt - strzałka by ci wtedy wariowała cały czas góra-dół-góra-dół-góra...

    Pozdro
  • #12 5391119
    Hubold
    Poziom 11  
    Witam!

    W zeszłym roku był na ten temat topic.

    Strona z kodem w połowie jest kod.

    Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci 
    'Kontakt duszkowski(małpa)o2.pl 
    
    
    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8 
    $crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza) 
    'Deklaracja portów od wyświetlacza LCD 
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5 
    
    Config Lcd = 20 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków) 
    
    '*************************************WAŻNE********************************************** 
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC 
    Config 1wire = Portd.5                                      'deklaracja portu na którym będą podpięte DS18b20 
    
    Dim I1 As Integer , Ss As String * 6 
    Dim I2 As Integer 
    Dim I3 As Integer 
    Dim I4 As Integer 
    Dim I11 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I22 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I33 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I44 As Integer                                          ' przechowuje poprzednią wartoś temp 
    
    Dim Dsid1(8) As Byte 
    Dim Dsid2(8) As Byte 
    Dim Dsid3(8) As Byte 
    Dim Dsid4(8) As Byte 
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID 
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników 
    
    Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32          'znak stopnia Celsjusza 
    Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzałka góra 
    Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzałka dół 
    
    
    Cursor Off                                                  'Wyłącza kursor 
    Cls                                                         'Funkcja CLS czyści ekran 
    Lcd "     Termometr      " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia) 
    Lowerline 
    Lcd " by Duch 9.09.2007  " 
    Wait 5 
    Cls 
    Lcd "  Upgrade 24.04.08  " ; 
    Wait 3                                'ekran startowy (pojawia się tylko podczas włączania urządzenia) 
    Cls 
    
    W = 1wirecount() 
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia) 
    Waitms 500 
    Lcd W 
    Wait 3 
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu 
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu 
    Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
    Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
    Dsid4(1) = 1wsearchnext() 
    
    '*******************Odczyt numerów ID czujników temperatury********************* 
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia 
     Locate 1 , 1 
     Lcd "CRC OK Czujnik 1 ID" 
     Wait 1 
     Locate 1 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid1(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid2(8) = Crc8(dsid2(1) , 7) Then 
     Locate 2 , 1 
     Lcd "CRC OK Czujnik 2 ID" 
     Wait 1 
     Locate 2 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid2(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid3(8) = Crc8(dsid3(1) , 7) Then 
     Locate 1 , 1 
     Lcd "CRC OK Czujnik 3 ID" 
     Wait 1 
     Locate 1 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid3(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid4(8) = Crc8(dsid4(1) , 7) Then 
     Locate 2 , 1 
     Lcd "CRC OK Czujnik 4 ID" 
     Wait 1 
     Locate 2 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid4(b)) 
     Next 
    End If 
    Wait 2 
    Cls 
    
    '*******************koniec odczytu ID czujników temperatury********************* 
    
    Do 
       1wreset 
       1wwrite &H55 
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika 
       1wwrite &HBE 
       I1 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika 
       1wwrite &HBE 
       I2 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid3(1)                                        'wysylam adres trzeciego czujnika 
       1wwrite &HBE 
       I3 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid4(1)                                        'wysylam adres czwartego czujnika 
       1wwrite &HBE 
       I4 = 1wread(2) 
    '--------konwersja temp dla wszystkich dsow 
       1wreset 
       1wwrite &HCC 
       1wwrite &H44 
    Wait 1 
    
    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE******** 
    
       I1 = I1 * 10 
       I1 = I1 / 16 
       If I1 >= I11 Then 
       I11 = I1 
       If I1 > 0 Then 
       Ss = Str(i1) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i1) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I11 = I1 
       If I1 > 0 Then 
       Ss = Str(i1) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i1) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I2 = I2 * 10 
       I2 = I2 / 16 
       If I2 >= I22 Then 
       I22 = I2 
       If I2 > 0 Then 
       Ss = Str(i2) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i2) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I22 = I2 
       If I1 > 0 Then 
       Ss = Str(i2) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i2) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I3 = I3 * 10 
       I3 = I3 / 16 
       If I3 >= I33 Then 
       I33 = I3 
       If I3 > 0 Then 
       Ss = Str(i3) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i3) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I33 = I3 
       If I1 > 0 Then 
       Ss = Str(i3) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i3) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I4 = I4 * 10 
       I4 = I4 / 16 
       If I4 >= I44 Then 
       I44 = I4 
       If I1 > 0 Then 
       Ss = Str(i4) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i4) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I44 = I4 
       If I4 > 0 Then 
       Ss = Str(i4) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i4) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    Loop 
    
    'Koniec programu 
    'Pozdrawiam Duch


    Musisz tylko dostosować go do swoich potrzeb , czyli jeżeli masz 2 czujniki musisz usunąć komendy wyszukiwania 3 i 4 czujnika oraz wyświetlania temp. pobranej z 3 i 4 czujnika itp. :] Ja w swoim projekcie wykorzystałem właśnie ten kod, działa wyśmienicie:) problem tylko w tym ,że strzałka jest cały czas w ruchy zn. zmienia się bardzo często ze wzrostowej na malejącą przy niewielkich różnicach temp.


    Pozdrawiam
    Michał
  • #14 5393413
    Hubold
    Poziom 11  
    No to wiem. Ale w sumie nie potrzebuję Histerezy więc nie kombinuję jak ulepszyć ten program poza tym dopiero zaczynam z programowaniem.
  • #15 5415012
    Mariuszek15
    Poziom 24  
    Mam pytanko czy na linii SDA SCL może być złącze ISP chodzi głównie o TDA7318 i pamięć eeprom. Czy te scalaki nie ulegną uszkodzeniu, jeśli będzie układ programowany (ATMEGA32) ?
  • #17 5416429
    Mariuszek15
    Poziom 24  
    Jak pozmieniać wartości? Właśnie to ale mnie martwi :(
  • #18 5416844
    Balu
    Poziom 38  
    Zawsze możesz mieć strasznego pecha i trawić danymi procka w adres urządzenia do zapisu, potem sie moze wygenerować potwierdzenie bla bla bla ... ale... NIE MOŻLIWE:)
    Ja bym się tym nie przejął chyba:P
  • #19 5439229
    nico99
    Poziom 11  
    JmL(TM) napisał:
    No nic prostrzego chyba juz nie ma do zrobienia. Deklarujesz 2 zmienne i najpierw dokonujesz odczytu i zapisujesz do jednej zmiennej, a nastepnie po min. 0,7sek bo chyba tyle potrzebuje DS z tego co pamietam dodkonujesz nastepnego pomiaru i wartosc zapisujesz do zmiennej nr 2. Pozniej tylko warunek:

    jesli [t2>t1] wtedy
      wyswietl strzalke [temp. rosnie]
    w przeciwnym wypadku
      jesli [t2<t1] // to zeby wyeliminowac gdy temperatura jest identyczna
        wyswietl strzalke [temp. maleje]


    A jesli chcesz gotowca to Balu chetnie ci pomoze bo w jego poscie na dole mozna przeczytac:

    Cytat:
    Przyjmę zlecenia na układy z uC (PIC/AVR/51/8080) w (C/ASM/BASCOM) i nie tylko, krótkie terminy, rzetelnie!


    wiec pewnie sobie z tym poradzi i niedrogo wezmie! :D



    Pozdrowienia,

    jestem tutaj nowy i poczatkujacy Urzytkownik BASCOM.
    Chce rowniez zbudowac taki Termometr , plytka do testowania jest juz gotowa i Termometr dziala. W innych Kodach mialem problemy we wkazaniu temperatury, zawsze brakowalo pierwszej cyfry.
    Jedno co mi nie wychodzi jest z tymi Strzalkami. Ale dokladnie mowiac mam jakich nieporzadek w kodzie i nie moge znalezc gdzie.

    Tutaj jest wycinek z tego kodu:

    1wreset
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1(1) = 1wread(9)
    
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Waitms 300
    Waitms 300
    
    
    If I1(8) = Crc8(i1(1) , 7) Then
    Crc = 0
    End If
       If Crc = 0 Then
       Tmp = I1(1) And 1
       If Tmp = 1 Then Decr I1(1)
       T = Makeint(i1(1) , I1(2))
       T = T * 50 : T = T - 25 : T1 = I1(8) - I1(7) : T1 = T1 * 100
       T1 = T1 / I1(8) : T = T + T1 : T = T / 10
       End If
          If Crc = 1 Then
          Locate 4 , 1 : Lcd " Sensor Error! "
          Else
          Locate 4 , 1
          Lcd "WaterTemp:"
          If Crc = 0 Then
          Locate 4 , 12
          Ia = Str(t)
          Lcd Left(ia , 2) : Lcd "."
          Lcd Mid(ia , 3 , 1)
          Locate 4 , 16 : Lcd Chr(1) ; "C"
          End If
    
    '------------------Strzalka przy obnizeniu albo podwyzszeniu Temp---------------
    If T1 > T Then
    Locate 4 , 19 : Lcd Chr(12)
    Else
    If T1 < T Then
    Locate 4 , 19 : Lcd Chr(13)
    End If
    
    End If
    
    Loop
    End
    
    Return
    


    [bascom] DS18b20 strzałki sygnalizujące spadek i wzrost temp

    Bascom pokazuje te bledy ale ja nie moge dojsc do tego. Jestem jak wspomnialem poczatkujacy.

    Moze mi ktos poradzi albo wakaze co mam poprawic.

    Dzekuje.

    Pozdrowienia
    Nico:?:

    PS: znalazlem ten blad, brakowal jeden End if.
    Niestety strzalki nie reaguja na zmiane temperatury...

    post raportowany,
    proszę poprawić błędy,
    post będzie bardziej czytelny
    And!


    Dodano po 3 [godziny] 1 [minuty]:

    Cytat:


    post raportowany,
    proszę poprawić błędy,
    post będzie bardziej czytelny
    And!


    Bardzo hetnie ale moj polski nie jest za dobry...
  • #20 5441881
    crazy_phisic
    VIP Zasłużony dla elektroda
    Proszę pozostawić dla siebie wszystkie niepotrzebne uwagi, forum jest miejscem publicznym i otwartym dla każdego. Nie będę tolerował żadnych przejawów dyskryminacji.
  • #21 5449860
    nico99
    Poziom 11  
    Hubold napisał:
    Witam!

    W zeszłym roku był na ten temat topic.

    Strona z kodem w połowie jest kod.

    Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci 
    'Kontakt duszkowski(małpa)o2.pl 
    
    
    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8 
    $crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza) 
    'Deklaracja portów od wyświetlacza LCD 
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5 
    
    Config Lcd = 20 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków) 
    
    '*************************************WAŻNE********************************************** 
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC 
    Config 1wire = Portd.5                                      'deklaracja portu na którym będą podpięte DS18b20 
    
    Dim I1 As Integer , Ss As String * 6 
    Dim I2 As Integer 
    Dim I3 As Integer 
    Dim I4 As Integer 
    Dim I11 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I22 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I33 As Integer                                          ' przechowuje poprzednią wartoś temp 
    Dim I44 As Integer                                          ' przechowuje poprzednią wartoś temp 
    
    Dim Dsid1(8) As Byte 
    Dim Dsid2(8) As Byte 
    Dim Dsid3(8) As Byte 
    Dim Dsid4(8) As Byte 
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID 
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników 
    
    Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32          'znak stopnia Celsjusza 
    Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzałka góra 
    Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzałka dół 
    
    
    Cursor Off                                                  'Wyłącza kursor 
    Cls                                                         'Funkcja CLS czyści ekran 
    Lcd "     Termometr      " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia) 
    Lowerline 
    Lcd " by Duch 9.09.2007  " 
    Wait 5 
    Cls 
    Lcd "  Upgrade 24.04.08  " ; 
    Wait 3                                'ekran startowy (pojawia się tylko podczas włączania urządzenia) 
    Cls 
    
    W = 1wirecount() 
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia) 
    Waitms 500 
    Lcd W 
    Wait 3 
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu 
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu 
    Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
    Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
    Dsid4(1) = 1wsearchnext() 
    
    '*******************Odczyt numerów ID czujników temperatury********************* 
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia 
     Locate 1 , 1 
     Lcd "CRC OK Czujnik 1 ID" 
     Wait 1 
     Locate 1 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid1(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid2(8) = Crc8(dsid2(1) , 7) Then 
     Locate 2 , 1 
     Lcd "CRC OK Czujnik 2 ID" 
     Wait 1 
     Locate 2 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid2(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid3(8) = Crc8(dsid3(1) , 7) Then 
     Locate 1 , 1 
     Lcd "CRC OK Czujnik 3 ID" 
     Wait 1 
     Locate 1 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid3(b)) 
     Next 
    End If 
    Wait 2 
    
    If Dsid4(8) = Crc8(dsid4(1) , 7) Then 
     Locate 2 , 1 
     Lcd "CRC OK Czujnik 4 ID" 
     Wait 1 
     Locate 2 , 1 
     For B = 1 To 8 
     Lcd Hex(dsid4(b)) 
     Next 
    End If 
    Wait 2 
    Cls 
    
    '*******************koniec odczytu ID czujników temperatury********************* 
    
    Do 
       1wreset 
       1wwrite &H55 
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika 
       1wwrite &HBE 
       I1 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika 
       1wwrite &HBE 
       I2 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid3(1)                                        'wysylam adres trzeciego czujnika 
       1wwrite &HBE 
       I3 = 1wread(2) 
    '--------------------------------- 
       1wreset 
       1wwrite &H55 
       1wverify Dsid4(1)                                        'wysylam adres czwartego czujnika 
       1wwrite &HBE 
       I4 = 1wread(2) 
    '--------konwersja temp dla wszystkich dsow 
       1wreset 
       1wwrite &HCC 
       1wwrite &H44 
    Wait 1 
    
    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE******** 
    
       I1 = I1 * 10 
       I1 = I1 / 16 
       If I1 >= I11 Then 
       I11 = I1 
       If I1 > 0 Then 
       Ss = Str(i1) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i1) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I11 = I1 
       If I1 > 0 Then 
       Ss = Str(i1) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i1) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 1 
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I2 = I2 * 10 
       I2 = I2 / 16 
       If I2 >= I22 Then 
       I22 = I2 
       If I2 > 0 Then 
       Ss = Str(i2) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i2) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I22 = I2 
       If I1 > 0 Then 
       Ss = Str(i2) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i2) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 1 
       Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I3 = I3 * 10 
       I3 = I3 / 16 
       If I3 >= I33 Then 
       I33 = I3 
       If I3 > 0 Then 
       Ss = Str(i3) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i3) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I33 = I3 
       If I1 > 0 Then 
       Ss = Str(i3) 
       Ss = Format(ss , " 0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i3) 
       Ss = Format(ss , "0.0") 
       Locate 1 , 11 
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    
       I4 = I4 * 10 
       I4 = I4 / 16 
       If I4 >= I44 Then 
       I44 = I4 
       If I1 > 0 Then 
       Ss = Str(i4) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ; 
       Else 
       Ss = Str(i4) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ; 
       End If 
       Else 
       I44 = I4 
       If I4 > 0 Then 
       Ss = Str(i4) 
       Ss = Format(ss , " 0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ; 
       Else 
       Ss = Str(i4) 
       Ss = Format(ss , "0.0") 
       Locate 2 , 11 
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ; 
       End If 
       End If 
    
    Loop 
    
    'Koniec programu 
    'Pozdrawiam Duch


    Musisz tylko dostosować go do swoich potrzeb , czyli jeżeli masz 2 czujniki musisz usunąć komendy wyszukiwania 3 i 4 czujnika oraz wyświetlania temp. pobranej z 3 i 4 czujnika itp. :] Ja w swoim projekcie wykorzystałem właśnie ten kod, działa wyśmienicie:) problem tylko w tym ,że strzałka jest cały czas w ruchy zn. zmienia się bardzo często ze wzrostowej na malejącą przy niewielkich różnicach temp.


    Pozdrawiam
    Michał


    Halo Michał,

    mam problem z tym kodem bo wyświetla mi tylko n.p.: 2.6 Stopni a nie jak powinno: 22.6 Stopni

    Mógł byś pomóc?

    Dziękuję z góry i pozdrawiam.

    Nico
  • #22 5532610
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA