Arduino:Примеры/BasicUse

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Базовое использование[1]

Это скетч для библиотеки TLC5940 и платы Arduino, который демонстрирует, как при помощи одного или нескольких чипов TLC5940 показать на светодиодах анимацию из сериала «Рыцарь дорог».

Код

/*
   
Базовое использование

Настройка контактов:
------------                         ---u---
ARDUINO 13|-> SCLK (конт. 25)  OUT1 |1    28| 0-ой вых. канал
        12|                    OUT2 |2    27|-> GND (VPRG)
        11|-> SIN (конт. 26)   OUT3 |3    26|-> SIN (конт. 11)
        10|-> BLANK (конт. 23) OUT4 |4    25|-> SCLK (конт. 13)
         9|-> XLAT (конт. 24)    .  |5    24|-> XLAT (конт. 9)
         8|                      .  |6    23|-> BLANK (конт. 10)
         7|                      .  |7    22|-> GND
         6|                      .  |8    21|-> VCC (+5V)
         5|                      .  |9    20|-> резистор (2 кОм) -> GND
         4|                      .  |10   19|-> +5V (DCPRG)
         3|-> GSCLK (конт. 18)   .  |11   18|-> GSCLK (конт. 3)
         2|                      .  |12   17|-> SOUT
         1|                      .  |13   16|-> XERR
         0|                   OUT14 |14   15| 15-ый вых. канал
----------                           -------
    
-  Подключите длинные ножки (аноды) светодиодов к +5V, 
   а короткие к (катоды) к OUT (0-15).
-  +5V на Arduino   -> конт. 21 и 19 (TLC)   (VCC и DCPRG)
-  GND на Arduino   -> конт. 22 и 27 (TLC)   (GND и VPRG)
-  3-ий цифр.конт.  -> конт. 18 (TLC)        (GSCLK)
-  9-ий цифр.конт.  -> конт. 24 (TLC)        (XLAT)
-  10-ий цифр.конт. -> конт. 23 (TLC)        (BLANK)
-  11-ий цифр.конт. -> конт. 26 (TLC)        (SIN)
-  13-ий цифр.конт. -> конт. 25 (TLC)        (SCLK)
-  Резистор на 2 кОм между 20-ым контактом TLC и GND позволит, 
   чтобы через каждый светодиод проходило примерно 20 мА. 
   Если еще точнее, то это ток рассчитывается 
   по формуле I = 39.06 / R (в омах). То есть этот показатель 
   не зависит от напряжения, управляющего светодиодом.
- (Опционально): Подключите подтягивающий резистор 
  (примерно на 10 кОм) между +5V и BLANK, чтобы 
   при сбросе Arduino все светодиоды выключались.

  Если вы гирляндно подключили к цепи больше одного TLC,
  подключите SOUT первого TLC к SIN следующего. Все остальные
  контакты должны быть подключены вместе:
        
  BLANK на Arduino -> BLANK на TLC1 -> BLANK на TLC2 -> ...
  XLAT на Arduino  -> XLAT на TLC1  -> XLAT на TLC2  -> ...

  Но есть одно исключение – каждому TLC нужен резистор между
  20-ым контактом и GND. 

  Эта библиотека использует ШИМ, которая генерируется на 3-ем, 
  9-ом, 10-ом и 11-ом контактах Arduino. Не используйте 
  на этих контактах функцию analogWrite(...). 
 
  Этот скетч делает на светодиодах анимацию из «Рыцаря дорог».

  Создан 2009-02-03 Алексом Леоне (Alex Leone; acleone ~AT~ gmail.com)

*/

#include "Tlc5940.h"

void setup()
{
  /* 
    Вызываем функцию Tlc.init(), чтобы инициализировать TLC.
    Опционально можно задать начальное значение ШИМ (0 – 4095),  
    которое будет использоваться на всех каналах. 
  */
  Tlc.init();
}

  /* 
    Если к выходным контактам TLC подключены светодиоды, то этот цикл 
    выполнит на них анимацию из «Рыцаря дорог». Значение NUM_TLC
    задано в файле «tlc_config.h», который находится 
    в папке библиотеки. Отредактировав «tlc_config.h», удалите
    файл «Tlc5940.o», чтобы сохранить изменения.
  */

void loop()
{
  int direction = 1;
  for (int channel = 0; channel < NUM_TLCS * 16; channel += direction) {

  /* 
    Функция Tlc.clear() сбрасывает все значения, отвечающие за оттенки 
    черного и белого, на ноль, но не отправляет их на TLC. 
    Чтобы отправить эти данные, используйте Tlc.update() 
  */
    Tlc.clear();

  /* 
    Функция Tlc.set(channel (0-15), value (0-4095)) задает 
    монохромное значение для одного канала («15» - это 15-ый выходной
    контакт на первом TLC; если к цепи подключено несколько TLC,
    то «16» - это 0-ый выходной контакт на втором TLC и т.д.).

    Значения варьируются от «выкл» (0) до «вкл» (4095). 

    Как и Tlc.clear(), эта функция только задает значения, но не 
    отправляет их на TLC. За это отвечает Tlc.update().
  */
    if (channel == 0) {
      direction = 1;
    } else {
      Tlc.set(channel - 1, 1000);
    }
    Tlc.set(channel, 4095);
    if (channel != NUM_TLCS * 16 - 1) {
      Tlc.set(channel + 1, 1000);
    } else {
      direction = -1;
    }

   /* 
    Функция Tlc.update() отправляет данные на TLC. Именно после
    этого, собственно, и меняется значение на светодиоде.
   */
    Tlc.update();

    delay(75);
  }

}

См.также

Внешние ссылки