import grovepi
import time
import math

RL_VALUE = 10000.0 # Resistencia de Carga (GrovePi)

def get_RS_resistance(analog_value):
    if analog_value == 0: return float('inf') 
    return RL_VALUE * ((1023.0 / analog_value) - 1.0)

# --- CONFIGURACIÓN DE CALIBRACIÓN ---
# DEBES CAMBIAR ESTOS DOS VALORES para cada sensor
CALIBRATION_PIN = 2      # 0 para MQ-7 (A0), 1 para MQ-4 (A1), 2 para MQ-135 (A2)
FACTOR_RS_R0_CLEAN = 3.6  # 27.0 para MQ-7, 4.4 para MQ-4, 3.6 para MQ-135
# ------------------------------------

NUM_READINGS = 20
print(f"--- INICIANDO CÁLCULO DE R0 en A{CALIBRATION_PIN} ---")

grovepi.pinMode(CALIBRATION_PIN, "INPUT")
sum_rs = 0

for i in range(NUM_READINGS):
    try:
        analog_val = grovepi.analogRead(CALIBRATION_PIN)
        rs = get_RS_resistance(analog_val)
        sum_rs += rs
        print(f"Lectura {i+1}/{NUM_READINGS}: RS = {rs:.2f} Ohmios")
        time.sleep(2)
    except:
        print("Error de lectura.")

rs_avg_clean = sum_rs / NUM_READINGS
R0_CALCULADO = rs_avg_clean / FACTOR_RS_R0_CLEAN

print("\n--- ¡R0 CALCULADO! ---")
print(f"VALOR R0 (FINAL): {R0_CALCULADO:.2f} Ohmios")
