-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #30 from alaniwi/add_obj_example
add object-oriented example code for the temperature probe
- Loading branch information
Showing
6 changed files
with
113 additions
and
0 deletions.
There are no files selected for viewing
6 changes: 6 additions & 0 deletions
6
python/exercises/example_code/temperature_probe_object_oriented_example/example_output1.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
12 changes: 12 additions & 0 deletions
12
python/exercises/example_code/temperature_probe_object_oriented_example/example_output2.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
10 changes: 10 additions & 0 deletions
10
python/exercises/example_code/temperature_probe_object_oriented_example/main1.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
17 changes: 17 additions & 0 deletions
17
python/exercises/example_code/temperature_probe_object_oriented_example/main2.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
35 changes: 35 additions & 0 deletions
35
...n/exercises/example_code/temperature_probe_object_oriented_example/max_min_thermometer.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
33 changes: 33 additions & 0 deletions
33
python/exercises/example_code/temperature_probe_object_oriented_example/thermometer.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |