Skip to content

Commit 61fdc48

Browse files
committed
linting and refactoring
1 parent 2d06455 commit 61fdc48

File tree

3 files changed

+63
-76
lines changed

3 files changed

+63
-76
lines changed

SipNPyuff/code.py

Lines changed: 13 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,63 +3,13 @@
33
import busio
44
import adafruit_lps35hw
55
from puff_detector import PuffDetector
6-
from adafruit_debug_i2c import DebugI2C
76

87

98

109

11-
# if pressure > 0:
12-
# if pressure_level == 1:
13-
# pressure_type = "Soft Puff"
14-
# if pressure_level == 2:
15-
# pressure_type = "Hard Puff"
16-
# else:
17-
18-
# if pressure_level == 1:
19-
# pressure_type = "Soft Sip"
20-
# if pressure_level == 2:
21-
# pressure_type = "Hard Sip"
22-
#pylint:disable:invalid-name
23-
24-
def catagorize_pressure(pressure):
25-
"""determine the strength and polarity of the pressure reading"""
26-
level = 0
27-
direction = 0
28-
abs_pressure = abs(pressure)
29-
30-
if abs_pressure > min_pressure:
31-
level = 1
32-
if abs_pressure > high_pressure:
33-
level = 2
34-
35-
if level != 0:
36-
if pressure > 0:
37-
direction = 1
38-
else:
39-
direction = -1
40-
41-
return (direction, level)
42-
43-
def pressure_string(pressure_type):
44-
dir, level = pressure_type
45-
pressure_str = "HIGH"
46-
if level == 0 or dir == 0:
47-
return ""
48-
#print("pressure level:", level)
49-
if level == 1:
50-
pressure_str = "LOW"
51-
elif level == 2:
52-
presure_str = "HIGH"
53-
54-
if dir == 1:
55-
pressure_str += "PUFF"
56-
elif dir == -1:
57-
pressure_str += "SIP"
58-
return pressure_str
59-
6010
i2c = busio.I2C(board.SCL, board.SDA)
6111
# i2c = DebugI2C(i2c)
62-
lps = adafruit_lps35hw.LPS35HW(i2c, 0x5c)
12+
lps = adafruit_lps35hw.LPS35HW(i2c, 0x5C)
6313

6414
lps.zero_pressure()
6515
lps.data_rate = adafruit_lps35hw.DataRate.RATE_75_HZ
@@ -74,7 +24,7 @@ def pressure_string(pressure_type):
7424

7525
lps.filter_config = True
7626
# print("Filter Config:", lps.low_pass_config)
77-
27+
detector = PuffDetector(min_pressure=8, high_pressure=20)
7828
time.sleep(1)
7929
prev_direction = None
8030
pressure_list = []
@@ -89,16 +39,16 @@ def pressure_string(pressure_type):
8939
current_pressure = lps.pressure
9040
# print((current_pressure,))
9141

92-
pressure_type = catagorize_pressure(current_pressure)
42+
pressure_type = detector.catagorize_pressure(current_pressure)
9343

9444
if pressure_type != prev_pressure_type:
9545
puff_end = time.monotonic()
96-
puff_duration = puff_end-puff_start
46+
puff_duration = puff_end - puff_start
9747
puff_start = puff_end
98-
#print("\tpressure type:", pressure_type)
99-
#print("duration:", puff_duration)
48+
# print("\tpressure type:", pressure_type)
49+
# print("duration:", puff_duration)
10050
direction, level = pressure_type
101-
#print("direction:", direction, "level:", level)
51+
# print("direction:", direction, "level:", level)
10252

10353
if (direction == 1) and (prev_level > level):
10454
print("Down")
@@ -108,18 +58,18 @@ def pressure_string(pressure_type):
10858
print("Up")
10959
puff_duration += prev_duration
11060
level = prev_level
111-
112-
#print("direction:", direction, "level:", level)
61+
62+
# print("direction:", direction, "level:", level)
11363
if puff_duration > 0.2:
11464
print("direction:", direction, "level:", level)
11565

