code.py
1 # SPDX-FileCopyrightText: 2020 FoamyGuy for Adafruit Industries 2 # 3 # SPDX-License-Identifier: MIT 4 5 """ 6 This example script shows how to sweep servo(s) without using 7 time.sleep(). 8 """ 9 10 import time 11 import board 12 import pwmio 13 from adafruit_motor import servo 14 15 SERVO_LIST = [ 16 { 17 "MAX_ANGLE": 180, 18 "MIN_ANGLE": 0, 19 "PREV_TIME": -1, 20 "PIN": board.A1, 21 "DELAY_BETWEEN": 0.05, 22 "SERVO": None, 23 "MOVE_BY": 5 24 } 25 ] 26 27 for cur_servo in SERVO_LIST: 28 pwm = pwmio.PWMOut(cur_servo["PIN"], duty_cycle=2 ** 15, frequency=50) 29 # Create a servo object. 30 cur_servo["SERVO"] = servo.Servo(pwm) 31 32 33 while True: 34 # Store the current time to refer to later. 35 now = time.monotonic() 36 for servo in SERVO_LIST: 37 if now >= servo["PREV_TIME"] + servo["DELAY_BETWEEN"]: 38 try: 39 servo["SERVO"].angle += servo["MOVE_BY"] 40 except ValueError as e: 41 42 if servo["MOVE_BY"] > 0: 43 servo["SERVO"].angle = servo["MAX_ANGLE"] 44 else: 45 servo["SERVO"].angle = servo["MIN_ANGLE"] 46 47 if servo["SERVO"].angle >= servo["MAX_ANGLE"] or \ 48 servo["SERVO"].angle <= servo["MIN_ANGLE"]: 49 50 servo["MOVE_BY"] = -servo["MOVE_BY"] 51 52 servo["PREV_TIME"] = now