Nota
Ciao, benvenuto nella comunità di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino e ESP32 con altri appassionati.
Perché unirti?
Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Omaggi: Partecipa a omaggi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
11. Controllo di Matrici LED con Potenziometro
Benvenuto in questa lezione, dove esploreremo come padroneggiare le istruzioni condizionali per controllare dinamicamente matrici di LED. Partendo dalla nostra precedente conoscenza dei circuiti LED semplici, questa lezione ti introdurrà a logiche condizionali complesse, consentendo ai LED di rispondere a diversi livelli di input da un potenziometro. Questo corso è ideale sia per principianti che si avvicinano alla programmazione delle istruzioni condizionali, sia per programmatori esperti che desiderano approfondire la struttura if-else if-else.
Alla fine di questa lezione, non solo saprai programmare i LED per accendersi in sequenza, ma comprenderai anche come utilizzare questi schemi di illuminazione per rappresentare visivamente diverse soglie di input.
Costruisci il Circuito
Componenti Necessari
1 * Arduino Uno R3 |
3 * LED Rossi |
3 * Resistenze da 220Ω |
1 * Potenziometro |
1 * Cavo USB |
1 * Breadboard |
Fili di Collegamento |
1 * Multimetro |
Fasi di Costruzione
Segui il diagramma di cablaggio, o i passaggi qui sotto per costruire il circuito.

Collega un potenziometro al breadboard. Inserisci i suoi tre pin nei fori 30G, 29F, 28G.
Nota
Il potenziometro ha un’etichetta «P 103», che indica il suo intervallo di resistenza. Inserisci il potenziometro nel breadboard come mostrato, con il lato etichettato rivolto verso di te.

Inserisci un filo di collegamento nel foro 28J e collegalo al terminale negativo del breadboard.

Successivamente, inserisci un filo di collegamento tra il foro 29J e il pin A0 dell’Arduino Uno R3.

Infine, collega il potenziometro al pin 5V inserendo un filo di collegamento tra il foro 30J del breadboard e il pin 5V dell’Arduino Uno R3.

Collega il pin GND dell’Arduino Uno R3 al terminale negativo del breadboard utilizzando un filo di collegamento lungo.

Prendi tre LED di qualsiasi colore. Inserisci i loro anodi (pin più lunghi) nei fori 15A, 11A e 7A rispettivamente, e i loro catodi (pin più corti) nel terminale negativo del breadboard.

Posiziona una resistenza da 220 ohm tra i fori 15E e 15G.

Allo stesso modo, inserisci una resistenza da 220 ohm tra 11E e 11G, e un’altra tra 7E e 7G.

Collega il foro 15J del breadboard al pin 11 dell’Arduino Uno R3 con un filo.

Collega il foro 11J del breadboard al pin 10 dell’Arduino Uno R3 con un filo.

Collega il foro 7J del breadboard al pin 9 dell’Arduino Uno R3 con un filo. Il circuito è ora completo.

