from machine import ADC, Pin, I2C
import ssd1306
import time
# ---- CONSTANTES (divisor simulado) ----
R1 = 100000
R2 = 27000
VREF = 3.3
# ---- OLED ----
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# ---- ADC ----
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)
# ---- FILTRO EMA ----
class FiltroEMA:
def __init__(self, alpha=0.15):
self.alpha = alpha
self.valor = None
def filtrar(self, x):
if self.valor is None:
self.valor = x
else:
self.valor = self.alpha * x + (1 - self.alpha) * self.valor
return self.valor
filtro = FiltroEMA()
# ---- LOOP ----
while True:
raw = adc.read()
vadc = (raw / 4095) * VREF
vin = vadc * (R1 + R2) / R2
vin_f = filtro.filtrar(vin)
oled.fill(0)
oled.text("BATERIA", 34, 0)
oled.text("RAW: {}".format(raw), 0, 22)
oled.text("V: {:.2f} V".format(vin_f), 0, 42)
oled.show()
time.sleep(0.3)