Lekcja 14/31-5: Przykład 2 mapowania() w kodzie Arduino
Ten poradnik pokazuje, jak używać funkcji map() Arduino do sterowania jasnością diody LED za pomocą wartości procentowej (0–100%) zamiast surowego zakresu 0–255 wymaganego przez analogWrite(). Jest to podstawowa technika, która upraszcza kod i czyni go znacznie bardziej intuicyjnym, ponieważ możesz myśleć w kategoriach procentów, a nie arbitralnych wartości bajtowych.
Ta umiejętność jest niezbędna w każdym projekcie, w którym trzeba skalować odczyty czujników lub sygnały sterujące. Na przykład można jej użyć do:
- Sterowania jasnością diody LED lub prędkością silnika na podstawie odczytu potencjometru.
- Konwersji wyjścia czujnika temperatury (np. 0–1023) na zakres w stopniach Celsjusza lub Fahrenheita.
- Mapowania wejścia analogowego joysticka do sterowania pozycją serwomechanizmu.
- Tworzenia prostego interfejsu użytkownika, w którym wartość procentowa służy do ustawiania poziomu mocy urządzenia.
Po ukończeniu tej lekcji będziesz w stanie pisać czystszy, łatwiejszy w utrzymaniu kod, który jest prostszy do odczytania i modyfikacji.
Sprzęt/Komponenty
Ten projekt wykorzystuje minimalny zestaw komponentów, co czyni go idealnym dla początkujących. Będziesz potrzebować:
- Płytki Arduino (np. Uno).
- Diody LED.
- Rezystora 220 omów.
- Przewodów połączeniowych.
- Płytki stykowej (opcjonalnie, ale zalecane).
Schemat połączeń
Okablowanie dla tego projektu jest bardzo proste, jak pokazano na filmie (na filmie w 20:47). Dioda LED jest podłączona do pinu 3 Arduino przez rezystor ograniczający prąd o wartości 220 omów.
Podłącz anodę (dłuższą nóżkę) diody LED do pinu 3 przez rezystor. Podłącz katodę (krótszą nóżkę) diody LED do pinu masy (GND) na Arduino.
Wyjaśnienie kodu
Ten przykład koncentruje się na funkcji zdefiniowanej przez użytkownika, która upraszcza sterowanie jasnością diody LED. Kod jest zbudowany wokół niestandardowej funkcji o nazwie pwmValue(), która jest kluczem do uczynienia kodu intuicyjnym.
Rozłóżmy konfigurowalne części kodu:
int LEDpin = 3; //definiuje pin dla diody LED
Ta linia definiuje pin Arduino, do którego podłączona jest dioda LED. Możesz zmienić liczbę 3 na dowolny inny pin z obsługą PWM na swojej płycie Arduino.
Rdzeniem projektu jest niestandardowa funkcja pwmValue(). Funkcja ta przyjmuje wartość procentową jako dane wejściowe i konwertuje ją na zakres 0–255 używany przez analogWrite(). To tutaj funkcja map() działa swoją magię.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Aby użyć tej funkcji, wystarczy wywołać ją z pożądaną wartością procentową jasności. Funkcja zwróci poprawną wartość dla analogWrite(). Na przykład pwmValue(60) zwróci 153, co odpowiada 60% z 255. Funkcja zawiera również kontrolę bezpieczeństwa, aby upewnić się, że procent wejściowy mieści się w zakresie od 0 do 100, zwracając 0, jeśli jest poza tym zakresem.
W funkcji setup() można zobaczyć, jak to jest używane:
int b=5;//60% jasności
Serial.println( pwmValue(b) );//wypisz to na monitorze szeregowym
analogWrite(LEDpin, pwmValue(b));// włącz diodę LED z 60% jasnością
Tutaj zmienna b jest ustawiona na pożądaną wartość procentową jasności. Funkcja pwmValue(b) jest następnie używana zarówno do wydrukowania zmapowanej wartości na monitorze szeregowym, jak i do ustawienia jasności diody LED. Aby zmienić jasność diody LED, wystarczy zmodyfikować wartość b. Funkcja map() wykonuje za Ciebie wszystkie niezbędne obliczenia.
Projekt na żywo/Demonstracja
Na filmie prezenter demonstruje projekt, zmieniając wartość zmiennej b i przesyłając kod do Arduino. Gdy b jest ustawione na 60, kod mapuje je na 153 i dioda LED świeci z 60% jasnością. Zmiana b na 90 mapuje na 229, czyniąc diodę LED zauważalnie jaśniejszą. Ustawienie na 100 mapuje na 255, co jest maksymalną jasnością. Demonstracja wyraźnie pokazuje, jak funkcja map() pozwala sterować diodą LED za pomocą intuicyjnej wartości procentowej, podczas gdy monitor szeregowy potwierdza dokładną wartość 0–255 wysyłaną do pinu (na filmie w 21:29).
Powiązane projekty z tego filmu
- Lekcja 14/31-1: Arduino Millis (bez opóźnienia) i funkcje map | SunFounder Robojax
- Lekcja 14/31-2: Arduino kodowanie millis() przykład 2 ze zdarzeniem
- Lekcja 14/31-3: Arduino kodowanie millis() przykład 3 z przyciskiem
- Lekcja 14/31-4: Arduino kodowanie map() przykład 1
Rozdziały
- [00:00] Wprowadzenie do funkcji Millis i map
- [01:19] Co to jest Millis i dlaczego go używać
- [05:46] Używanie Millis ze zdarzeniem do podjęcia działania
- [08:35] Millis przykład 2 z przyciskiem
- [12:14] Millis przykład 3 sprawdzanie dwóch naciśnięć przycisku
- [17:20] Wprowadzenie do funkcji map()
- [19:47] Przykład kodu mapowania procentu na jasność diody LED
- [20:47] Demonstracja na żywo funkcji map()
- [22:41] Tworzenie niestandardowej funkcji do obsługi mapowania
/*
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
Rzeczy, których możesz potrzebować
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Inny
Zasoby i odniesienia
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Instrukcja obsługi
-
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