Szukaj kodu

Lekcja 14/31-5: Przykład 2 mapowania() w kodzie Arduino

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.

Zmontowany samochód Sunfounder

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

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

Obrazy

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

Zasoby i odniesienia

Pliki📁

Instrukcja obsługi