Skip to content

Commit

Permalink
Merge pull request #30 from alaniwi/add_obj_example
Browse files Browse the repository at this point in the history
add object-oriented example code for the temperature probe
  • Loading branch information
japamment committed Nov 23, 2018
2 parents 27e8c93 + 785e2c8 commit 9b3e345
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
$ python main1.py
2018-11-23T11:25:41.135225 temperature = 23.3 degrees
2018-11-23T11:25:51.087159 temperature = 23.1 degrees
2018-11-23T11:26:01.039236 temperature = 27.4 degrees
2018-11-23T11:26:10.991217 temperature = 27.3 degrees
2018-11-23T11:26:20.943257 temperature = 26.4 degrees
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
$ python main2.py
2018-11-23T11:26:34.005752 current=25.6 min=25.6 max=25.6
2018-11-23T11:26:43.955339 current=25.2 min=25.2 max=25.6
2018-11-23T11:26:53.907398 current=24.7 min=24.7 max=25.6
2018-11-23T11:27:03.860271 current=24.4 min=24.4 max=25.6
2018-11-23T11:27:13.812171 current=24.1 min=24.1 max=25.6
2018-11-23T11:27:23.765222 current=23.9 min=23.9 max=25.6
Resetting max and min
2018-11-23T11:27:33.717196 current=28.7 min=28.7 max=28.7
2018-11-23T11:27:43.669152 current=30.8 min=28.7 max=30.8
2018-11-23T11:27:53.622132 current=31.7 min=28.7 max=31.7
2018-11-23T11:28:03.575222 current=30.4 min=28.7 max=31.7
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from thermometer import Thermometer

thermometer = Thermometer()

for i in range(5):
temp, when = thermometer.get_measurement()
print("{} temperature = {} degrees".format(when.isoformat(),
temp))

thermometer.close()
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from max_min_thermometer import MaxMinThermometer

mmt = MaxMinThermometer()

for i in range(10):

temp, when = mmt.get_measurement()
print("{} current={} min={} max={}".format(when.isoformat(),
temp,
mmt.min,
mmt.max))

if i == 5:
print("Resetting max and min")
mmt.reset_max_min()

mmt.close()
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from thermometer import Thermometer


class MaxMinThermometer(object):
"""
a maximum minimum thermometer which encapsulates (i.e. contains)
a thermometer and also stores min / max temperature data
"""

def __init__(self):
self.thermometer = Thermometer()
self.min = None
self.max = None


def get_measurement(self):
(temp, when) = self.thermometer.get_measurement()
self.update_max_min(temp)
return (temp, when)


def update_max_min(self, temp):
if self.min == None or self.min > temp:
self.min = temp
if self.max == None or self.max < temp:
self.max = temp


def reset_max_min(self):
self.min = None
self.max = None


def close(self):
self.thermometer.close()
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from datetime import datetime
import io
import serial


class Thermometer(object):

def __init__(self):
"""
Initialise the thermometer
"""
self.ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate=9600)
self.sio = io.TextIOWrapper(
io.BufferedRWPair(self.ser, self.ser, 1),
encoding='ascii', newline='\r')
self.sio._CHUNK_SIZE = 1


def get_measurement(self):
"""
Returns tuple of (temperature, when)
temperature is float and when is datetime object
"""
datastring = self.sio.readline().strip()
temp = float(datastring[:6])
when = datetime.utcnow()
return (temp, when)


def close(self):
self.ser.close()

0 comments on commit 9b3e345

Please sign in to comment.