43 lines
1.3 KiB
Python
Executable File
43 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import os, logging
|
|
from argparse import ArgumentParser
|
|
from mg996r import MG996R
|
|
|
|
start_degree = 360
|
|
state_file = '.servo-state'
|
|
|
|
if __name__ == '__main__':
|
|
# set logging level
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
# parse arguments
|
|
parser = ArgumentParser()
|
|
parser.add_argument('--deg', type=int, required=True)
|
|
parser.add_argument('--pin', type=str, default='PA6',
|
|
help='GPIO pin to use')
|
|
parser.add_argument('--reset', action='store_true',
|
|
help=f'Use clean default state (degree = {start_degree})')
|
|
args = parser.parse_args()
|
|
|
|
# restore previous degree from a file
|
|
if not args.reset:
|
|
try:
|
|
if os.path.exists(state_file):
|
|
with open(state_file, 'r') as f:
|
|
start_degree = int(f.read())
|
|
if not 0 <= start_degree <= 360:
|
|
raise ValueError(f'invalid degree value in {state_file}')
|
|
except (IOError, ValueError) as e:
|
|
logging.exception(e)
|
|
start_degree = default_degree
|
|
|
|
servo = MG996R(args.pin, start_degree)
|
|
servo.move(args.deg)
|
|
|
|
# save degree to a file
|
|
try:
|
|
with open(state_file, 'w') as f:
|
|
f.write(str(args.deg))
|
|
except IOError as e:
|
|
logging.exception(e)
|