from machine import Pin, PWM, ADC
import time
#Inicialització del pin PWM del servomotor
servo = PWM(Pin(15), freq=50, duty=0)
#Configura el pin A0 del sensor de llum
sensor_de_llum = ADC(34)
#Configura els pins dels botons
boto_verd = Pin(32, Pin.IN)
boto_vermell = Pin(33, Pin.IN)
#Configura els pins dels leds
led_verd = Pin(17, Pin.OUT)
led_vermell = Pin(16, Pin.OUT)
temps = 0 #Variable del temps transcorregut
historial = ["","",""] #Variable de les darreres 3 lectures
duty = 0 #Variable amb la posició del servomotor
while True:
if (temps%2 == 0): #Cada 2 segons
llum = sensor_de_llum.read() #Llegeix el valor analògic del sensor de llum
if (llum > 2666):
valor = "Fosc" #El valor és Fosc si la lectura és > 2666
elif (llum > 1333):
valor = "Normal" #El valor és Normal si la lectura és > 1333
elif (llum > 0):
valor = "Sol" #El valor és Fosc si la lectura és > 0
print(valor) #Imprimeix el valor llegit (Sol, Normal o Fosc)
if (temps%10 == 0): #Cada 10 segons
#Es mouen els darrers valors una posició cap a l'esquerra
historial[0] = historial[1]
historial[1] = historial[2]
historial[2] = valor #S'afegeix el darrer valor llegit a la dreta
print(f"Els tres darrers valors són: {historial}")
if(boto_verd.value() == 1): #Si es polsa el botó verd
duty = 25 #Assigna la posició a la qual es vol portar el servomotor
servo.duty(duty) #Porta el servomotor a la posició mínima
elif(boto_vermell.value() == 1): #Si es polsa el botó vermell
duty = 125 #Assigna la posició a la qual es vol portar el servomotor
servo.duty(duty) #Porta el servomotor a la posició màxima
else: #Si no s'està polsant cap botó, es comprova les lectures del sensor
if (historial[0] == "Sol" and historial[1] == "Sol" and historial[2] == "Sol"): #Si els tres darrers valors de l'historial són Sol
duty = 25 #Assigna la posició a la qual es vol portar el servomotor
servo.duty(duty) #Porta el servomotor a la posició mínima
elif (historial[0] == "Normal" and historial[1] == "Normal" and historial[2] == "Normal"): #Si els tres darrers valors de l'historial són Normal
duty = 75 #Assigna la posició a la qual es vol portar el servomotor
servo.duty(duty) #Porta el servomotor a la posició mitjana
elif (historial[0] == "Fosc" and historial[1] == "Fosc" and historial[2] == "Fosc"): #Si els tres darrers valors de l'historial són Fosc
duty = 125 #Assigna la posició a la qual es vol portar el servomotor
servo.duty(duty) #Porta el servomotor a la posició màxima
if (duty == 125): #Si el servomotor és a la posició màxima encén el led vermell i apaga el verd
led_verd.value(0)
led_vermell.value(1)
elif (duty == 25): #Si el servomotor és a la posició mínima encén el led verd i apaga el vermell
led_verd.value(1)
led_vermell.value(0)
else: #Si el servomotor no és a la posició màxima ni mínima apaga els dos leds
led_verd.value(0)
led_vermell.value(0)
time.sleep(0.1) #Pausa de 0,1 segons
temps += 0.1 #Se suma 0,1 segons al temps transcorregut
temps = round(temps, 1) #S'arrodoneix, ja que no se suma 0,1 segons exactament