Arduino:Примеры/CircularLightBuffer
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Анимированный «значок загрузки» из светодиодов [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);
}