In questo tutorial sperimenterai l’effetto di un segnale PWM sulla luminosità di un LED.
La modulazione PWM è un modo semplice, ma efficace, di codificare una grandezza analogica all’interno di un segnale digitale.
Il codice dello sketch illustrato nel video è il seguente.
void setup() {
// inizializzo la connessione seriale
Serial.begin(9600);
// imposto il PIN 9 come OUTPUT
pinMode(9, OUTPUT);
// scrivo sul terminale un messaggio di istruzioni
Serial.println("Digita un numero compreso tra 0 e 255 e premi invio.");
}
void loop() {
// Se ricevo qualcosa dal terminale
// acquisisco la stringa dei caratteri immessi
// converto la stringa in un numero intero
// e imposto il valore di output sul PIN 9
if (Serial.available()){
String valoreInviato = Serial.readString();
int val = valoreInviato.toInt();
Serial.print("Hai inviato il valore: ");
Serial.println(val);
// verifico e correggo il valore di val
if (val > 255) val = 255;
if (val < 0) val = 0;
// genero il segnale PWM
analogWrite(9, val);
}
}
Nella funzione loop viene verificata la presenza di caratteri inviati dal terminale seriale e in tal caso viene letto l’intero contenuto del buffer, inserendolo in un ‘oggetto‘ della classe ‘String‘.
Dal terminale potrebbe essere pervenuta una qualsiasi sequenza di caratteri.
La funzione valoreInviato.toInt() restituisce zero se la stringa ‘valoreInviato‘ contiene caratteri alfabetici, mentre fornisce il corrispondente valore numerico intero se la stringa contiene una sequenza di caratteri di tipo cifra che compongono un numero intero valido.
Il valore numerico ottenuto viene comunque limitato all’intervallo 0 – 255 attraverso le due istruzioni if che seguono la lettura, in modo da poter essere utilizzato nella funzione analogWrite che attiva l’emissione del segnale PWM sul PIN prescelto.