#importa dalla libreria machine l'ADC (legge segnali analogici), PWM (genera segnali PWM)
from machine import ADC, PWM
#importo il time per le pause
import time
#crea un oggetto ADC collegato al pin GP26
adc = ADC('GP26')
#crea un oggetto PWM sul pin GP27 con frequenza 50 hz tipica per il controllo di un servo
pwm = PWM('GP27', freq=50)
#ciclo infinito
while True:
# # Legge il valore analogico dal pin GP26, che è a 16 bit, quindi compreso tra 0 e 65535
adc_val = adc.read_u16()
# Converte il valore ADC in un duty cycle adatto al servo:
# - adc_val / 65535 normalizza il valore tra 0 e 1
# - (8192 - 1628) è l'intervallo utile del servo
# - +1638 è il valore minimo del duty
# - int() converte il risultato in numero intero
duty = int((8192-1628)*(adc_val/65535)+1638)
# Imposta il duty cycle del PWM in base al valore calcolato
# Questo determina la posizione del servo motore
pwm.duty_u16(duty)
# Stampa a schermo il valore letto dall'ADC e il duty applicato al servo
print(f"ADC: {adc_val} → Servo Duty: {duty}")
#attende 0.5 secondi prima di ripetere il ciclo
time.sleep(0.5)