@@ -84,45 +84,15 @@ class Pyloton:
8484 """
8585 Contains the various functions necessary for doing the Pyloton learn guide.
8686 """
87- # pylint: disable=too-many-instance-attributes
88- _previous_wheel = 0
89- _previous_crank = 0
90- _previous_revolutions = 0
91- _previous_rev = 0
92- _previous_speed = 0
93- _previous_cadence = 0
94- _previous_heart = 0
95- _i = 0
96- _j = 0
97- _setup = 0
98- _hr_label = None
99- _sp_label = None
100- _cad_label = None
101- _ams_label = None
102- _hr_service = None
103- _heart_y = None
104- _speed_y = None
105- _cad_y = None
106- _ams_y = None
107-
108- ams = None
109- cyc_connections = None
110- cyc_services = None
111-
112- splash = displayio .Group (max_size = 25 )
113- loading_group = displayio .Group ()
87+ #pylint: disable=too-many-instance-attributes
11488
11589 YELLOW = 0xFCFF00
11690 PURPLE = 0x64337E
11791 WHITE = 0xFFFFFF
11892
119- start = time .time ()
120-
121- track_artist = True
122-
12393 clue = Clue ()
12494
125- def __init__ (self , ble , display , circ , heart = True , speed = True , cad = True , ams = True , debug = False ):
95+ def __init__ (self , ble , display , circ , heart = True , speed = True , cad = True , ams = True , debug = False ): #pylint: disable=too-many-arguments
12696 self .debug = debug
12797
12898 self .ble = ble
@@ -139,6 +109,37 @@ def __init__(self, ble, display, circ, heart=True, speed=True, cad=True, ams=Tru
139109 self .hr_connection = None
140110
141111 self .num_enabled = heart + speed + cad + ams
112+
113+ self ._previous_wheel = 0
114+ self ._previous_crank = 0
115+ self ._previous_revolutions = 0
116+ self ._previous_rev = 0
117+ self ._previous_speed = 0
118+ self ._previous_cadence = 0
119+ self ._previous_heart = 0
120+ self ._speed_failed = 0
121+ self ._cad_failed = 0
122+ self ._setup = 0
123+ self ._hr_label = None
124+ self ._sp_label = None
125+ self ._cad_label = None
126+ self ._ams_label = None
127+ self ._hr_service = None
128+ self ._heart_y = None
129+ self ._speed_y = None
130+ self ._cad_y = None
131+ self ._ams_y = None
132+
133+ self .ams = None
134+ self .cyc_connections = None
135+ self .cyc_services = None
136+
137+ self .start = time .time ()
138+ self .track_artist = True
139+
140+ self .splash = displayio .Group (max_size = 25 )
141+ self .loading_group = displayio .Group ()
142+
142143 self ._load_fonts ()
143144
144145 self .sprite_sheet , self .palette = adafruit_imageload .load ("/sprite_sheet.bmp" ,
@@ -191,28 +192,29 @@ def _status_update(self, message):
191192 print (message )
192193 return
193194
194- text_group = displayio . Group ()
195- if len ( message ) > 25 :
195+ if len ( self . loading_group ) == 3 :
196+ text_group = displayio . Group ()
196197 status = label .Label (font = self .arial12 , x = 10 , y = 200 ,
197- text = message [: 25 ] , color = self .YELLOW )
198+ text = '' , color = self .YELLOW , max_glyphs = 30 )
198199 status1 = label .Label (font = self .arial12 , x = 10 , y = 220 ,
199- text = message [ 25 :] , color = self .YELLOW )
200+ text = '' , color = self .YELLOW , max_glyphs = 30 )
200201
201202 text_group .append (status )
202203 text_group .append (status1 )
203- else :
204- status = label .Label (font = self .arial12 , x = 10 , y = 200 , text = message , color = self .YELLOW )
205- text_group .append (status )
206-
204+ self .loading_group .append (text_group )
207205
206+ if len (message ) > 25 :
207+ status .text = message [:25 ]
208+ status1 .text = message [25 :]
208209
209- if len ( self . loading_group ) < 4 :
210- self . loading_group . append (text_group )
210+ text_group . append ( status )
211+ text_group . append (status1 )
211212 else :
212- self .loading_group [3 ] = text_group
213+ status .text = message
214+ status1 .text = ''
215+ text_group .append (status )
213216
214- self .display .show (self .loading_group )
215- time .sleep (0.01 )
217+ #self.display.show(self.loading_group)
216218
217219
218220 def timeout (self ):
@@ -239,7 +241,13 @@ def heart_connect(self):
239241 self ._hr_service = self .hr_connection [HeartRateService ]
240242 return self .hr_connection
241243
242- def ams_connect (self ):
244+ @staticmethod
245+ def _has_timed_out (start , timeout ):
246+ if time .time () - start >= timeout :
247+ return True
248+ return False
249+
250+ def ams_connect (self , start = time .time (), timeout = 30 ):
243251 """
244252 Connect to an Apple device using the ble_apple_media library
245253 """
@@ -249,7 +257,7 @@ def ams_connect(self):
249257 a .solicited_services .append (AppleMediaService )
250258 radio .start_advertising (a )
251259
252- while not radio .connected :
260+ while not radio .connected and not self . _has_timed_out ( start , timeout ) :
253261 pass
254262
255263 self ._status_update ("AppleMediaService: Connected" )
@@ -300,7 +308,7 @@ def speed_cad_connect(self):
300308 return self .cyc_connections
301309
302310
303- def _speed_helper (self , values ):
311+ def _compute_speed (self , values ):
304312 wheel_diff = values .last_wheel_event_time - self ._previous_wheel
305313 rev_diff = values .cumulative_wheel_revolutions - self ._previous_revolutions
306314
@@ -314,15 +322,15 @@ def _speed_helper(self, values):
314322 speed = self ._previous_speed
315323 self ._previous_speed = speed
316324 self ._previous_revolutions = values .cumulative_wheel_revolutions
317- self ._i = 0
325+ self ._speed_failed = 0
318326 else :
319- self ._i += 1
320- if self ._i >= 3 :
327+ self ._speed_failed += 1
328+ if self ._speed_failed >= 3 :
321329 speed = 0
322330 self ._previous_wheel = values .last_wheel_event_time
323331
324332
325- def _cad_helper (self , values ):
333+ def _compute_cadence (self , values ):
326334 crank_diff = values .last_crank_event_time - self ._previous_crank
327335 crank_rev_diff = values .cumulative_crank_revolutions - self ._previous_rev
328336
@@ -334,10 +342,10 @@ def _cad_helper(self, values):
334342 cadence = self ._previous_cadence
335343 self ._previous_cadence = cadence
336344 self ._previous_rev = values .cumulative_crank_revolutions
337- self ._j = 0
345+ self ._cad_failed = 0
338346 else :
339- self ._j += 1
340- if self ._j >= 3 :
347+ self ._cad_failed += 1
348+ if self ._cad_failed >= 3 :
341349 cadence = 0
342350 self ._previous_crank = values .last_crank_event_time
343351
@@ -356,23 +364,23 @@ def read_s_and_c(self):
356364 values = svc .measurement_values
357365
358366 if not values :
359- if self ._j >= 3 or self ._i >= 3 :
360- if self ._j > 3 :
367+ if self ._cad_failed >= 3 or self ._speed_failed >= 3 :
368+ if self ._cad_failed > 3 :
361369 cadence = 0
362- if self ._i > 3 :
370+ if self ._speed_failed > 3 :
363371 speed = 0
364372 continue
365373
366374 if not values .last_wheel_event_time :
367375 continue
368376
369- self ._speed_helper (values )
377+ self ._compute_speed (values )
370378
371379
372380 if not values .last_crank_event_time :
373381 continue
374382
375- self ._cad_helper (values )
383+ self ._compute_cadence (values )
376384
377385 return speed , cadence
378386
0 commit comments