from machine import Pin, ADC, PWM, I2C
import utime
from ssd1306 import SSD1306_I2C
# Configuración de PWM para el servomotor continuo
servo = PWM(Pin(0))
servo.freq(50)
# Configuración del potenciómetro
adc = ADC(0)
# Configuración de la pantalla OLED SSD1306 (I2C)
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
oled = SSD1306_I2C(128, 64, i2c)
while True:
# Leer el valor del potenciómetro (0 a 65535)
pot = adc.read_u16()
# Convertir a duty_ns para rango 1ms a 2ms (1000000 a 2000000 ns)
# 1.5 ms (1500000 ns) es el centro (servo detenido)
duty_ns = int(1000000 + (pot * 1000000 / 65535))
servo.duty_ns(duty_ns)
# Determinar dirección del giro (solo para mostrar)
if duty_ns > 1510000:
estado = "Derecha"
elif duty_ns < 1490000:
estado = "Izquierda"
else:
estado = "Detenido"
# Mostrar en OLED
oled.fill(0)
oled.text("Servo 360 grados", 0, 0)
oled.text("PWM: " + str(int(duty_ns/1000)) + " us", 0, 20)
oled.text("Estado: " + estado, 0, 40)
oled.show()
print("PWM:", duty_ns, "ns", "Estado:", estado)
utime.sleep_ms(200)