from machine import Pin, I2C
import ssd1306
from machine import Pin,PWM
import math
import time
from machine
import Pin
import math
class servo:
def __init__(self,pin,freq=50):
'函数的初始化'
'参数:引脚,频率'
self.pwm=PWM(pin,freq=freq,duty=0)
self.freq=50'pwm引脚的频率,50hz正好对应20ms'
self.Min_fx=0'设定最小的转动角度'
self.Max_fx=180'设定最大的转动角度'
def servo_writefx(self,degrees=None,radians=None,sleep=0):
'方法函数,使得舵机转过指定角度,需要用关键字的指定来设定参数。'
'参数:角度,弧度(二者任选一),舵机sleep的时间(单位为ms)'
if degrees==None:
degrees=math.degrees(radians)
if degrees>self.Max_fx or degrees<self.Min_fx:
return
Duty=int((degrees/90+0.5)/20*1023)
self.pwm.duty(Duty)
time.sleep_ms(sleep)
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, Wokwi!', 10, 10)
oled.show()
p_1=Pin(21,Pin.ouT)
my_servo=servo(p_1)
while True:
my_servo.servo_writefx(degrees=0,sleep=1000)
my_servo.servo_writefx(degrees=45,sleep=1000)
my_servo.servo_writefx(degrees=90,sleep=1000)
my_servo.servo_writefx(degrees=135,sleep=1000)
my servo.servo_writefx(degrees=180,sleep=1000)