Pico servo code
This commit is contained in:
parent
f5d30d28f4
commit
ea6486060d
1 changed files with 86 additions and 0 deletions
86
Pico_RP2040_Servo/pico-servo.py
Normal file
86
Pico_RP2040_Servo/pico-servo.py
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
# SPDX-FileCopyrightText: 2021 jedgarpark for Adafruit Industries
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
# Pico servo demo
|
||||
# Hardware setup:
|
||||
# Servo on GP0 with external 5V power supply
|
||||
# Button on GP3 and ground
|
||||
|
||||
import time
|
||||
import board
|
||||
from digitalio import DigitalInOut, Direction, Pull
|
||||
import pwmio
|
||||
from adafruit_motor import servo
|
||||
|
||||
print("Servo test")
|
||||
|
||||
led = DigitalInOut(board.LED)
|
||||
led.direction = Direction.OUTPUT
|
||||
led.value = True
|
||||
|
||||
|
||||
def blink(times):
|
||||
for _ in range(times):
|
||||
led.value = False
|
||||
time.sleep(0.1)
|
||||
led.value = True
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
# Mode button setup
|
||||
button = DigitalInOut(board.GP3)
|
||||
button.direction = Direction.INPUT
|
||||
button.pull = Pull.UP
|
||||
mode = -1 # track state of button mode
|
||||
|
||||
# Servo setup
|
||||
pwm_servo = pwmio.PWMOut(board.GP0, duty_cycle=2 ** 15, frequency=50)
|
||||
servo1 = servo.Servo(
|
||||
pwm_servo, min_pulse=500, max_pulse=2200
|
||||
) # tune pulse for specific servo
|
||||
|
||||
|
||||
# Servo test
|
||||
def servo_direct_test():
|
||||
print("servo test: 90")
|
||||
servo1.angle = 90
|
||||
time.sleep(2)
|
||||
print("servo test: 0")
|
||||
servo1.angle = 0
|
||||
time.sleep(2)
|
||||
print("servo test: 90")
|
||||
servo1.angle = 90
|
||||
time.sleep(2)
|
||||
print("servo test: 180")
|
||||
servo1.angle = 180
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
# Servo smooth test
|
||||
def servo_smooth_test():
|
||||
print("servo smooth test: 180 - 0, -1º steps")
|
||||
for angle in range(180, 0, -1): # 180 - 0 degrees, -1º at a time.
|
||||
servo1.angle = angle
|
||||
time.sleep(0.01)
|
||||
time.sleep(1)
|
||||
print("servo smooth test: 0 - 180, 1º steps")
|
||||
for angle in range(0, 180, 1): # 0 - 180 degrees, 1º at a time.
|
||||
servo1.angle = angle
|
||||
time.sleep(0.01)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def run_test(testnum):
|
||||
if testnum is 0:
|
||||
servo_direct_test()
|
||||
elif testnum is 1:
|
||||
servo_smooth_test()
|
||||
|
||||
|
||||
while True:
|
||||
if not button.value:
|
||||
blink(2)
|
||||
mode = (mode + 1) % 2
|
||||
print("switch to mode %d" % (mode))
|
||||
time.sleep(0.8) # big debounce
|
||||
run_test(mode)
|
||||
Loading…
Reference in a new issue