mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-11-14 20:36:03 +01:00
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
import serial
|
|
import os.path
|
|
import argparse
|
|
from time import sleep
|
|
|
|
pyserial_version = None
|
|
try:
|
|
pyserial_version = int(serial.VERSION[0])
|
|
except:
|
|
pyserial_version = 2 # less than 2.3
|
|
|
|
parser = argparse.ArgumentParser(description='Reset an Arduino')
|
|
parser.add_argument('--caterina', action='store_true', help='Reset a Leonardo, Micro, Robot or LilyPadUSB.')
|
|
parser.add_argument('--verbose', action='store_true', help="Watch what's going on on STDERR.")
|
|
parser.add_argument('--period', default=0.1, help='Specify the DTR pulse width in seconds.')
|
|
parser.add_argument('port', nargs=1, help='Serial device e.g. /dev/ttyACM0')
|
|
args = parser.parse_args()
|
|
|
|
if args.caterina:
|
|
if args.verbose: print('Forcing reset using 1200bps open/close on port %s' % args.port[0])
|
|
ser = serial.Serial(args.port[0], 57600)
|
|
ser.close()
|
|
|
|
if pyserial_version < 3:
|
|
ser.setBaudrate (1200)
|
|
else:
|
|
ser.baudrate = 1200
|
|
|
|
ser.open()
|
|
ser.setRTS(True) # RTS line needs to be held high and DTR low
|
|
ser.setDTR(False) # (see Arduino IDE source code)
|
|
ser.close()
|
|
sleep(1)
|
|
|
|
while not os.path.exists(args.port[0]):
|
|
if args.verbose: print('Waiting for %s to come back' % args.port[0])
|
|
sleep(1)
|
|
|
|
if args.verbose: print('%s has come back after reset' % args.port[0])
|
|
else:
|
|
if args.verbose: print('Setting DTR high on %s for %ss' % (args.port[0],args.period))
|
|
ser = serial.Serial(args.port[0], 115200)
|
|
ser.setDTR(False)
|
|
sleep(args.period)
|
|
ser.setDTR(True)
|
|
ser.close()
|