11666
print("\tduration:", puff_duration)
117-
# print(current_pressure)
118-
label = pressure_string((direction, level))
119-
label = pressure_string(pressure_type)
67+
# print(current_pressure)
68+
label = detector.pressure_string((direction, level))
69+
label = detector.pressure_string(pressure_type)
12070
print("\t\t\t\t", label)
12171
print("____________________")
12272
prev_pressure_type = pressure_type
12373
prev_duration = puff_duration
12474
prev_level = level
125-
time.sleep(0.01)
75+
time.sleep(0.01)

SipNPyuff/puff_detector.py

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
class PuffDetector:
2+
3+
def __init__(self, min_pressure=8, high_pressure=20):
4+
self.high_pressure=high_pressure
5+
self.min_pressure = min_pressure
26
@classmethod
3-
def rolling_average(self, measurements):
4-
measurement_sum = 0
5-
window_size = 3
7+
def rolling_average(cls, measurements, window_size=3):
68
# print("measurements", measurements)
79
window = measurements[-window_size:]
810

911
return sum(window) / window_size
1012

1113
@classmethod
12-
def slope(self, a, b):
14+
def slope(cls, a, b):
1315

1416
if a > b:
1517
return 1
@@ -19,18 +21,55 @@ def slope(self, a, b):
1921
return 0
2022

2123
@classmethod
22-
def direction(self, measurements): # requires 6 measurements
23-
average = self.rolling_average(measurements)
24-
prev_average = self.rolling_average(measurements[-6:-3])
24+
def direction(cls, measurements): # requires 6 measurements
25+
average = cls.rolling_average(measurements)
26+
prev_average = cls.rolling_average(measurements[-6:-3])
2527
# print()
2628
# print("measurements:", measurements)
2729
# print("prev_average", prev_average)
2830
# print("average:", average)
29-
current_slope = self.slope(average, prev_average)
31+
current_slope = cls.slope(average, prev_average)
3032
# print("slope:", current_slope)
3133
return current_slope
3234

3335
@classmethod
34-
def direction_changed(self, measurements, prev_direction):
35-
direction = self.direction(measurements)
36+
def direction_changed(cls, measurements, prev_direction):
37+
direction = cls.direction(measurements)
3638
return prev_direction != direction
39+
40+
def catagorize_pressure(self, pressure):
41+
"""determine the strength and polarity of the pressure reading"""
42+
level = 0
43+
direction = 0
44+
abs_pressure = abs(pressure)
45+
46+
if abs_pressure > self.min_pressure:
47+
level = 1
48+
if abs_pressure > self.high_pressure:
49+
level = 2
50+
51+
if level != 0:
52+
if pressure > 0:
53+
direction = 1
54+
else:
55+
direction = -1
56+
57+
return (direction, level)
58+
59+
@staticmethod
60+
def pressure_string(pressure_type):
61+
direction, level = pressure_type
62+
pressure_str = "HIGH"
63+
if level == 0 or direction == 0:
64+
return ""
65+
# print("pressure level:", level)
66+
if level == 1:
67+
pressure_str = "LOW"
68+
elif level == 2:
69+
pressure_str = "HIGH"
70+
71+
if direction == 1:
72+
pressure_str += "PUFF"
73+
elif direction == -1:
74+
pressure_str += "SIP"
75+
return pressure_str

SipNPyuff/puff_detector_test.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import unittest
2-
3-
import puff_detector
42
from puff_detector import PuffDetector
53

64

@@ -28,7 +26,7 @@ def test_negative_to_positive(self):
2826
self.assertEqual(PuffDetector.direction_changed(reading_list, -1), True)
2927

3028
def test_negative_to_negative_er(self):
31-
reading_list = [-1, -2, -3, -4, -5. -6, -7, -8]
29+
reading_list = [-1, -2, -3, -4, -5.0 - 6, -7, -8]
3230
self.assertEqual(PuffDetector.direction_changed(reading_list, -1), False)
3331

3432
def test_positive_to_negative(self):

0 commit comments

Comments
 (0)