Creazione del Codice
Scrivere il Pseudocodice
Il pseudocodice serve come schizzo del programma, scritto in linguaggio semplice per semplificare la comprensione. Il tuo compito è creare il pseudocodice per una matrice di LED che reagisce a un potenziometro. Man mano che il valore del potenziometro aumenta, più LED si accenderanno. Prima di immergerti nel pseudocodice, rispondi a queste domande:
- How does the Arduino read the potentiometer's value?
- How can each LED be controlled individually?
- how many ranges should the potentiometer's values be divided?
- What should each LED display across these ranges?
Scrivi il tuo pseudocodice per la matrice di LED nella sezione vuota fornita nel tuo manuale.
Stampare i Valori del Potenziometro
Per trasformare il tuo pseudocodice in uno sketch funzionante, apri l’IDE di Arduino e avvia un nuovo progetto selezionando «New Sketch» dal menu «File».
Salva il tuo sketch come
Lesson11_LED_Array
usandoCtrl + S
o facendo clic su «Salva».Come nelle lezioni precedenti, crea una variabile prima del
void setup()
per memorizzare il valore del potenziometro e ricorda di annotare il codice per rispecchiarne la funzionalità.
int potValue = 0; // Variabile per memorizzare il valore letto dal potenziometro
void setup() {
// Codice da eseguire una volta:
}
Poiché i LED sono dispositivi di output, dovrai configurare i pin digitali 9, 10 e 11 come OUTPUT. Ricorda di includere i commenti.
int potValue = 0; // Variabile per memorizzare il valore letto dal potenziometro
void setup() {
// Codice da eseguire una volta:
pinMode(9, OUTPUT); // Configura il pin 9 come output
pinMode(10, OUTPUT); // Configura il pin 10 come output
pinMode(11, OUTPUT); // Configura il pin 11 come output
}
Avvia la comunicazione seriale impostando il baud rate a 9600.
int potValue = 0; // Variabile per memorizzare il valore letto dal potenziometro
void setup() {
// Codice da eseguire una volta:
pinMode(9, OUTPUT); // Configura il pin 9 come output
pinMode(10, OUTPUT); // Configura il pin 10 come output
pinMode(11, OUTPUT); // Configura il pin 11 come output
Serial.begin(9600); // Avvia la comunicazione seriale a 9600 baud
}
All’interno del
void loop()
, dopo aver letto il valore del potenziometro, memorizzalo nella variabilepotValue
e stampalo nel monitor seriale.
int potValue = 0; // Variabile per memorizzare il valore letto dal potenziometro
void setup() {
pinMode(9, OUTPUT); // Configura il pin 9 come output
pinMode(10, OUTPUT); // Configura il pin 10 come output
pinMode(11, OUTPUT); // Configura il pin 11 come output
Serial.begin(9600); // Avvia la comunicazione seriale a 9600 baud
}
void loop() {
// Codice principale da eseguire ripetutamente:
potValue = analogRead(A0); // Leggi il valore dal potenziometro
Serial.print("Pot Value: "); // Visualizza la lettura
Serial.println(potValue); // Stampa il valore del potenziometro
delay(100);
}
Valida e compila il codice se necessario.
Una volta che il codice è caricato sull’Arduino Uno R3, noterai che ruotando il potenziometro il valore visualizzato nel monitor seriale varia tra 0 e 1023. Questo intervallo è ideale, anche se a causa di variazioni di fabbricazione, il tuo potenziometro potrebbe mostrare un intervallo da 50 a 1000. Ricorda semplicemente questo intervallo come riferimento.
Controllare i LED con i Valori del Potenziometro
Per accendere sequenzialmente ogni LED in base al valore del potenziometro, avrai bisogno di più condizioni. Puoi usare if
per specificare le azioni per diverse fasce di valori del potenziometro:
Sotto 200: Spegni tutti i LED.
Tra 200 e 600: Accendi il primo LED.
Tra 600 e 1000: Accendi due LED.
Sopra 1000: Accendi tutti i LED.
Tuttavia, gestire queste condizioni separatamente può essere inefficiente, poiché Arduino deve verificarle tutte ad ogni ciclo del loop.
Per ottimizzare il processo, utilizza la struttura if-else if
:
if (condition 1) {
// Execute if condition 1 is true
}
else if (condition 2) {
// Execute if condition 2 is true
}
else if (condition 3) {
// Execute if condition 3 is true
}
else {
// Execute if none of the conditions are true
}

