-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlistener.py
76 lines (55 loc) · 1.87 KB
/
listener.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from sense_hat import SenseHat
import serial
from numpy import median
BLUE = [0,0,255]
GREEN = [0,255,0]
RED = [255,0,0]
ROTATION = 0
NUM_READINGS = 20
WARM_MIN = 16
WARM_MAX = 28
class Temp_listener:
def __init__(self):
self.colours = {"cold": BLUE,
"warm": GREEN,
"hot": RED}
self.sense = SenseHat()
self.sense.set_rotation(ROTATION)
self.sense._init_humidity()
self.sense._init_pressure()
self.ser = serial.Serial('/dev/ttyACM0')
self.ser.flushInput()
self.last = None
def read_temp(self):
readings = []
while True:
readings = []
try:
for i in range(NUM_READINGS):
bytes = self.ser.readline()
decoded = bytes[0:len(bytes)-2].decode("utf-8")
decoded = float(decoded)
readings.append(decoded)
break
except:
pass
return median(readings)
def read_humidity(self):
return self.sense.get_humidity()
def read_pressure(self):
return self.sense.get_pressure()
def last_reading(self):
self.sense.low_light = True
self.sense.clear(self.last)
return
def display_temp(self, temp):
self.sense.low_light = False
if(temp < WARM_MIN):
self.sense.show_message(str(temp),text_colour = self.colours["cold"],scroll_speed=0.3)
self.last = self.colours["cold"]
elif(temp >= WARM_MIN and temp <= WARM_MAX):
self.sense.show_message(str(temp),text_colour = self.colours["warm"],scroll_speed=0.3)
self.last = self.colours["warm"]
else:
self.sense.show_message(str(temp),text_colour = self.colours["hot"],scroll_speed=0.3)
self.last = self.colours["hot"]