import machine  # Importa el módulo de la biblioteca de Machine para acceder a las funcionalidades del hardware
import utime  # Importa el módulo de tiempo para usar funciones de espera

# Configuración de los pines
pot_pin = machine.ADC(26)  # Configura el pin GP26 como entrada analógica (ADC) para leer el potenciómetro
R_fija = 1000  # Define la resistencia fija en ohmios (1kΩ) que se utilizará en el ohmímetro
R_shunt = 10  # Define la resistencia shunt en ohmios (10Ω) que se utilizará para medir corriente

# Factor de conversión del ADC (0-65535) a voltaje (0-3.3V)
conversion_factor = 3.3 / 65535  # Calcula el factor de conversión para convertir la lectura del ADC a voltaje

while True:  # Inicia un bucle infinito para leer y mostrar las mediciones continuamente
    # Leer el valor del ADC
    reading = pot_pin.read_u16()  # Lee el valor del ADC del pin GP26 (de 0 a 65535)
    voltage = reading * conversion_factor  # Convierte la lectura del ADC a voltaje (0 a 3.3V)

    # Voltímetro
    print("Voltímetro - Voltaje: {:.2f} V".format(voltage))  # Muestra el voltaje medido en la consola

    # Ohmímetro
    if voltage > 0:  # Verifica que haya un voltaje medido antes de calcular la resistencia
        # Calcula la resistencia desconocida usando la fórmula del divisor de tensión
        R_desconocida = R_fija * (voltage / (3.3 - voltage))  
        print("Ohmímetro - Resistencia: {:.2f} ohmios".format(R_desconocida))  # Muestra la resistencia calculada
    else:
        print("Ohmímetro - Resistencia no detectada (voltaje 0)")  # Muestra un mensaje si no se detecta voltaje

    # Amperímetro
    # Calcula la corriente usando la ley de Ohm (I = V/R) y convierte a miliamperios
    current_mA = (voltage / R_shunt) * 1000  
    print("Amperímetro - Corriente: {:.2f} mA".format(current_mA))  # Muestra la corriente medida en miliamperios

    # Esperar un segundo antes de la próxima lectura
    utime.sleep(1)  # Pausa el programa durante 1 segundo