# Bibliotheken laden
from machine import Pin, PWM
import time
# GPIO für Steuersignal
servo_pin = 28
servo_pin2 = 27
# GPIO für Taster
btn_go = 3
# Wert für 0 Grad
valueMin = 0
# Wert für 180 Grad
valueMax = 180
# Position in Grad
value = 90
# Positionsänderung in Grad
step = 90
flipper_up = False
# Initialisierung der Taster
btn_go = Pin(btn_go, Pin.IN, Pin.PULL_UP)
btn_go_last = time.ticks_ms()
# Initialisierung PWM-Signal
servo = PWM(Pin(servo_pin))
servo2 = PWM(Pin(servo_pin2))
servo.freq(50)
servo2.freq(50)
# Taster-Auswertung UP
def push(pin):
print("Hello there!")
global value, valueMin, valueMax, step, btn_go, btn_go_last
if pin is btn_go and flipper_up:
# Taster entprellen
if time.ticks_diff(time.ticks_ms(), btn_go_last) > 200:
value = value + step
# Begrenzung des Wertebereichs
if value < valueMin: value = valueMin
if value > valueMax: value = valueMax
servo_control(value)
btn_go_last = time.ticks_ms()
elif pin is btn_go and not flipper_up:
# Taster entprellen
if time.ticks_diff(time.ticks_ms(), btn_go_last) > 200:
value = value - step
# Begrenzung des Wertebereichs
if value < valueMin: value = valueMin
if value > valueMax: value = valueMax
servo_control(value)
btn_go_last = time.ticks_ms()
# Funktion: Servo steuern
def servo_control(value, minDuty=1638, maxDuty=8192):
# Tastverhältnis berechnen
newDuty = int(maxDuty - (value - valueMin) * (maxDuty - minDuty) / (valueMax - valueMin) )
# Datenausgabe
print('Grad:', value)
print('Duty:', newDuty)
print()
# PWM-Signal ändern
servo.duty_u16(newDuty)
# Hauptprogramm
print('STRG + C zum Benden')
print()
try:
# Grundposition
servo_control(value)
# Interrupt für Taster
btn_go.irq(trigger=Pin.IRQ_FALLING, handler=push)
# Wiederholung (damit das Programm weiterläuft)
while True:
time.sleep(1)
except (KeyboardInterrupt):
pass
finally:
servo.deinit()
servo2.deinit()
print('Beendet')