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