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)