from machine import Pin, ADC, I2C, PWM
from ssd1306 import SSD1306_I2C
import utime, framebuf
def interval_mapping(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def servo_write(pin,angle):
pulse_width=interval_mapping(angle, 0, 180, 0.5,2.5)
duty=int(interval_mapping(pulse_width, 0, 20, 0,65535))
pin.duty_u16(duty)
led1 = Pin(15, Pin.OUT)
led2 = Pin(14, Pin.OUT)
led3 = Pin(11, Pin.OUT)
led4 = Pin(10, Pin.OUT)
i2c = I2C(0, scl = Pin(17), sda = Pin(16), freq = 400000)
oled = SSD1306_I2C(128,64,i2c)
pm = ADC(Pin(28))
servo = PWM(Pin(0))
servo.freq(50)
while True:
r = pm.read_u16()
r2 = int(r * 180 / 65535)
servo_write(servo,r2)
oled.fill(0)
oled.text("potentiometer: ", 0,0)
oled.text(str(r), 0,16)
oled.text("servo angle: " ,0,32)
oled.text(str(r2), 0,48)
oled.show()
if r <= 13000 and r >=0:
led4.value(0)
led3.value(0)
led2.value(0)
led1.value(0)
if r <= 26000 and r > 13000:
led4.value(0)
led3.value(0)
led2.value(0)
led1.value(1)
if r <= 39000 and r > 26000:
led4.value(0)
led3.value(0)
led2.value(1)
led1.value(1)
if r <= 52000 and r > 39000:
led4.value(0)
led3.value(1)
led2.value(1)
led1.value(1)
if r > 52000:
led4.value(1)
led3.value(1)
led2.value(1)
led1.value(1)