Commit 4b97ed189cce0cda04b76126388f22ae4f2aa255
1 parent
a2336b82
Exists in
master
Added interactive serial port selection for multiple likely candidates, automati…
…c connection for a single likely candidate, and error handling for none
Showing
1 changed file
with
49 additions
and
10 deletions
Show diff stats
robots/little_john/telemetry/code/monitor/graph_plotter_rewrite.py
| 1 | -#!/usr/bin/env python | |
| 1 | +#!/usr/bin/env python2 | |
| 2 | 2 | |
| 3 | 3 | # Tool to draw live graphs of data coming in from serial port |
| 4 | 4 | # Written as a telemetry tool by: |
| ... | ... | @@ -11,17 +11,56 @@ import pyglet |
| 11 | 11 | #import time |
| 12 | 12 | import serial |
| 13 | 13 | import numpy |
| 14 | +import os | |
| 14 | 15 | |
| 15 | 16 | from colours import * |
| 16 | 17 | |
| 17 | -datafeed = serial.Serial( | |
| 18 | -port='/dev/ttyUSB0', | |
| 19 | -baudrate = 9600, | |
| 20 | -parity=serial.PARITY_NONE, | |
| 21 | -stopbits=serial.STOPBITS_ONE, | |
| 22 | -bytesize=serial.EIGHTBITS, | |
| 23 | -timeout=1 | |
| 24 | -) | |
| 18 | +devpatterns = ['ttyACM', 'ttyUSB', 'rfcomm'] | |
| 19 | + | |
| 20 | +alldevs = os.listdir("/dev/") | |
| 21 | +targetdevs = [] | |
| 22 | +for dev in alldevs: | |
| 23 | + for pattern in devpatterns: | |
| 24 | + if pattern in dev: | |
| 25 | + targetdevs.append(dev) | |
| 26 | + | |
| 27 | + | |
| 28 | +if len(targetdevs) == 0: | |
| 29 | + print("Sorry, no serial devices found.") | |
| 30 | + print("Exiting...") | |
| 31 | +elif len(targetdevs) > 1: | |
| 32 | + print("Found multiple serial devices: ") | |
| 33 | + for i, dev in enumerate(targetdevs): | |
| 34 | + print(" " + str(i) + ": /dev/" + dev) | |
| 35 | + while True: | |
| 36 | + try: | |
| 37 | + selection = int(input("Please enter your selection (as a digit):\n > ")) | |
| 38 | + if selection >= 0 and selection < len(targetdevs): | |
| 39 | + break | |
| 40 | + except: | |
| 41 | + print("Choice unrecognised: please try again:") | |
| 42 | +else: | |
| 43 | + print("Only found one likely serial device: /dev/" + dev) | |
| 44 | + selection = 0 | |
| 45 | + | |
| 46 | +serialport = "/dev/" + targetdevs[selection] | |
| 47 | + | |
| 48 | +try: | |
| 49 | + datafeed = serial.Serial( | |
| 50 | + port=serialport, | |
| 51 | + baudrate = 9600, | |
| 52 | + parity=serial.PARITY_NONE, | |
| 53 | + stopbits=serial.STOPBITS_ONE, | |
| 54 | + bytesize=serial.EIGHTBITS, | |
| 55 | + timeout=1 | |
| 56 | + ) | |
| 57 | + | |
| 58 | + print("Sucessfully opened " + serialport + " as data source!") | |
| 59 | +except Exception, e: | |
| 60 | + print("Failed to access " + serialport + " because:") | |
| 61 | + print(e) | |
| 62 | + print("Exiting...") | |
| 63 | + exit() | |
| 25 | 64 | |
| 26 | 65 | class Series: |
| 27 | 66 | def __init__(self, points=100, title="Series title", xname="x-axis name", yname="y-axis name"): |
| ... | ... | @@ -154,4 +193,4 @@ def pollSerial(elapsed): |
| 154 | 193 | # Pyglet looks after the main event loop, but this ensures that data keeps being read in |
| 155 | 194 | pyglet.clock.schedule_interval(pollSerial, 0.1) |
| 156 | 195 | |
| 157 | -pyglet.app.run() | |
| 158 | 196 | \ No newline at end of file |
| 197 | +pyglet.app.run() | ... | ... |