Pretraži kod

Lekcija 14/31-5: Arduino kodiranje map() primjer 2

Lekcija 14/31-5: Arduino kodiranje map() primjer 2

Ovaj tutorijal pokazuje kako koristiti Arduino map() funkciju za kontrolu svjetline LED diode koristeći procentualnu vrijednost (0–100%) umjesto sirovog 0–255 opsega koji zahtijeva analogWrite(). Ovo je osnovna tehnika koja pojednostavljuje vaš kod i čini ga mnogo intuitivnijim, jer možete razmišljati u procentima umjesto u proizvoljnim bajt vrijednostima.

Sastavljeni Sunfounder automobil

Ova vještina je neophodna za svaki projekat gdje trebate skalirati očitanja senzora ili kontrolne signale. Na primjer, možete je koristiti za:

  • Kontrolu svjetline LED diode ili brzine motora na osnovu očitanja potenciometra.
  • Pretvaranje izlaza temperaturnog senzora (npr. 0–1023) u Celzijus ili Fahrenheit opseg.
  • Mapiranje analognog ulaza džojstika za kontrolu pozicije servo motora.
  • Kreiranje jednostavnog korisničkog interfejsa gdje se procentualna vrijednost koristi za postavljanje nivoa snage uređaja.

Do kraja ove lekcije, moći ćete pisati čišći, održiviji kod koji je lakše čitati i prilagođavati.

Hardver/Komponente

Ovaj projekat koristi minimalan set komponenti, što ga čini savršenim za početnike. Trebat će vam:

  • Arduino ploča (npr. Uno).
  • LED dioda.
  • Otpornik od 220 oma.
  • Konektorske žice.
  • Breadboard (opciono, ali preporučljivo).

Vodič za povezivanje

Povezivanje za ovaj projekat je vrlo jednostavno, kao što je prikazano u videu (u videu na 20:47). LED dioda je spojena na pin 3 Arduina kroz otpornik od 220 oma koji ograničava struju.

Spojite anodu (dužu nogicu) LED diode na pin 3 kroz otpornik. Spojite katodu (kraću nogicu) LED diode na uzemljenje (GND) pin na Arduinu.

Objašnjenje koda

Ovaj primjer se fokusira na korisnički definiranu funkciju koja pojednostavljuje kontrolu svjetline LED diode. Kod je izgrađen oko prilagođene funkcije nazvane pwmValue(), koja je ključ za intuitivan kod.

Hajde da raščlanimo konfigurabilne dijelove koda:

int LEDpin = 3; //definisan pin za LED

Ova linija definira Arduino pin na koji je LED dioda spojena. Možete promijeniti broj 3 u bilo koji drugi PWM pin na vašoj Arduino ploči.

Srž projekta je prilagođena funkcija pwmValue(). Ova funkcija uzima procentualnu vrijednost kao ulaz i pretvara je u 0–255 opseg koji koristi analogWrite(). Ovdje map() funkcija čini svoju magiju.

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

Da biste koristili ovu funkciju, jednostavno je pozovite sa željenim procentom svjetline. Funkcija će vratiti tačnu vrijednost za analogWrite(). Na primjer, pwmValue(60) će vratiti 153, što odgovara 60% od 255. Funkcija također uključuje sigurnosnu provjeru da osigura da je ulazni procenat između 0 i 100, vraćajući 0 ako je izvan ovog opsega.

U setup() funkciji, možete vidjeti kako se ovo koristi:

int b=5;//60% svjetline
Serial.println( pwmValue(b)   );//printaj na serijskom monitoru
analogWrite(LEDpin, pwmValue(b));// uključi LED sa 60% svjetline

Ovdje je varijabla b postavljena na vaš željeni procenat svjetline. Funkcija pwmValue(b) se zatim koristi i za ispis mapirane vrijednosti na Serijski monitor i za postavljanje svjetline LED diode. Da biste promijenili svjetlinu LED diode, samo trebate modificirati vrijednost b. map() funkcija obavlja sve potrebne proračune za vas.

Živi projekat/Demonstracija

U videu, voditelj demonstrira projekat mijenjajući vrijednost b varijable i uploadajući kod na Arduino. Kada je b postavljeno na 60, kod ga mapira na 153 i LED dioda svijetli sa 60% svjetline. Promjena b na 90 mapira na 229, čineći LED diodu primjetno svjetlijom. Postavljanje na 100 mapira na 255, što je maksimalna svjetlina. Demonstracija jasno pokazuje kako map() funkcija omogućava kontrolu LED diode koristeći intuitivnu procentualnu vrijednost, dok Serijski monitor potvrđuje tačnu 0–255 vrijednost koja se šalje na pin (u videu na 21:29).

Povezani projekti iz ovog videa

Poglavlja

  • [00:00] Uvod u Millis i map funkcije
  • [01:19] Šta je Millis i zašto ga koristiti
  • [05:46] Korištenje Millis-a sa događajem za poduzimanje akcije
  • [08:35] Millis primjer 2 sa push dugmetom
  • [12:14] Millis primjer 3 provjera dva pritiska dugmeta
  • [17:20] Uvod u map() funkciju
  • [19:47] Primjer koda za mapiranje procenta na svjetlinu LED diode
  • [20:47] Živa demonstracija map() funkcije
  • [22:41] Kreiranje prilagođene funkcije za rukovanje mapiranjem

Slike

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

Resursi i reference

Datoteke📁

Korisnički priručnik