Hľadať kód

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

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

Tento návod je súčasťou série o programovaní Arduina a zameriava sa na praktické použitie funkcie map(). V tejto lekcii sa naučíte, ako previesť hodnotu percenta (0–100) na hodnotu PWM (Pulse Width Modulation) (0–255) na ovládanie jasu LED diódy. Namiesto manuálneho výpočtu, že 60 % sa rovná 153, funkcia map() vykoná lineárny prevod za vás, vďaka čomu bude váš kód čistejší a intuitívnejší.

Táto technika je nevyhnutná pre mnohé reálne aplikácie, kde potrebujete previesť hodnoty zo senzorov alebo vstupy od používateľa do rôznych rozsahov. Môžete ju napríklad použiť na:

  • Ovládanie rýchlosti jednosmerného motora na základe hodnoty potenciometra.
  • Zobrazenie surovej hodnoty teplotného senzora na stupnici 0–100 %.
  • Mapovanie súradníc joysticku na uhly servomotora.
  • Nastavenie jasu LED diódy na základe senzora okolitého svetla.
  • Prevod analógovej hodnoty 0–5 V na digitálnu hodnotu 0–1023 alebo naopak.

Hardvér/Komponenty

Na realizáciu tohto projektu budete potrebovať nasledujúce komponenty:

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

Zapojenie

Vo videu inštruktor predvádza projekt pomocou zapojenia z predchádzajúcej lekcie o stmievania LED diódy. Obvod je jednoduchý: pripojte anódu (dlhšiu nožičku) LED diódy k rezistoru 220 ohmov a druhý koniec rezistora pripojte na digitálny pin 3 na Arduine. Katódu (kratšiu nožičku) LED diódy pripojte priamo na pin GND (uzemnenie) na Arduine.

Vysvetlenie kódu

Kód pre tento príklad je veľmi stručný, pričom hlavná logika sa nachádza vo funkcii setup(). Poďme si rozobrať časti, ktoré môžete upravovať.

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

Tento riadok definuje pin Arduina, na ktorý je pripojená vaša LED dióda. V tomto príklade je nastavený na pin 3, ktorý podporuje PWM, čo je nevyhnutné pre analógový výstup. Toto číslo môžete zmeniť, ak pripojíte LED diódu na iný PWM pin.

int b=8;//60% jas

Toto je kľúčová premenná, ktorú budete meniť na testovanie rôznych úrovní jasu. Predstavuje požadovaný jas v percentách. Komentár v kóde hovorí „60 %“, ale hodnota je nastavená na 8 na demonštračné účely vo videu. Môžete ju zmeniť na akékoľvek celé číslo medzi 0 a 100. Napríklad nastavenie b = 60 by predstavovalo 60 % jas.

int brightness = map(b, 0, 100, 0,255);

Toto je jadro lekcie. Funkcia map() vezme vašu percentuálnu hodnotu (b) a prevedie ju z pôvodného rozsahu (0 až 100) na nový cieľový rozsah (0 až 255). Výsledok sa uloží do premennej brightness, ktorá sa potom použije na zápis analógovej hodnoty na pin LED diódy.

analogWrite(LEDpin, brightness);// zapne LED s 60% jasom

Nakoniec tento riadok odošle mapovanú hodnotu na pin LED diódy pomocou analogWrite(). Tým sa nastaví pracovný cyklus LED diódy, čím sa efektívne ovláda jej jas. Krása tohto prístupu spočíva v tom, že na ovládanie LED diódy stačí zmeniť iba premennú b a funkcia map() vykoná všetky potrebné výpočty.

Živý projekt/Demonštrácia

Vo videu inštruktor nahraje kód a predvedie efekt zmeny premennej b. Keď je b nastavené na 8, sériový monitor zobrazí mapovanú hodnotu 20 a LED dióda je viditeľne tlmená. Zmena b na 90 vedie k mapovanej hodnote 229, vďaka čomu je LED dióda oveľa jasnejšia. Nastavenie b na 100 sa mapuje na 255, čo je plný jas. Táto praktická ukážka jasne ukazuje, ako funkcia map() zjednodušuje proces ovládania analógových výstupov pomocou používateľsky prívetivých percentuálnych hodnôt.

Súvisiace projekty z tohto videa

Kapitoly

  • [00:00] Úvod do kurzu Arduino od Robojax
  • [01:19] Čo je millis() a prečo ho používať
  • [05:46] Príklad 1: Použitie millis() na časovanú udalosť
  • [08:29] Príklad 2: Použitie millis() s tlačidlom
  • [12:14] Príklad 3: Detekcia druhého stlačenia tlačidla po oneskorení
  • [17:20] Úvod do funkcie map()
  • [19:47] Prechod kódom pre príklad s map()
  • [20:41] Živá demonštrácia funkcie map()

Obrázky

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
Jazyk: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
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);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

Zdroje a referencie

Súbory📁

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