Lezione 14/31-5: Esempio 2 di mappa() nella programmazione Arduino
Questo tutorial dimostra come utilizzare la funzione map() di Arduino per controllare la luminosità di un LED utilizzando un valore percentuale (0–100%) invece dell'intervallo grezzo 0–255 richiesto da analogWrite(). Questa è una tecnica fondamentale che semplifica il tuo codice e lo rende molto più intuitivo, poiché puoi pensare in termini di percentuali anziché in valori byte arbitrari.
Questa competenza è essenziale per qualsiasi progetto in cui devi scalare letture di sensori o segnali di controllo. Ad esempio, potresti usarla per:
- Controllare la luminosità di un LED o la velocità di un motore in base alla lettura di un potenziometro.
- Convertire l'uscita di un sensore di temperatura (ad esempio, 0–1023) in un intervallo Celsius o Fahrenheit.
- Mappare l'ingresso analogico di un joystick per controllare la posizione di un servomotore.
- Creare una semplice interfaccia utente in cui un valore percentuale viene utilizzato per impostare il livello di potenza di un dispositivo.
Alla fine di questa lezione, sarai in grado di scrivere codice più pulito e manutenibile, più facile da leggere e modificare.
Hardware/Componenti
Questo progetto utilizza un set minimo di componenti, rendendolo perfetto per i principianti. Avrai bisogno di:
- Una scheda Arduino (ad esempio, Uno).
- Un LED.
- Una resistenza da 220 ohm.
- Cavi jumper.
- Una breadboard (opzionale ma consigliata).
Guida al Cablaggio
Il cablaggio per questo progetto è molto semplice, come dimostrato nel video (nel video a 20:47). Il LED è collegato al pin 3 di Arduino tramite una resistenza limitatrice di corrente da 220 ohm.
Collega l'anodo (gamba più lunga) del LED al pin 3 attraverso la resistenza. Collega il catodo (gamba più corta) del LED al pin di terra (GND) su Arduino.
Spiegazione del Codice
Questo esempio si concentra su una funzione definita dall'utente che semplifica il controllo della luminosità del LED. Il codice è costruito attorno a una funzione personalizzata chiamata pwmValue(), che è la chiave per rendere il codice intuitivo.
Analizziamo le parti configurabili del codice:
int LEDpin = 3; //definisce il pin per il LED
Questa riga definisce il pin di Arduino a cui è collegato il LED. Puoi cambiare il numero 3 con qualsiasi altro pin compatibile PWM sulla tua scheda Arduino.
Il cuore del progetto è la funzione personalizzata pwmValue(). Questa funzione prende un valore percentuale come input e lo converte nell'intervallo 0–255 utilizzato da analogWrite(). È qui che la funzione map() fa la sua magia.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Per utilizzare questa funzione, basta chiamarla con la percentuale di luminosità desiderata. La funzione restituirà il valore corretto per analogWrite(). Ad esempio, pwmValue(60) restituirà 153, che corrisponde al 60% di 255. La funzione include anche un controllo di sicurezza per garantire che la percentuale di input sia compresa tra 0 e 100, restituendo 0 se è fuori da questo intervallo.
Nella funzione setup(), puoi vedere come viene utilizzato:
int b=5;//60% luminosità
Serial.println( pwmValue(b) );//stampalo sul monitor seriale
analogWrite(LEDpin, pwmValue(b));// accendi il LED con luminosità al 60%
Qui, la variabile b è impostata alla percentuale di luminosità desiderata. La funzione pwmValue(b) viene quindi utilizzata sia per stampare il valore mappato sul Monitor Seriale sia per impostare la luminosità del LED. Per cambiare la luminosità del LED, devi solo modificare il valore di b. La funzione map() gestisce tutti i calcoli necessari per te.
Progetto/Dimostrazione dal Vivo
Nel video, il presentatore dimostra il progetto cambiando il valore della variabile b e caricando il codice su Arduino. Quando b è impostato a 60, il codice lo mappa a 153 e il LED si accende al 60% di luminosità. Cambiando b a 90 si mappa a 229, rendendo il LED notevolmente più luminoso. Impostandolo a 100 si mappa a 255, che è la luminosità massima. La dimostrazione mostra chiaramente come la funzione map() ti permetta di controllare il LED utilizzando un valore percentuale intuitivo, mentre il Monitor Seriale conferma l'esatto valore 0–255 inviato al pin (nel video a 21:29).
Progetti correlati da questo video
- Lezione 14/31-1: Arduino Millis (senza delay) e funzioni map | SunFounder Robojax
- Lezione 14/31-2: Codice Arduino millis() esempio 2 con evento
- Lezione 14/31-3: Codice Arduino millis() esempio 3 con pulsante
- Lezione 14/31-4: Codice Arduino map() esempio 1
Capitoli
- [00:00] Introduzione alle funzioni Millis e map
- [01:19] Cos'è Millis e perché usarlo
- [05:46] Usare Millis con un evento per agire
- [08:35] Millis esempio 2 con un pulsante
- [12:14] Millis esempio 3 controllo di due pressioni del pulsante
- [17:20] Introduzione alla funzione map()
- [19:47] Esempio di codice per mappare una percentuale alla luminosità del LED
- [20:47] Dimostrazione dal vivo della funzione map()
- [22:41] Creazione di una funzione personalizzata per gestire la mappatura
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
Cose di cui potresti avere bisogno
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Altro
Risorse e riferimenti
-
Esterno
File📁
Manuale dell'utente
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB