Soek Kode

Les 14/31-5: Arduino-kode kaart() voorbeeld 2

Les 14/31-5: Arduino-kode kaart() voorbeeld 2

Hierdie tutoriaal demonstreer hoe om die Arduino map()-funksie te gebruik om 'n LED se helderheid te beheer deur 'n persentasiewaarde (0–100%) te gebruik in plaas van die rou 0–255-reeks wat deur analogWrite() vereis word. Dit is 'n fundamentele tegniek wat jou kode vereenvoudig en dit baie meer intuïtief maak, aangesien jy in terme van persentasies kan dink eerder as arbitrêre greepwaardes.

Sunfounder-motor saamgestel

Hierdie vaardigheid is noodsaaklik vir enige projek waar jy sensorlesings of beheerseine moet skaal. Byvoorbeeld, jy kan dit gebruik om:

  • Die helderheid van 'n LED of die spoed van 'n motor te beheer gebaseer op 'n potensiometer se lesing.
  • 'n Temperatuursensor se uitset (bv. 0–1023) om te skakel na 'n Celsius- of Fahrenheit-reeks.
  • 'n Stokkiespeletjie se analoog invoer te karteer om die posisie van 'n servomotor te beheer.
  • 'n Eenvoudige gebruikerskoppelvlak te skep waar 'n persentasiewaarde gebruik word om 'n toestel se kragvlak in te stel.

Teen die einde van hierdie les sal jy skoner, meer onderhoubare kode kan skryf wat makliker is om te lees en aan te pas.

Hardeware/Komponente

Hierdie projek gebruik 'n minimale stel komponente, wat dit perfek maak vir beginners. Jy sal nodig hê:

  • 'n Arduino-bord (bv. Uno).
  • 'n LED.
  • 'n 220-ohm-weerstand.
  • Springdrade.
  • 'n Broodbord (opsioneel maar aanbeveel).

Bedradingsgids

Die bedrading vir hierdie projek is baie eenvoudig, soos gedemonstreer in die video (in video by 20:47). Die LED is gekoppel aan pen 3 van die Arduino deur 'n 220-ohm-stroombeperkende weerstand.

Koppel die anode (langer been) van die LED aan pen 3 deur die weerstand. Koppel die katode (korter been) van die LED aan die grond (GND)-pen op die Arduino.

Kodeverduideliking

Hierdie voorbeeld fokus op 'n gebruikersgedefinieerde funksie wat die beheer van die LED se helderheid vereenvoudig. Die kode is gebou rondom 'n pasgemaakte funksie genaamd pwmValue(), wat die sleutel is om die kode intuïtief te maak.

Kom ons breek die konfigureerbare dele van die kode af:

int LEDpin = 3; //definieer pen vir LED

Hierdie lyn definieer die Arduino-pen waaraan die LED gekoppel is. Jy kan die nommer 3 verander na enige ander PWM-geskikte pen op jou Arduino-bord.

Die kern van die projek is die pasgemaakte funksie pwmValue(). Hierdie funksie neem 'n persentasiewaarde as sy invoer en skakel dit om na die 0–255-reeks wat deur analogWrite() gebruik word. Dit is waar die map()-funksie sy magie doen.

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

Om hierdie funksie te gebruik, roep jy dit eenvoudig aan met jou gewenste helderheidspersentasie. Die funksie sal die korrekte waarde vir analogWrite() teruggee. Byvoorbeeld, pwmValue(60) sal 153 teruggee, wat ooreenstem met 60% van 255. Die funksie sluit ook 'n veiligheidskontrole in om te verseker dat die invoerpersentasie tussen 0 en 100 is, en gee 0 terug as dit buite hierdie reeks is.

In die setup()-funksie kan jy sien hoe dit gebruik word:

int b=5;//60% helderheid
Serial.println( pwmValue(b)   );//druk dit op serieële monitor
analogWrite(LEDpin, pwmValue(b));// skakel die LED aan met 60% helderheid

Hier word die veranderlike b gestel op jou gewenste helderheidspersentasie. Die funksie pwmValue(b) word dan gebruik om beide die gekarteerde waarde op die Serieële Monitor te druk en om die LED se helderheid in te stel. Om die LED se helderheid te verander, hoef jy net die waarde van b te wysig. Die map()-funksie hanteer al die nodige berekeninge vir jou.

Lewende Projek/Demonstrasie

In die video demonstreer die aanbieder die projek deur die waarde van die b-veranderlike te verander en die kode na die Arduino op te laai. Wanneer b gestel is op 60, karteer die kode dit na 153 en die LED lig op teen 60% helderheid. Deur b te verander na 90 karteer dit na 229, wat die LED merkbaar helderder maak. Deur dit op 100 te stel karteer dit na 255, wat die maksimum helderheid is. Die demonstrasie wys duidelik hoe die map()-funksie jou toelaat om die LED te beheer met 'n intuïtiewe persentasiewaarde, terwyl die Serieële Monitor die presiese 0–255-waarde bevestig wat na die pen gestuur word (in video by 21:29).

Verwante projekte van hierdie video

Hoofstukke

  • [00:00] Inleiding tot Millis en map-funksies
  • [01:19] Wat is Millis en hoekom dit gebruik
  • [05:46] Gebruik Millis met 'n gebeurtenis om aksie te neem
  • [08:35] Millis voorbeeld 2 met 'n drukknoppie
  • [12:14] Millis voorbeeld 3 wat vir twee knoppie-drukke kontroleer
  • [17:20] Inleiding tot die map()-funksie
  • [19:47] Kodevoorbeeld vir die kartering van 'n persentasie na LED-helderheid
  • [20:47] Lewende demonstrasie van die map()-funksie
  • [22:41] Skep 'n pasgemaakte funksie om kartering te hanteer

Beelde

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

Hulpbronne en verwysings

Lêers📁

Gebruikershandleiding