Cerca codice

Lezione 14/31-5: Esempio 2 di mappa() nella programmazione Arduino

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.

Auto Sunfounder assemblata

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

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

Immagini

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Lingua: C++
/*
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
 

File📁

Manuale dell'utente