Skip to content

Commit 4723f33

Browse files
committed
satisfy linter, cleanup and small bugs
changed the "from pybricks.pupdevices import *" to the full list. put port list creation in GetPorts(). cleaned up ConnectToDevice() and collapsed similar code. fixed some remaining linter errors. fixed small bugs regarding DIAGNOSTICS_PERIOD and DCMotor. added IMU to the diagnostics.
1 parent 3086cf0 commit 4723f33

File tree

1 file changed

+63
-69
lines changed

1 file changed

+63
-69
lines changed

examples/pup/iodevices_pupdevice/diagnostics.py

Lines changed: 63 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from pybricks.geometry import Axis
22
from pybricks.iodevices import PUPDevice
3-
from pybricks.pupdevices import *
4-
from pybricks.parameters import Port, Button, Color # if needed: Side
3+
from pybricks.pupdevices import DCMotor, Motor, Light, ColorLightMatrix, Remote, TiltSensor, InfraredSensor, ColorDistanceSensor, ColorSensor, UltrasonicSensor, ForceSensor
4+
from pybricks.parameters import Port, Button, Color, Direction # if needed: Side
55
from pybricks.tools import wait, StopWatch
66
from uerrno import ENODEV, ETIMEDOUT
7+
from micropython import const
78

89
# 1: Determine the type of hub
910
# -------------------------------------------------------------------
@@ -73,12 +74,11 @@ def HubInit(mounted_top=Axis.Z, mounted_front=Axis.X):
7374

7475
return (hub, hub_info)
7576

77+
7678
# 2: Diagnose connected devices
7779
# -------------------------------------------------------------------
7880
# Dictionary of device identifiers along with their name.
7981
# Also check https://github.com/pybricks/technical-info/blob/master/assigned-numbers.md#io-device-type-ids
80-
81-
8282
device_names = {
8383
# pybricks.pupdevices.DCMotor
8484
1: "Wedo 2.0 Medium Motor",
@@ -111,6 +111,21 @@ def HubInit(mounted_top=Axis.Z, mounted_front=Axis.X):
111111
}
112112

113113

114+
def GetPorts():
115+
ports = [Port.A, Port.B]
116+
try: # to add more ports, on hubs that support it.
117+
ports.append(Port.C)
118+
ports.append(Port.D)
119+
except AttributeError:
120+
pass
121+
try: # to add more ports, on hubs that support it.
122+
ports.append(Port.E)
123+
ports.append(Port.F)
124+
except AttributeError:
125+
pass
126+
return ports
127+
128+
114129
def ConnectToDevice(port):
115130
# Returns a device dict()
116131
device = {'type': None, 'id': None, 'name': None, 'object': None}
@@ -121,106 +136,77 @@ def ConnectToDevice(port):
121136
if ex.args[0] == ENODEV:
122137
# No device found on this port.
123138
return device
124-
else:
125-
raise
139+
raise
140+
126141
# Get the device id
127142
temp_info = pupdev.info()
128143
device['id'] = temp_info["id"]
129144
try: # to look up the name.
130145
device['name'] = device_names[device['id']]
131146
except KeyError:
132147
device['name'] = "Unknown"
133-
# print(port, ":", "Unknown device with ID", xid)
134148
if len(temp_info) > 1:
135149
print(temp_info)
136150

137151
# Initiate object and type
138152
xid = device['id']
139-
if xid in (1, 2):
140-
try:
153+
device['type'] = "" # Make it work with += "/Custom" in except
154+
try:
155+
if xid in (1, 2):
156+
dev_class = "DCMotor"
141157
device['object'] = DCMotor(port)
142158
device['type'] = "DCMotor"
143-
except OSError as err:
144-
print("DCMotor could not be initiated: ", err)
145-
device['type'] = "Custom"
146-
pass
147-
elif xid in (38, 46, 47, 48, 49, 65, 75, 76):
148-
try:
159+
elif xid in (38, 46, 47, 48, 49, 65, 75, 76):
160+
dev_class = "Motor"
149161
device['object'] = Motor(port, positive_direction=Direction.CLOCKWISE, gears=None)
150162
device['type'] = "Motor"
151-
except OSError as err:
152-
print("Motor could not be initiated: ", err)
153-
device['type'] = "Custom"
154-
pass
155-
elif xid == 8:
156-
try:
163+
elif xid == 8:
164+
dev_class = "Light"
157165
device['object'] = Light(port)
158166
device['object'].on(brightness=50)
159167
device['type'] = "Light"
160-
except OSError as err:
161-
print("Light could not be initiated: ", err)
162-
device['type'] = "Custom"
163-
pass
164-
elif xid == 64:
165-
try:
168+
elif xid == 64:
169+
dev_class = "ColorLightMatrix"
166170
device['object'] = ColorLightMatrix(port)
167171
device['object'].on([Color.RED, Color.GREEN, Color.BLUE])
168172
device['type'] = "Matrix3x3"
169-
except OSError as err:
170-
print("Matrix could not be initiated: ", err)
171-
device['type'] = "Custom"
172-
pass
173-
elif xid in (34, 35, 37, 61, 62, 63):
174-
device['type'] = "Sensor"
175-
sensor_class = None
176-
try:
173+
elif xid in (34, 35, 37, 61, 62, 63):
174+
device['type'] = "Sensor"
177175
if xid == 34:
178-
sensor_class = "TiltSensor"
176+
dev_class = "TiltSensor"
179177
device['object'] = TiltSensor(port)
180178
device['type'] += "/Tilt"
181179
elif xid == 35:
182-
sensor_class = "InfraredSensor"
180+
dev_class = "InfraredSensor"
183181
device['object'] = InfraredSensor(port)
184182
device['type'] += "/IR/Distance"
185183
elif xid == 37:
186-
sensor_class = "ColorDistanceSensor"
184+
dev_class = "ColorDistanceSensor"
187185
device['object'] = ColorDistanceSensor(port)
188186
device['type'] += "/Distance/Color/Light"
189187
elif xid == 61:
190-
sensor_class = "ColorSensor"
188+
dev_class = "ColorSensor"
191189
device['object'] = ColorSensor(port)
192190
device['type'] += "/Color/Light"
193191
elif xid == 62:
194-
sensor_class = "UltrasonicSensor"
192+
dev_class = "UltrasonicSensor"
195193
device['object'] = UltrasonicSensor(port)
196194
device['type'] += "/Distance/Light"
197195
elif xid == 63:
198-
sensor_class = "ForceSensor"
196+
dev_class = "ForceSensor"
199197
device['object'] = ForceSensor(port)
200198
device['type'] += "/Force/Distance/Press"
201-
except OSError as err:
202-
print("class", sensor_class, "could not be initiated: ", err)
203-
device['type'] += "/Custom"
204-
pass
205-
else:
206-
print("Not able to translate id:", xid, "to a class!")
199+
else:
200+
print("Not able to translate id:", xid, "to a class!")
201+
except OSError as err:
202+
print("class", dev_class, "could not be initiated: ", err)
203+
device['type'] += "/Custom"
207204
pass
205+
208206
return device
209207
# end of ConnectToDevice(port)
210208
# -------------------------------------------------------------------
211209

212-
# Make a list of known ports.
213-
ports = [Port.A, Port.B]
214-
try: # to add more ports, on hubs that support it.
215-
ports.append(Port.C)
216-
ports.append(Port.D)
217-
except AttributeError:
218-
pass
219-
try: # to add more ports, on hubs that support it.
220-
ports.append(Port.E)
221-
ports.append(Port.F)
222-
except AttributeError:
223-
pass
224210

225211
# 3: Remote buttons check and remote init
226212
# -------------------------------------------------------------------
@@ -231,13 +217,14 @@ def ConnectToDevice(port):
231217
def ConnectRemote():
232218
global remote
233219
try:
234-
remote = Remote(name=None,timeout=10000)
220+
remote = Remote(name=None, timeout=10000)
235221
print("Remote: " + remote.name())
236222
# remote.name("Remote of <user>")
237223
except OSError as ex:
238224
if ex.errno == ETIMEDOUT:
239225
print("No Remote found.")
240226

227+
241228
def ServiceRemote():
242229
global remote
243230

@@ -251,7 +238,7 @@ def ServiceRemote():
251238
print("Lost remote")
252239
remote = None # empty handle
253240
return (ch1_val, ch2_val)
254-
if len(pressed) is 0:
241+
if len(pressed) == 0:
255242
return (ch1_val, ch2_val)
256243
# print(pressed)
257244

@@ -284,10 +271,11 @@ def ServiceRemote():
284271
return (ch1_val_new, ch2_val_new)
285272

286273

287-
# 4: Main / Monitor changes
274+
# 4: Main loop: Monitor changes
288275
# -------------------------------------------------------------------
289-
DIAGNOSTICS_PERIOD = 5000 # 5s
276+
DIAGNOSTICS_PERIOD = const(2000) # 5s
290277
sys_tick = StopWatch()
278+
last_diag = sys_tick.time()
291279
(hub, hub_info) = HubInit()
292280
print(hub_info)
293281
pressed = ()
@@ -297,8 +285,10 @@ def ServiceRemote():
297285
distance = None
298286
color = None
299287
force = None
288+
imu_tilt = None
300289

301290
# Search through all available ports.
291+
ports = GetPorts()
302292
devices = []
303293
for port in ports:
304294
dev = ConnectToDevice(port)
@@ -320,12 +310,16 @@ def ServiceRemote():
320310
pressed = hub.button.pressed()
321311
except AttributeError:
322312
pass
323-
324-
if sys_tick.time() % DIAGNOSTICS_PERIOD:
313+
if len(pressed) != 0:
314+
print("Hub button(s) pressed:", pressed)
315+
if (sys_tick.time()-last_diag) > DIAGNOSTICS_PERIOD:
316+
last_diag = sys_tick.time()
325317
print("Hub voltage: ", hub.battery.voltage(), "mV")
326318
print("Hub current: ", hub.battery.current(), "mA")
319+
if hub_info['has_imu'] == True:
320+
imu_tilt = hub.imu.tilt()
327321
for device in devices:
328-
if "DCMotor" or "Motor" in device['type']:
322+
if "Motor" in device['type']: # also catches DCMotor
329323
device['object'].dc(ch1_val)
330324
if "Tilt" in device['type']:
331325
tilt = device['object'].tilt()
@@ -335,10 +329,10 @@ def ServiceRemote():
335329
color = device['object'].color()
336330
if "Force" in device['type']:
337331
force = device['object'].force()
338-
print("T:", tilt, "D:", distance, "C:", color, "F:", force)
339-
332+
print("D:", distance, "C:", color, "F:", force, "T:", tilt, "IMU.T:", imu_tilt)
333+
340334
# do not set values blindly to not interfere with other code:
341-
(ch1_val_new,ch2_val_new) = ServiceRemote()
335+
(ch1_val_new, ch2_val_new) = ServiceRemote()
342336
if ch1_val_new is not ch1_val:
343337
ch1_val = ch1_val_new
344338
print("Channel 1 changed:", ch1_val)

0 commit comments

Comments
 (0)