Hľadať kód

Lekcia 14/31-5: Príklad map() v Arduino kódovaní 2

Lekcia 14/31-5: Príklad map() v Arduino kódovaní 2

Tento tutoriál ukazuje, ako použiť Arduino map() funkciu na ovládanie jasu LED pomocou percentuálnej hodnoty (0–100 %) namiesto surového rozsahu 0–255, ktorý vyžaduje analogWrite(). Toto je základná technika, ktorá zjednodušuje váš kód a robí ho oveľa intuitívnejším, pretože môžete uvažovať v percentách namiesto ľubovoľných bajtových hodnôt.

Zostavené auto Sunfounder

Táto zručnosť je nevyhnutná pre akýkoľvek projekt, kde potrebujete škálovať hodnoty zo senzorov alebo riadiace signály. Napríklad ju môžete použiť na:

  • Ovládanie jasu LED alebo rýchlosti motora na základe hodnoty potenciometra.
  • Prevod výstupu teplotného senzora (napr. 0–1023) na rozsah v stupňoch Celzia alebo Fahrenheita.
  • Mapovanie analógového vstupu joysticku na ovládanie polohy servomotora.
  • Vytvorenie jednoduchého používateľského rozhrania, kde sa percentuálna hodnota používa na nastavenie úrovne výkonu zariadenia.

Na konci tejto lekcie budete schopní písať čistejší a udržiavateľnejší kód, ktorý sa ľahšie číta a upravuje.

Hardvér/Komponenty

Tento projekt používa minimálnu sadu komponentov, čo ho robí ideálnym pre začiatočníkov. Budete potrebovať:

  • Dosku Arduino (napr. Uno).
  • LED.
  • Rezistor 220 ohmov.
  • Prepojovacie vodiče.
  • Nepájivé pole (voliteľné, ale odporúčané).

Sprievodca zapojením

Zapojenie pre tento projekt je veľmi jednoduché, ako je ukázané vo videu (vo videu v čase 20:47). LED je pripojená na pin 3 Arduina cez rezistor 220 ohmov na obmedzenie prúdu.

Pripojte anódu (dlhšiu nožičku) LED na pin 3 cez rezistor. Pripojte katódu (kratšiu nožičku) LED na pin GND (uzemnenie) na Arduine.

Vysvetlenie kódu

Tento príklad sa zameriava na používateľom definovanú funkciu, ktorá zjednodušuje ovládanie jasu LED. Kód je postavený okolo vlastnej funkcie nazvanej pwmValue(), ktorá je kľúčom k intuitívnemu kódu.

Poďme si rozobrať konfigurovateľné časti kódu:

int LEDpin = 3; //definovaný pin pre LED

Tento riadok definuje pin Arduina, na ktorý je LED pripojená. Číslo 3 môžete zmeniť na akýkoľvek iný pin s podporou PWM na vašej doske Arduino.

Jadrom projektu je vlastná funkcia pwmValue(). Táto funkcia berie percentuálnu hodnotu ako vstup a prevádza ju na rozsah 0–255 používaný funkciou analogWrite(). Tu robí svoju mágiu funkcia map().

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

Na použitie tejto funkcie ju jednoducho zavoláte s požadovaným percentom jasu. Funkcia vráti správnu hodnotu pre analogWrite(). Napríklad pwmValue(60) vráti 153, čo zodpovedá 60 % z 255. Funkcia tiež obsahuje bezpečnostnú kontrolu, aby sa zabezpečilo, že vstupné percento je medzi 0 a 100, a vráti 0, ak je mimo tohto rozsahu.

Vo funkcii setup() môžete vidieť, ako sa to používa:

int b=5;//60% jas
Serial.println( pwmValue(b)   );//vytlačí to na sériový monitor
analogWrite(LEDpin, pwmValue(b));// zapne LED s 60% jasom

Tu je premenná b nastavená na vaše požadované percento jasu. Funkcia pwmValue(b) sa potom používa na vytlačenie mapovanej hodnoty na sériový monitor aj na nastavenie jasu LED. Na zmenu jasu LED stačí upraviť hodnotu b. Funkcia map() vykoná všetky potrebné výpočty za vás.

Živý projekt/Demonštrácia

Vo videu prezentujúci demonštruje projekt zmenou hodnoty premennej b a nahratím kódu do Arduina. Keď je b nastavené na 60, kód ho mapuje na 153 a LED sa rozsvieti na 60 % jasu. Zmena b na 90 mapuje na 229, čím je LED výrazne jasnejšia. Nastavenie na 100 mapuje na 255, čo je maximálny jas. Demonštrácia jasne ukazuje, ako funkcia map() umožňuje ovládať LED pomocou intuitívnej percentuálnej hodnoty, zatiaľ čo sériový monitor potvrdzuje presnú hodnotu 0–255 odosielanú na pin (vo videu v čase 21:29).

Súvisiace projekty z tohto videa

Kapitoly

  • [00:00] Úvod do Millis a map funkcií
  • [01:19] Čo je Millis a prečo ho používať
  • [05:46] Použitie Millis s udalosťou na vykonanie akcie
  • [08:35] Millis príklad 2 s tlačidlom
  • [12:14] Millis príklad 3 kontrola dvoch stlačení tlačidla
  • [17:20] Úvod do funkcie map()
  • [19:47] Príklad kódu na mapovanie percenta na jas LED
  • [20:47] Živá demonštrácia funkcie map()
  • [22:41] Vytvorenie vlastnej funkcie na spracovanie mapovania

Obrázky

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

Zdroje a referencie

Súbory📁

Používateľská príručka