In una struttura if-else if
, viene testata prima la prima condizione. Se è vera, vengono eseguiti i comandi associati e tutte le altre condizioni vengono saltate (anche se alcune sono vere). Se la prima condizione è falsa, viene testata la seconda. Se questa è vera, vengono eseguiti i comandi associati e si saltano le altre. Se anche questa è falsa, si testa la terza condizione, e così via. In alcuni casi, potrebbero esserci più condizioni vere. Pertanto, l’ordine delle condizioni è importante. Verranno eseguiti solo i comandi associati alla prima condizione vera.
Per prima cosa, spegni tutti e tre i LED se il valore del potenziometro è inferiore a 200. Aggiungi un’istruzione if e usa la funzione digitalWrite() per impostare i pin 9, 10 e 11 su LOW per spegnere i LED.
void loop() {
// Inserisci qui il codice principale da eseguire ripetutamente:
potValue = analogRead(A0); // Leggi il valore dal potenziometro
Serial.print("Pot Value: "); // Mostra il valore letto
Serial.println(potValue); // Stampa il valore del potenziometro
delay(100);
if (potValue < 200) { // Se il valore del potenziometro è inferiore a 200
digitalWrite(9, LOW); // Spegni il LED sul pin 9
digitalWrite(10, LOW); // Spegni il LED sul pin 10
digitalWrite(11, LOW); // Spegni il LED sul pin 11
}
}
Aggiungi un’istruzione
else if
per accendere il primo LED quando il valore analogico del potenziometro è inferiore a 600.
if (potValue < 200) { // If potValue less than 200
digitalWrite(9, LOW); // Switch off the LED on pin 9
digitalWrite(10, LOW); // Switch off the LED on pin 10
digitalWrite(11, LOW); // Switch off the LED on pin 11
} else if (potValue < 600) { // If potValue less than 600
digitalWrite(9, HIGH); // Light up the LED on pin 9
digitalWrite(10, LOW); // Switch off the LED on pin 10
digitalWrite(11, LOW); // Switch off the LED on pin 11
}
Per accendere due LED quando il valore è inferiore a 1000, inserisci un’altra condizione
else if
come questa:
if (potValue < 200) { // If potValue less than 200
digitalWrite(9, LOW); // Switch off the LED on pin 9
digitalWrite(10, LOW); // Switch off the LED on pin 10
digitalWrite(11, LOW); // Switch off the LED on pin 11
} else if (potValue < 600) { // If potValue less than 600
digitalWrite(9, HIGH); // Light up the LED on pin 9
digitalWrite(10, LOW); // Switch off the LED on pin 10
digitalWrite(11, LOW); // Switch off the LED on pin 11
}
else if (potValue < 1000) { // If potValue less than 1000
digitalWrite(9, HIGH); // Light up the LED on pin 9
digitalWrite(10, HIGH); // Light up the LED on pin 10
digitalWrite(11, LOW); // Switch off the LED on pin 11
}
Infine, modifica i comandi all’interno del blocco
else
per accendere tutti e tre i LED utilizzandodigitalWrite()
. Questo blocco contiene i comandi che vengono eseguiti quando nessuna delle altre condizioni è vera. In altre parole, se il valorepotValue
del potenziometro è maggiore o uguale a 1000, i comandi all’interno dielse {}
verranno eseguiti. Il tuo bloccoelse
dovrebbe apparire così:
else if (potValue < 1000) { // Se il valore del potenziometro è inferiore a 1000
digitalWrite(9, HIGH); // Accendi il LED sul pin 9
digitalWrite(10, HIGH); // Accendi il LED sul pin 10
digitalWrite(11, LOW); // Spegni il LED sul pin 11
} else {
digitalWrite(9, HIGH); // Accendi il LED sul pin 9
digitalWrite(10, HIGH); // Accendi il LED sul pin 10
digitalWrite(11, HIGH); // Accendi il LED sul pin 11
}
Il codice completo è il seguente. Clicca su «Carica» per inviare il codice al tuo Arduino Uno R3.
int potValue = 0; // Variabile per memorizzare il valore letto dal potenziometro
void setup() {
pinMode(9, OUTPUT); // Configura il pin 9 come output
pinMode(10, OUTPUT); // Configura il pin 10 come output
pinMode(11, OUTPUT); // Configura il pin 11 come output
Serial.begin(9600); // Avvia la comunicazione seriale a 9600 baud
}
void loop() {
// Inserisci qui il codice principale da eseguire ripetutamente:
potValue = analogRead(A0); // Leggi il valore dal potenziometro
Serial.print("Pot Value: "); // Mostra il valore letto
Serial.println(potValue); // Stampa il valore del potenziometro
delay(100);
if (potValue < 200) { // Se il valore del potenziometro è inferiore a 200
digitalWrite(9, LOW); // Spegni il LED sul pin 9
digitalWrite(10, LOW); // Spegni il LED sul pin 10
digitalWrite(11, LOW); // Spegni il LED sul pin 11
} else if (potValue < 600) { // Se il valore del potenziometro è inferiore a 600
digitalWrite(9, HIGH); // Accendi il LED sul pin 9
digitalWrite(10, LOW); // Spegni il LED sul pin 10
digitalWrite(11, LOW); // Spegni il LED sul pin 11
} else if (potValue < 1000) { // Se il valore del potenziometro è inferiore a 1000
digitalWrite(9, HIGH); // Accendi il LED sul pin 9
digitalWrite(10, HIGH); // Accendi il LED sul pin 10
digitalWrite(11, LOW); // Spegni il LED sul pin 11
} else {
digitalWrite(9, HIGH); // Accendi il LED sul pin 9
digitalWrite(10, HIGH); // Accendi il LED sul pin 10
digitalWrite(11, HIGH); // Accendi il LED sul pin 11
}
}
Ruota il potenziometro per verificare se la matrice di LED funziona come previsto:
Se il valore del potenziometro è inferiore a 200, tutti i LED devono essere spenti.
Se il valore è compreso tra 200 e 600, si deve accendere il primo LED.
Se il valore è compreso tra 600 e 1000, si devono accendere i primi due LED.
Se il valore supera 1000, tutti i LED devono essere accesi.
Domanda
Nel codice, determiniamo il numero di LED da accendere in base al valore del potenziometro. Come possiamo modificare il codice in modo che, mentre i LED si accendono, la loro luminosità cambi in base al potenziometro?
Riassunto
In questa lezione completa, hai imparato a creare un display LED interattivo che risponde a un potenziometro. A partire dalla costruzione del circuito, hai assemblato un sistema che incorpora più LED controllati tramite pin digitali, collegati a un potenziometro che ne regola gli stati in base alle letture. Attraverso istruzioni passo passo, hai programmato con successo il tuo Arduino per gestire diversi scenari di illuminazione in base a soglie specifiche del potenziometro, migliorando la tua comprensione delle interazioni tra hardware e software.
Questo corso ti ha fornito le competenze per scrivere strutture condizionali efficienti, consentendo ai tuoi progetti di reagire a cambiamenti precisi negli input dei sensori. Sperimentando con diverse condizioni, hai visto in prima persona come l’ordine e la struttura del tuo codice influiscano sull’output e sull’efficienza dei tuoi progetti elettronici.