from machine import Pin, ADC, I2C
from time import sleep
from ssd1306 import SSD1306_I2C
from servo import Servo # Asegúrate de que servo.py esté en tu ESP32
# === Configuración de hardware ===
# Potenciómetro en GPIO32 (ADC1_CH4)
pot = ADC(Pin(32))
pot.atten(ADC.ATTN_11DB) # Rango de 0-3.3V
pot.width(ADC.WIDTH_10BIT) # Resolución de 10 bits (0-1023)
# Servo motor en GPIO13
servo = Servo(Pin(13)) # Usando clase Servo personalizada
# Pantalla OLED por I2C: SDA=GPIO21, SCL=GPIO22
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
# === Función para mapear valores ===
def map_range(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# === Bucle principal ===
while True:
adc_value = pot.read() # Leer valor del potenciómetro (0-1023)
angle = map_range(adc_value, 0, 1023, 0, 180) # Mapear a ángulo 0°-180°
servo.write_angle(angle) # Mover servo al ángulo
# Mostrar el ángulo en la pantalla OLED
oled.fill(0)
oled.text("Angulo actual:", 0, 10)
oled.text("{} grados".format(angle), 0, 30)
oled.show()
sleep(0.1)