Lektion 14/31-5: Arduino-Codierung map()-Beispiel 2
Dieses Tutorial zeigt, wie man die Arduino-map()-Funktion verwendet, um die Helligkeit einer LED mit einem Prozentwert (0–100 %) zu steuern, anstatt des rohen 0–255-Bereichs, den analogWrite() benötigt. Dies ist eine grundlegende Technik, die deinen Code vereinfacht und viel intuitiver macht, da du in Prozentwerten denken kannst, anstatt in willkürlichen Byte-Werten.
Diese Fähigkeit ist für jedes Projekt unerlässlich, bei dem du Sensorwerte skalieren oder Steuersignale anpassen musst. Zum Beispiel könntest du sie verwenden, um:
- Die Helligkeit einer LED oder die Geschwindigkeit eines Motors basierend auf dem Messwert eines Potentiometers zu steuern.
- Die Ausgabe eines Temperatursensors (z. B. 0–1023) in einen Celsius- oder Fahrenheit-Bereich umzuwandeln.
- Den analogen Eingang eines Joysticks zu mappen, um die Position eines Servomotors zu steuern.
- Eine einfache Benutzeroberfläche zu erstellen, bei der ein Prozentwert verwendet wird, um die Leistungsstufe eines Geräts festzulegen.
Am Ende dieser Lektion wirst du in der Lage sein, saubereren und wartbareren Code zu schreiben, der leichter zu lesen und anzupassen ist.
Hardware/Komponenten
Dieses Projekt verwendet eine minimale Anzahl von Komponenten, was es perfekt für Anfänger macht. Du benötigst:
- Ein Arduino-Board (z. B. Uno).
- Eine LED.
- Einen 220-Ohm-Widerstand.
- Jumper-Kabel.
- Ein Breadboard (optional, aber empfohlen).
Verdrahtungsanleitung
Die Verdrahtung für dieses Projekt ist sehr einfach, wie im Video gezeigt (im Video bei 20:47). Die LED ist über einen 220-Ohm-Strombegrenzungswiderstand mit Pin 3 des Arduino verbunden.
Verbinde die Anode (längeres Bein) der LED über den Widerstand mit Pin 3. Verbinde die Kathode (kürzeres Bein) der LED mit dem Masse-Pin (GND) des Arduino.
Code-Erklärung
Dieses Beispiel konzentriert sich auf eine benutzerdefinierte Funktion, die die Steuerung der LED-Helligkeit vereinfacht. Der Code basiert auf einer benutzerdefinierten Funktion namens pwmValue(), die der Schlüssel zur intuitiven Gestaltung des Codes ist.
Lass uns die konfigurierbaren Teile des Codes aufschlüsseln:
int LEDpin = 3; //definiert Pin für LED
Diese Zeile definiert den Arduino-Pin, an den die LED angeschlossen ist. Du kannst die Zahl 3 in jeden anderen PWM-fähigen Pin auf deinem Arduino-Board ändern.
Der Kern des Projekts ist die benutzerdefinierte Funktion pwmValue(). Diese Funktion nimmt einen Prozentwert als Eingabe und wandelt ihn in den 0–255-Bereich um, der von analogWrite() verwendet wird. Hier erledigt die map()-Funktion ihre Magie.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Um diese Funktion zu verwenden, rufst du sie einfach mit deinem gewünschten Helligkeitsprozentwert auf. Die Funktion gibt den korrekten Wert für analogWrite() zurück. Zum Beispiel gibt pwmValue(60) den Wert 153 zurück, was 60 % von 255 entspricht. Die Funktion enthält auch eine Sicherheitsprüfung, um sicherzustellen, dass der Eingabeprozentwert zwischen 0 und 100 liegt, und gibt 0 zurück, wenn er außerhalb dieses Bereichs liegt.
In der setup()-Funktion siehst du, wie dies verwendet wird:
int b=5;//60% Helligkeit
Serial.println( pwmValue(b) );//auf seriellem Monitor ausgeben
analogWrite(LEDpin, pwmValue(b));// LED mit 60% Helligkeit einschalten
Hier wird die Variable b auf deinen gewünschten Helligkeitsprozentwert gesetzt. Die Funktion pwmValue(b) wird dann verwendet, um sowohl den gemappten Wert auf dem seriellen Monitor auszugeben als auch die Helligkeit der LED einzustellen. Um die Helligkeit der LED zu ändern, musst du nur den Wert von b ändern. Die map()-Funktion übernimmt alle notwendigen Berechnungen für dich.
Live-Projekt/Demonstration
Im Video demonstriert der Präsentator das Projekt, indem er den Wert der Variablen b ändert und den Code auf den Arduino hochlädt. Wenn b auf 60 gesetzt ist, mappt der Code dies auf 153 und die LED leuchtet mit 60 % Helligkeit. Wenn b auf 90 geändert wird, wird dies auf 229 gemappt, wodurch die LED deutlich heller wird. Wenn es auf 100 gesetzt wird, wird dies auf 255 gemappt, was die maximale Helligkeit ist. Die Demonstration zeigt deutlich, wie die map()-Funktion es dir ermöglicht, die LED mit einem intuitiven Prozentwert zu steuern, während der serielle Monitor den genauen 0–255-Wert bestätigt, der an den Pin gesendet wird (im Video bei 21:29).
Verwandte Projekte aus diesem Video
- Lektion 14/31-1: Arduino Millis (ohne Verzögerung) und map-Funktionen | SunFounder Robojax
- Lektion 14/31-2: Arduino-Codierung millis() Beispiel 2 mit Ereignis
- Lektion 14/31-3: Arduino-Codierung millis() Beispiel 3 mit Druckknopf
- Lektion 14/31-4: Arduino-Codierung map() Beispiel 1
Kapitel
- [00:00] Einführung in Millis- und map-Funktionen
- [01:19] Was ist Millis und warum es verwenden
- [05:46] Verwendung von Millis mit einem Ereignis, um eine Aktion auszuführen
- [08:35] Millis-Beispiel 2 mit einem Druckknopf
- [12:14] Millis-Beispiel 3: Überprüfung auf zwei Tastendrücke
- [17:20] Einführung in die map()-Funktion
- [19:47] Codebeispiel zum Mappen eines Prozentsatzes auf LED-Helligkeit
- [20:47] Live-Demonstration der map()-Funktion
- [22:41] Erstellen einer benutzerdefinierten Funktion zur Handhabung des Mappings
/*
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
Dinge, die Sie vielleicht brauchen
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Andere
Ressourcen & Referenzen
-
ExternKaufe das 3-in-1 Smart Car Lernkit von SunFounder.sunfounder.com
Dateien📁
|||Benutzerhandbuch
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB