Arduino:Примеры/CircularLightBuffer

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

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


Анимированный «значок загрузки» из светодиодов [1]

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

Код

/*

Анимированный «значок загрузки» из светодиодов.

Если вы как-то умудрились сделать круг из светодиодов, 
обязательно вышлите фотографию! Этот скетч считывает 
аналоговые данные с 0-ого аналогового контакта и добавляет 
к нему значение, считанное с последнего светодиода. Если 
итоговая сумма получается выше «4095», то светодиод выключается,
а если меньше, то итоговая сумма становится значением для LED 0.

Если заземлить 12-ый контакт, значение на LED 0 будет «0».

После этого скетч сдвигает все значения на светодиодах 
на одну единицу вперед (в итоге LED 0 становится LED 1 и т.д.), 
а LED 0 получает значение, которое было на последнем светодиоде.
Таким образом, если включен только один светодиод, он будет 
бегать по кругу вечно.

Настройки оборудования смотрите в примере «Базовое использование».
Создан 2009-02-04 Алексом Леоне (Alex Leone; acleone ~AT~ gmail.com).

*/

#include "Tlc5940.h"
#include "tlc_shifts.h"

// какой аналоговый контакт будем использовать:
#define ANALOG_PIN      0

// какой контакт будет стирать значения на светодиодах:
#define CLEAR_PIN      12

// сколько секунд потребуется на полный круг по всем светодиодам:
#define SCOPE_PERIOD    (2000 * NUM_TLCS)
#define LED_PERIOD      SCOPE_PERIOD / (NUM_TLCS * 16)

void setup()
{
  pinMode(CLEAR_PIN, INPUT);
  digitalWrite(CLEAR_PIN, HIGH); // включаем подтягивающий резистор
  Tlc.init();
}

void loop()
{
 // функция tlc_shiftUp() возвращает значение с последнего светодиода:
  uint16_t sum = tlc_shiftUp() + analogRead(ANALOG_PIN) * 4;
  if (digitalRead(CLEAR_PIN) == LOW || sum > 4095)
    sum = 0;
  Tlc.set(0, sum);
  Tlc.update();
  delay(LED_PERIOD);
}

См.также

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