aboutsummaryrefslogtreecommitdiff
#!/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)

    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)