Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b5bae97

Browse files
Added check for floating point support to onewire lib. Updated onewire example
1 parent 75eff3b commit b5bae97

File tree

2 files changed

+50
-18
lines changed

2 files changed

+50
-18
lines changed

examples/onewire/onewire.py

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

lib/onewire/onewire.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
"""
@@ -217,10 +222,16 @@ def convert_temp(self, rom0, data):
217222
temp_read = temp_lsb >> 1 # truncate bit 0 by shifting
218223
count_remain = data[6]
219224
count_per_c = data[7]
220-
temp = 100 * temp_read - 25 + (count_per_c - count_remain) // count_per_c
221-
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
222229
elif rom0 == 0x28:
223-
temp = (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
224235
if (temp_msb & 0xf8) == 0xf8: # for negative temperature
225236
temp -= 0x1000
226237
return temp

0 commit comments

Comments
 (0)