aboutsummaryrefslogtreecommitdiff
path: root/example.py
diff options
context:
space:
mode:
Diffstat (limited to 'example.py')
-rwxr-xr-xexample.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/example.py b/example.py
new file mode 100755
index 0000000..3ebfc6c
--- /dev/null
+++ b/example.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+import os, logging
+from argparse import ArgumentParser
+from mg996r import MG996R
+
+default_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 = {default_degree})')
+ args = parser.parse_args()
+
+ start_degree = default_degree
+
+ # 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)