@@ -160,6 +160,11 @@ class DS18X20(object):
160160    def  __init__ (self , onewire ):
161161        self .ow  =  onewire 
162162        self .roms  =  [rom  for  rom  in  self .ow .scan () if  rom [0 ] ==  0x10  or  rom [0 ] ==  0x28 ]
163+         self .fp  =  True 
164+         try :
165+             1 / 1 
166+         except  TypeError :
167+             self .fp  =  False  # floatingpoint not supported 
163168
164169    def  isbusy (self ):
165170        """ 
@@ -174,11 +179,14 @@ def start_convertion(self, rom=None):
174179        Pass the 8-byte bytes object with the ROM of the specific device you want to read. 
175180        If only one DS18x20 device is attached to the bus you may omit the rom parameter. 
176181        """ 
177-         rom  =  rom  or  self .roms [0 ]
178-         ow  =  self .ow 
179-         ow .reset ()
180-         ow .select_rom (rom )
181-         ow .write_byte (0x44 )  # Convert Temp 
182+         if  (rom == None ) and  (len (self .roms )> 0 ):
183+             rom = self .roms [0 ]
184+         if  rom != None :    
185+             rom  =  rom  or  self .roms [0 ]
186+             ow  =  self .ow 
187+             ow .reset ()
188+             ow .select_rom (rom )
189+             ow .write_byte (0x44 )  # Convert Temp 
182190
183191    def  read_temp_async (self , rom = None ):
184192        """ 
@@ -187,13 +195,17 @@ def read_temp_async(self, rom=None):
187195        """ 
188196        if  self .isbusy ():
189197            return  None 
190-         rom  =  rom  or  self .roms [0 ]
191-         ow  =  self .ow 
192-         ow .reset ()
193-         ow .select_rom (rom )
194-         ow .write_byte (0xbe )  # Read scratch 
195-         data  =  ow .read_bytes (9 )
196-         return  self .convert_temp (rom [0 ], data )
198+         if  (rom == None ) and  (len (self .roms )> 0 ):
199+             rom = self .roms [0 ]
200+         if  rom == None :     
201+             return  None 
202+         else :
203+             ow  =  self .ow 
204+             ow .reset ()
205+             ow .select_rom (rom )
206+             ow .write_byte (0xbe )  # Read scratch 
207+             data  =  ow .read_bytes (9 )
208+             return  self .convert_temp (rom [0 ], data )
197209
198210    def  convert_temp (self , rom0 , data ):
199211        """ 
@@ -210,9 +222,18 @@ def convert_temp(self, rom0, data):
210222                temp_read  =  temp_lsb  >>  1   # truncate bit 0 by shifting 
211223            count_remain  =  data [6 ]
212224            count_per_c  =  data [7 ]
213-             temp  =  100  *  temp_read  -  25  +  (count_per_c  -  count_remain ) //  count_per_c 
214-             return  temp 
225+             if  self .fp :
226+                 return  temp_read  -  25  +  (count_per_c  -  count_remain ) /  count_per_c 
227+             else :
228+                 return  100  *  temp_read  -  25  +  (count_per_c  -  count_remain ) //  count_per_c 
215229        elif  rom0  ==  0x28 :
216-             return  (temp_msb  <<  8  |  temp_lsb ) *  100  //  16 
230+             temp  =  None 
231+             if  self .fp :
232+                 temp  =  (temp_msb  <<  8  |  temp_lsb ) /  16 
233+             else :
234+                 temp  =  (temp_msb  <<  8  |  temp_lsb ) *  100  //  16 
235+             if  (temp_msb  &  0xf8 ) ==  0xf8 : # for negative temperature 
236+                 temp  -=  0x1000 
237+             return  temp 
217238        else :
218239            assert  False 
0 commit comments