from machine import Pin, ADC, PWM
import time

class Servo:

    def __init__(self, pin = 13) -> None:
        self.servo = PWM(Pin(pin), freq = 50)

    def refresh(self, perc):
        duty_min=26
        duty_max=123
        angle = perc *1.8
        self.servo.duty(int(duty_min+(angle/180)*(duty_max-duty_min)))

class Fotoresistore:

    def __init__(self, pin = 0) -> None:
        self.fotoresistore = ADC(Pin(pin))

    def readPerc(self):
        minVal=0
        maxVal=100
        return 100-((maxVal-minVal) * self.fotoresistore.read() / 4095)
    
    def read(self):
        return 4095-self.fotoresistore.read()
    
class LedBar_Buzzer:

    def __init__(self, pinLed1=4, pinLed2=16, pinLed3=15, pinBuzzer = 2) -> None:
        self.blueLed = PWM(Pin(pinLed1, Pin.OUT))
        self.greenLed = PWM(Pin(pinLed2, Pin.OUT))
        self.redLed = PWM(Pin(pinLed3, Pin.OUT))
        self.ledBar = [self.blueLed, self.greenLed, self.redLed]
        self.buzzer = PWM(Pin(pinBuzzer, Pin.OUT))

    def refresh(self, perc):
        for led in self.ledBar :
            led.duty(perc*2)
        self.buzzer.duty(0)

    def alarm(self):
        self.blueLed.duty(0)
        self.greenLed.duty(0)
        self.redLed.duty(100)
        self.buzzer.duty(100)
        self.buzzer.freq(440)



ledBar_buzzer = LedBar_Buzzer()
fotoresistore = Fotoresistore()
servo = Servo()

while True:
    perc=(int)(fotoresistore.readPerc())
    val =(int)(fotoresistore.read())
    print ("val= "+(str)(val)+" perc= " + (str)(perc))
    if val >2000:
        ledBar_buzzer.alarm()
        servo.refresh(perc)
    else:
        ledBar_buzzer.refresh(perc)
        servo.refresh(perc)
    time.sleep_ms(100)
$abcdeabcde151015202530354045505560fghijfghij