Code zoeken

Les 14/31-5: Arduino-codering map() voorbeeld 2

Les 14/31-5: Arduino-codering map() voorbeeld 2

Deze tutorial laat zien hoe je de Arduino map()-functie gebruikt om de helderheid van een LED te regelen met een percentagewaarde (0–100%) in plaats van het ruwe 0–255-bereik dat vereist is voor analogWrite(). Dit is een fundamentele techniek die je code vereenvoudigt en veel intuïtiever maakt, omdat je in termen van percentages kunt denken in plaats van willekeurige bytewaarden.

Sunfounder-auto geassembleerd

Deze vaardigheid is essentieel voor elk project waarbij je sensorwaarden of stuursignalen moet schalen. Je kunt het bijvoorbeeld gebruiken om:

  • De helderheid van een LED of de snelheid van een motor te regelen op basis van de uitlezing van een potentiometer.
  • De uitvoer van een temperatuursensor (bijv. 0–1023) om te zetten naar een Celsius- of Fahrenheit-bereik.
  • De analoge invoer van een joystick te koppelen aan de positie van een servomotor.
  • Een eenvoudige gebruikersinterface te maken waarbij een percentagewaarde wordt gebruikt om het vermogensniveau van een apparaat in te stellen.

Aan het einde van deze les kun je schonere, beter onderhoudbare code schrijven die gemakkelijker te lezen en aan te passen is.

Hardware/componenten

Dit project gebruikt een minimale set componenten, waardoor het perfect is voor beginners. Je hebt nodig:

  • Een Arduino-bord (bijv. Uno).
  • Een LED.
  • Een 220-ohm-weerstand.
  • Jumperdraden.
  • Een breadboard (optioneel maar aanbevolen).

Bedradingsgids

De bedrading voor dit project is heel eenvoudig, zoals gedemonstreerd in de video (in video op 20:47). De LED is verbonden met pin 3 van de Arduino via een 220-ohm-stroombegrenzingsweerstand.

Verbind de anode (langere poot) van de LED met pin 3 via de weerstand. Verbind de kathode (kortere poot) van de LED met de ground (GND)-pin op de Arduino.

Code-uitleg

Dit voorbeeld richt zich op een door de gebruiker gedefinieerde functie die het regelen van de LED-helderheid vereenvoudigt. De code is opgebouwd rond een aangepaste functie genaamd pwmValue(), die de sleutel is om de code intuïtief te maken.

Laten we de configureerbare delen van de code opsplitsen:

int LEDpin = 3; //definieer pin voor LED

Deze regel definieert de Arduino-pin waarmee de LED is verbonden. Je kunt het nummer 3 wijzigen naar elke andere PWM-capabele pin op je Arduino-bord.

De kern van het project is de aangepaste functie pwmValue(). Deze functie neemt een percentagewaarde als invoer en zet deze om naar het 0–255-bereik dat wordt gebruikt door analogWrite(). Dit is waar de map()-functie zijn magie doet.

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

Om deze functie te gebruiken, roep je deze eenvoudig aan met het gewenste helderheidspercentage. De functie retourneert de juiste waarde voor analogWrite(). Bijvoorbeeld, pwmValue(60) retourneert 153, wat overeenkomt met 60% van 255. De functie bevat ook een veiligheidscontrole om ervoor te zorgen dat het invoerpercentage tussen 0 en 100 ligt, en retourneert 0 als dit buiten dit bereik valt.

In de setup()-functie kun je zien hoe dit wordt gebruikt:

int b=5;//60% helderheid
Serial.println( pwmValue(b)   );//print het op seriële monitor
analogWrite(LEDpin, pwmValue(b));// zet de LED aan met 60% helderheid

Hier wordt de variabele b ingesteld op het gewenste helderheidspercentage. De functie pwmValue(b) wordt vervolgens gebruikt om zowel de gekoppelde waarde naar de seriële monitor te printen als de LED-helderheid in te stellen. Om de LED-helderheid te wijzigen, hoef je alleen de waarde van b aan te passen. De map()-functie zorgt voor alle benodigde berekeningen.

Live project/demonstratie

In de video demonstreert de presentator het project door de waarde van de variabele b te wijzigen en de code naar de Arduino te uploaden. Wanneer b is ingesteld op 60, koppelt de code dit naar 153 en licht de LED op met 60% helderheid. Het wijzigen van b naar 90 koppelt naar 229, waardoor de LED merkbaar helderder wordt. Het instellen op 100 koppelt naar 255, wat de maximale helderheid is. De demonstratie laat duidelijk zien hoe de map()-functie je in staat stelt de LED te regelen met een intuïtieve percentagewaarde, terwijl de seriële monitor de exacte 0–255-waarde bevestigt die naar de pin wordt gestuurd (in video op 21:29).

Gerelateerde projecten uit deze video

Hoofdstukken

  • [00:00] Inleiding tot Millis- en map-functies
  • [01:19] Wat is Millis en waarom het gebruiken
  • [05:46] Millis gebruiken met een event om actie te ondernemen
  • [08:35] Millis voorbeeld 2 met een drukknop
  • [12:14] Millis voorbeeld 3 controleren op twee knopdrukken
  • [17:20] Inleiding tot de map()-functie
  • [19:47] Codevoorbeeld voor het koppelen van een percentage aan LED-helderheid
  • [20:47] Live demonstratie van de map()-functie
  • [22:41] Een aangepaste functie maken om het koppelen te verwerken

Afbeeldingen

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
 

Hulpmiddelen en referenties

Bestanden📁

Gebruikershandleiding