Управління яскравістю світлодірда ШІМ способом - Маяк 2

Способи підключення світлодіодів, біжучих вогнів, світлодіодних панелей та індикаторів, гирдлянди, світлодіодні стрічки та керування ними. Дисплеї та цифрові сегментні індикатори
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Управління яскравістю світлодірда ШІМ способом - Маяк 2

Повідомлення Arduino » 24 травня 2017 11:19

За конструкцією світлодіод може або світитися або ні. Однак існує спосіб, коли можна регулювати яскравість подаючи на світлодіод не просто напругу, а напругу у вигляді імпульсів з різними параметрами трвалості імпульсів. Такий метод називається Широтно-імпульсна модуляція.
l2-majachok-sjarkostju.jpg
Не всі виводи контролера Ардуіно підтримують ШІМ! Для Arduino Uno це Піни 3, 5, 6, 9, 10, 11. Вони позначені "~"
// даємо розумне ім'я для Піна №9 зі світлодіодом
// (англ. Light Emitting Diode або просто «LED»)
// Так нам не потрібно постійно згадувати куди він підключений
#define LED_PIN 9

void setup ( )
{
// налаштовуємо пін з світлодіодом в режим виходу,
// як і раніше
pinMode ( LED_PIN, OUTPUT ) ;
}

void loop ( )
{
// видаємо неповне напругу на світлодіод
// (він же ШІМ-сигнал, він же PWM-сигнал).
// Микроконтроллер переводить число від 0 до 255 до напруги
// від 0 до 5 В. Наприклад, 85 - це 1/3 від 255,
// тобто 1/3 від 5 В, тобто 1,66 В.
analogWrite ( LED_PIN, 85 ) ;
// тримаємо таку яскравість 250 мілісекунд
delay ( 250 ) ;

// видаємо 170, тобто 2/3 від 255, або іншими словами - 3,33 В.
// Більше напруга - вище яскравість!
analogWrite ( LED_PIN, 170 ) ;
delay ( 250 ) ;

// всі 5 В - повне розжарення!
analogWrite ( LED_PIN, 255 ) ;
// чекаємо ще трохи перед тим, як почати все заново
delay ( 250 ) ;
}
Пояснення до коду з ШІМ регулюванням
  • Ідентифікатори змінних, констант, функцій (в цьому прикладі ідентифікатор LED_PIN) є одним словом (тобто не можна створити ідентифікатор LED PIN).
  • Ідентифікатори можуть містити лише латинські літери, цифри та символи підкреслення _. При цьому ідентифікатор не може починатися з цифри.
PRINT // вірно
PRINT_3D // вірно
MY_PRINT_3D // вірно
_PRINT_3D // вірно
3D_PRINT // помилка
ПЕЧАТЬ_3Д // помилка
PRINT : 3D // помилка
  • Регістр букв в ідентифікатор має значення. Тобто LED_PIN, LED_pin і led_pin з точки зору компілятора - різні ідентифікатори
Ідентифікатори, створювані користувачем, не повинні збігатися з зумовленими ідентифікаторами і стандартними конструкціями мови; якщо середовище розробки підсвітила введений ідентіфіктор будь-яким кольором, замініть його на інший
  • Директива #define просто говорить компілятору замінити всі входження заданого ідентифікатора на значення, задане після пробілу (тут 9), ці директиви поміщають в початок коду. В кінці даної директиви крапка з комою ; не припустима
  • Назви ідентифікаторів завжди потрібно робити осмисленими, щоб при поверненні до раніше написаному коду вам було ясно, навіщо потрібен кожен з них
  • Також корисно оздоблювати код програми коментарями: в прикладах ми бачимо однорядкові коментарі, які починаються з двох прямих Слеш //і багаторядкові, обмежені між /* */
    // однорядковий коментар слід після подвійного слеша до кінця рядка
    / * багатостроковий коментар
    поміщається між парою слеш-зірочка і зірочка-слеш * /
    коментарі ігноруються компілятором, зате корисні людям при читанні давно написаного, а особливо чужого, коду
  • Функція analogWrite(pin, value)не повертає ніякого значення і приймає два параметри:
    • pin - номер порту, на який ми відправляємо сигнал
    • value- значення скважности ШІМ , яке ми відправляємо на порт. Він може приймати цілочисельне значення від 0 до 255, де 0 - це 0%, а 255 - це 100%

Відповісти

Повернутись до “Індикація та LED, дисплеї”