Skip to content

Commit 88d2477

Browse files
committed
Should run slightly quicker. Haven't tested
1 parent dfb9a5f commit 88d2477

File tree

2 files changed

+64
-28
lines changed

2 files changed

+64
-28
lines changed

CircuitPython_Pyloton/code.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,6 @@
4747
print("Fetch connection")
4848
hr_service = hr_connection[HeartRateService]
4949
print("Location:", hr_service.location)
50+
pyloton.setup_display()
5051
while hr_connection.connected:
5152
pyloton.update_display(hr_service)

CircuitPython_Pyloton/pyloton.py

Lines changed: 63 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def __init__(self, ble, display, circ, heart=True, speed=True, cad=True, ams=Tru
5151

5252
self.hr_connection = None
5353

54-
54+
self.num_enabled = heart + speed + cad + ams
5555
self._load_fonts()
5656

5757
self.sprite_sheet, self.palette = adafruit_imageload.load("/sprite_sheet.bmp",
@@ -126,13 +126,15 @@ def _status_update(self, message):
126126
self.display.show(self.loading_group)
127127
time.sleep(0.01)
128128

129+
129130
def timeout(self):
130131
"""
131132
Displays Timeout on screen when pyloton has been searching for a sensor for too long
132133
"""
133134
self._status_update("Timeout")
134135
time.sleep(3)
135136

137+
136138
def heart_connect(self):
137139
"""
138140
Connects to heart rate sensor
@@ -146,6 +148,7 @@ def heart_connect(self):
146148
break
147149
return self.hr_connection
148150

151+
149152
def speed_cad_connect(self):
150153
"""
151154
Connects to speed and cadence sensor
@@ -219,6 +222,7 @@ def read_s_and_c(self):
219222
return speed, cadence
220223
return 0, 0
221224

225+
222226
def read_heart(self, hr_service):
223227
"""
224228
Reads date from the heart rate sensor
@@ -236,17 +240,47 @@ def icon_maker(self, n, icon_x, icon_y):
236240
"""
237241
Generates icons as sprites
238242
"""
239-
240-
sprite = displayio.TileGrid(self.sprite_sheet, pixel_shader=self.palette, width=1, height=1, tile_width=40, tile_height=40, default_tile=n, x=icon_x, y=icon_y)
243+
sprite = displayio.TileGrid(self.sprite_sheet, pixel_shader=self.palette, width=1,
244+
height=1, tile_width=40, tile_height=40, default_tile=n,
245+
x=icon_x, y=icon_y)
241246
return sprite
242247

248+
243249
def _label_maker(self, text, x, y):
244250
"""
245251
Generates labels
246252
"""
247253
return label.Label(font=self.arial24, x=x, y=y, text=text, color=self.WHITE)
248254

249-
def _setup_display(self):
255+
256+
def _get_y(self):
257+
"""
258+
Helper function for setup_display. Gets the y values used for sprites and labels.
259+
"""
260+
enabled = self.num_enabled
261+
262+
if self.heart_enabled:
263+
self.heart_y = 45*(self.num_enabled - enabled) + 75
264+
enabled -= 1
265+
266+
if self.speed_enabled:
267+
self.speed_y = 45*(self.num_enabled - enabled) + 75
268+
enabled -= 1
269+
270+
if self.cadence_enabled:
271+
self.cad_y = 45*(self.num_enabled - enabled) + 75
272+
enabled -= 1
273+
274+
if self.ams_enabled:
275+
self.ams_y = 45*(self.num_enabled - enabled) + 75
276+
enabled -= 1
277+
278+
279+
def setup_display(self):
280+
"""
281+
Prepares the display to show sensor values: Adds a header, a heading, and various sprites.
282+
"""
283+
self._get_y()
250284
sprites = displayio.Group()
251285

252286
rect = Rect(0, 0, 240, 50, fill=self.PURPLE)
@@ -256,60 +290,61 @@ def _setup_display(self):
256290
self.splash.append(heading)
257291

258292
if self.heart_enabled:
259-
heart_sprite = self.icon_maker(0, 2, 55)
293+
heart_sprite = self.icon_maker(0, 2, self.heart_y - 20)
260294
sprites.append(heart_sprite)
261295

262296
if self.speed_enabled:
263-
speed_sprite = self.icon_maker(1, 2, 100)
297+
speed_sprite = self.icon_maker(1, 2, self.speed_y - 20)
264298
sprites.append(speed_sprite)
265299

266300
if self.cadence_enabled:
267-
cadence_sprite = self.icon_maker(2, 2, 145)
301+
cadence_sprite = self.icon_maker(2, 2, self.cad_y - 20)
268302
sprites.append(cadence_sprite)
269303

270304
if self.ams_enabled:
271-
ams_sprite = self.icon_maker(3, 2, 190)
305+
ams_sprite = self.icon_maker(3, 2, self.ams_y - 20)
272306
sprites.append(ams_sprite)
273307

274308
self.splash.append(sprites)
275309

276310

277311
def update_display(self, hr_service):
312+
"""
313+
Updates the display to display the most recent values
314+
"""
278315
heart = self.read_heart(hr_service)
279316
speed, cadence = self.read_s_and_c()
280317

281-
if len(self.splash) == 0:
282-
self._setup_display()
283-
284318
if self.heart_enabled:
285-
hr_label = self._label_maker('{} bpm'.format(heart), 50, 75)
286-
if not self.setup:
287-
self.splash.append(hr_label)
288-
else:
319+
hr_label = self._label_maker('{} bpm'.format(heart), 50, self.heart_y) # 75
320+
if self.setup:
289321
self.splash[3] = hr_label
322+
else:
323+
self.splash.append(hr_label)
290324

291325
if self.speed_enabled:
292-
sp_label = self._label_maker('{} mph'.format(speed), 50, 120)
293-
if not self.setup:
294-
self.splash.append(sp_label)
295-
else:
326+
sp_label = self._label_maker('{} mph'.format(speed), 50, self.speed_y) # 120
327+
if self.setup:
296328
self.splash[4] = sp_label
329+
else:
330+
self.splash.append(sp_label)
331+
297332

298333
if self.cadence_enabled:
299-
cad_label = self._label_maker('{} rpm'.format(cadence), 50, 165)
300-
if not self.setup:
301-
self.splash.append(cad_label)
302-
else:
334+
cad_label = self._label_maker('{} rpm'.format(cadence), 50, self.cad_y) # 165
335+
if self.setup:
303336
self.splash[5] = cad_label
337+
else:
338+
self.splash.append(cad_label)
304339

305340
if self.ams_enabled:
306-
ams_label = self._label_maker('None', 50, 210)
307-
if not self.setup:
308-
self.splash.append(ams_label)
309-
else:
341+
ams_label = self._label_maker('None', 50, self.ams_y) # 210
342+
if self.setup:
310343
self.splash[6] = ams_label
344+
else:
345+
self.splash.append(ams_label)
346+
311347

312348
self.setup=True
313-
#time.sleep(0.2)
314349

315350
self.display.show(self.splash)

0 commit comments

Comments
 (0)