@@ -51,7 +51,7 @@ def __init__(self, ble, display, circ, heart=True, speed=True, cad=True, ams=Tru
51
51
52
52
self .hr_connection = None
53
53
54
-
54
+ self . num_enabled = heart + speed + cad + ams
55
55
self ._load_fonts ()
56
56
57
57
self .sprite_sheet , self .palette = adafruit_imageload .load ("/sprite_sheet.bmp" ,
@@ -126,13 +126,15 @@ def _status_update(self, message):
126
126
self .display .show (self .loading_group )
127
127
time .sleep (0.01 )
128
128
129
+
129
130
def timeout (self ):
130
131
"""
131
132
Displays Timeout on screen when pyloton has been searching for a sensor for too long
132
133
"""
133
134
self ._status_update ("Timeout" )
134
135
time .sleep (3 )
135
136
137
+
136
138
def heart_connect (self ):
137
139
"""
138
140
Connects to heart rate sensor
@@ -146,6 +148,7 @@ def heart_connect(self):
146
148
break
147
149
return self .hr_connection
148
150
151
+
149
152
def speed_cad_connect (self ):
150
153
"""
151
154
Connects to speed and cadence sensor
@@ -219,6 +222,7 @@ def read_s_and_c(self):
219
222
return speed , cadence
220
223
return 0 , 0
221
224
225
+
222
226
def read_heart (self , hr_service ):
223
227
"""
224
228
Reads date from the heart rate sensor
@@ -236,17 +240,47 @@ def icon_maker(self, n, icon_x, icon_y):
236
240
"""
237
241
Generates icons as sprites
238
242
"""
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 )
241
246
return sprite
242
247
248
+
243
249
def _label_maker (self , text , x , y ):
244
250
"""
245
251
Generates labels
246
252
"""
247
253
return label .Label (font = self .arial24 , x = x , y = y , text = text , color = self .WHITE )
248
254
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 ()
250
284
sprites = displayio .Group ()
251
285
252
286
rect = Rect (0 , 0 , 240 , 50 , fill = self .PURPLE )
@@ -256,60 +290,61 @@ def _setup_display(self):
256
290
self .splash .append (heading )
257
291
258
292
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 )
260
294
sprites .append (heart_sprite )
261
295
262
296
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 )
264
298
sprites .append (speed_sprite )
265
299
266
300
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 )
268
302
sprites .append (cadence_sprite )
269
303
270
304
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 )
272
306
sprites .append (ams_sprite )
273
307
274
308
self .splash .append (sprites )
275
309
276
310
277
311
def update_display (self , hr_service ):
312
+ """
313
+ Updates the display to display the most recent values
314
+ """
278
315
heart = self .read_heart (hr_service )
279
316
speed , cadence = self .read_s_and_c ()
280
317
281
- if len (self .splash ) == 0 :
282
- self ._setup_display ()
283
-
284
318
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 :
289
321
self .splash [3 ] = hr_label
322
+ else :
323
+ self .splash .append (hr_label )
290
324
291
325
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 :
296
328
self .splash [4 ] = sp_label
329
+ else :
330
+ self .splash .append (sp_label )
331
+
297
332
298
333
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 :
303
336
self .splash [5 ] = cad_label
337
+ else :
338
+ self .splash .append (cad_label )
304
339
305
340
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 :
310
343
self .splash [6 ] = ams_label
344
+ else :
345
+ self .splash .append (ams_label )
346
+
311
347
312
348
self .setup = True
313
- #time.sleep(0.2)
314
349
315
350
self .display .show (self .splash )
0 commit comments