54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
# SPDX-FileCopyrightText: 2018 Bill Earl and Mikey Sklar for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# Bionic Eye sketch for Adafruit Trinket.
|
|
#
|
|
# written by Bill Earl for Arduino
|
|
# ported to CircuitPython by Mikey Sklar
|
|
# for Adafruit Industries
|
|
#
|
|
# Required library is the Adafruit_SoftServo library
|
|
# available at https://github.com/adafruit/Adafruit_SoftServo
|
|
# The standard Arduino IDE servo library will not work with 8 bit
|
|
# AVR microcontrollers like Trinket and Gemma due to differences
|
|
# in available timer hardware and programming. We simply refresh
|
|
# by piggy-backing on the timer0 millis() counter
|
|
#
|
|
# Trinket: Bat+ Gnd Pin #0 Pin #2
|
|
# Connection: Servo+ Servo- Tilt Rotate
|
|
# (Red) (Black) Servo Servo
|
|
# (Orange)(Orange)
|
|
|
|
import time
|
|
import random
|
|
import board
|
|
import pwmio
|
|
from adafruit_motor import servo
|
|
|
|
# we are intentionally avoiding Trinket Pin #1 (board.A0)
|
|
# as it does not have PWM capability
|
|
tilt_servo_pin = board.A2 # servo control line (orange) Trinket Pin #0
|
|
rotate_servo_pin = board.A1 # servo control line (orange) Trinket Pin #2
|
|
|
|
# servo object setup for the M0 boards:
|
|
tilt_pwm = pwmio.PWMOut(tilt_servo_pin, duty_cycle=2 ** 15, frequency=50)
|
|
rotate_pwm = pwmio.PWMOut(rotate_servo_pin, duty_cycle=2 ** 15, frequency=50)
|
|
tilt_servo = servo.Servo(tilt_pwm)
|
|
rotate_servo = servo.Servo(rotate_pwm)
|
|
|
|
# servo timing and angle range
|
|
tilt_min = 120 # lower limit to tilt rotation range
|
|
max_rotate = 180 # rotation range limited to half circle
|
|
|
|
while True:
|
|
|
|
# servo tilt - on average move every 500ms
|
|
if random.randint(0,100) > 80:
|
|
tilt_servo.angle = random.randint(tilt_min, max_rotate)
|
|
time.sleep(.25)
|
|
|
|
# servo rotate - on average move every 500ms
|
|
if random.randint(0,100) > 90:
|
|
rotate_servo.angle = random.randint(0, max_rotate)
|
|
time.sleep(.25)
|