Caută cod

Lecția 14/31-5: Exemplu 2 cu funcția map() în programarea Arduino

Lecția 14/31-5: Exemplu 2 cu funcția map() în programarea Arduino

Acest tutorial demonstrează cum să folosești funcția map() din Arduino pentru a controla luminozitatea unui LED folosind o valoare procentuală (0–100%) în locul intervalului brut 0–255 cerut de analogWrite(). Aceasta este o tehnică fundamentală care simplifică codul și îl face mult mai intuitiv, deoarece poți gândi în termeni de procente, nu de valori arbitrare de octeți.

Mașină Sunfounder asamblată

Această abilitate este esențială pentru orice proiect în care trebuie să scalezi citiri de la senzori sau semnale de control. De exemplu, ai putea să o folosești pentru:

  • Să controlezi luminozitatea unui LED sau viteza unui motor pe baza citirii unui potențiometru.
  • Să convertești ieșirea unui senzor de temperatură (de exemplu, 0–1023) într-un interval în grade Celsius sau Fahrenheit.
  • Să mapezi intrarea analogică a unui joystick pentru a controla poziția unui servomotor.
  • Să creezi o interfață simplă de utilizator în care o valoare procentuală este folosită pentru a seta nivelul de putere al unui dispozitiv.

Până la sfârșitul acestei lecții, vei putea scrie cod mai curat, mai ușor de întreținut, care este mai simplu de citit și de ajustat.

Hardware/Componente

Acest proiect folosește un set minim de componente, fiind perfect pentru începători. Vei avea nevoie de:

  • O placă Arduino (de exemplu, Uno).
  • Un LED.
  • Un rezistor de 220 de ohmi.
  • Fire de legătură (jumper wires).
  • O breadboard (opțional, dar recomandată).

Ghid de cablare

Cablarea pentru acest proiect este foarte simplă, așa cum este demonstrat în videoclip (în videoclip la 20:47). LED-ul este conectat la pinul 3 al plăcii Arduino printr-un rezistor de limitare a curentului de 220 de ohmi.

Conectează anodul (piciorul mai lung) al LED-ului la pinul 3 prin rezistor. Conectează catodul (piciorul mai scurt) al LED-ului la pinul de masă (GND) al plăcii Arduino.

Explicația codului

Acest exemplu se concentrează pe o funcție definită de utilizator care simplifică controlul luminozității LED-ului. Codul este construit în jurul unei funcții personalizate numite pwmValue(), care este cheia pentru a face codul intuitiv.

Să descompunem părțile configurabile ale codului:

int LEDpin = 3; //definește pinul pentru LED

Această linie definește pinul Arduino la care este conectat LED-ul. Poți schimba numărul 3 cu orice alt pin compatibil PWM de pe placa ta Arduino.

Miezul proiectului este funcția personalizată pwmValue(). Această funcție primește o valoare procentuală ca intrare și o convertește în intervalul 0–255 folosit de analogWrite(). Aici intervine funcția map().

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

Pentru a folosi această funcție, o apelezi pur și simplu cu procentul de luminozitate dorit. Funcția va returna valoarea corectă pentru analogWrite(). De exemplu, pwmValue(60) va returna 153, ceea ce corespunde la 60% din 255. Funcția include și o verificare de siguranță pentru a se asigura că procentul de intrare este între 0 și 100, returnând 0 dacă este în afara acestui interval.

În funcția setup(), poți vedea cum este folosită:

int b=5;//luminozitate 60%
Serial.println( pwmValue(b)   );//afișează pe monitorul serial
analogWrite(LEDpin, pwmValue(b));// aprinde LED-ul cu luminozitate de 60%

Aici, variabila b este setată la procentul de luminozitate dorit. Funcția pwmValue(b) este apoi folosită atât pentru a afișa valoarea mapată pe Monitorul Serial, cât și pentru a seta luminozitatea LED-ului. Pentru a schimba luminozitatea LED-ului, trebuie doar să modifici valoarea lui b. Funcția map() se ocupă de toate calculele necesare pentru tine.

Proiect live/Demonstrație

În videoclip, prezentatorul demonstrează proiectul schimbând valoarea variabilei b și încărcând codul pe Arduino. Când b este setat la 60, codul o mapează la 153, iar LED-ul se aprinde la 60% luminozitate. Schimbarea lui b la 90 o mapează la 229, făcând LED-ul vizibil mai luminos. Setarea la 100 o mapează la 255, care este luminozitatea maximă. Demonstrația arată clar cum funcția map() îți permite să controlezi LED-ul folosind o valoare procentuală intuitivă, în timp ce Monitorul Serial confirmă valoarea exactă 0–255 trimisă către pin (în videoclip la 21:29).

Proiecte conexe din acest videoclip

Capitole

  • [00:00] Introducere în funcțiile Millis și map
  • [01:19] Ce este Millis și de ce să o folosim
  • [05:46] Folosirea Millis cu un eveniment pentru a acționa
  • [08:35] Exemplul 2 cu Millis și un buton
  • [12:14] Exemplul 3 cu Millis pentru verificarea a două apăsări de buton
  • [17:20] Introducere în funcția map()
  • [19:47] Exemplu de cod pentru maparea unui procent la luminozitatea LED-ului
  • [20:47] Demonstrație live a funcției map()
  • [22:41] Crearea unei funcții personalizate pentru gestionarea mapării

Imagini

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

Resurse și referințe

Fișiere📁

Manualul utilizatorului