Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/CircularLightBuffer

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

Код

  1. /*
  2.  
  3. Анимированный «значок загрузки» из светодиодов.
  4.  
  5. Если вы как-то умудрились сделать круг из светодиодов, 
  6. обязательно вышлите фотографию! Этот скетч считывает 
  7. аналоговые данные с 0-ого аналогового контакта и добавляет 
  8. к нему значение, считанное с последнего светодиода. Если 
  9. итоговая сумма получается выше «4095», то светодиод выключается,
  10. а если меньше, то итоговая сумма становится значением для LED 0.
  11.  
  12. Если заземлить 12-ый контакт, значение на LED 0 будет «0».
  13.  
  14. После этого скетч сдвигает все значения на светодиодах 
  15. на одну единицу вперед (в итоге LED 0 становится LED 1 и т.д.), 
  16. а LED 0 получает значение, которое было на последнем светодиоде.
  17. Таким образом, если включен только один светодиод, он будет 
  18. бегать по кругу вечно.
  19.  
  20. Настройки оборудования смотрите в примере «Базовое использование».
  21. Создан 2009-02-04 Алексом Леоне (Alex Leone; acleone ~AT~ gmail.com).
  22.  
  23. */
  24.  
  25. #include "Tlc5940.h"
  26. #include "tlc_shifts.h"
  27.  
  28. // какой аналоговый контакт будем использовать:
  29. #define ANALOG_PIN      0
  30.  
  31. // какой контакт будет стирать значения на светодиодах:
  32. #define CLEAR_PIN      12
  33.  
  34. // сколько секунд потребуется на полный круг по всем светодиодам:
  35. #define SCOPE_PERIOD    (2000 * NUM_TLCS)
  36. #define LED_PERIOD      SCOPE_PERIOD / (NUM_TLCS * 16)
  37.  
  38. void setup()
  39. {
  40.   pinMode(CLEAR_PIN, INPUT);
  41.   digitalWrite(CLEAR_PIN, HIGH); // включаем подтягивающий резистор
  42.   Tlc.init();
  43. }
  44.  
  45. void loop()
  46. {
  47.  // функция tlc_shiftUp() возвращает значение с последнего светодиода:
  48.   uint16_t sum = tlc_shiftUp() + analogRead(ANALOG_PIN) * 4;
  49.   if (digitalRead(CLEAR_PIN) == LOW || sum > 4095)
  50.     sum = 0;
  51.   Tlc.set(0, sum);
  52.   Tlc.update();
  53.   delay(LED_PERIOD);
  54. }

См.также

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

  1. github.com - CircularLightBuffer.pde