четверг, 5 декабря 2013 г.

Часть 3, Новогодняя гирлянда Matrix 8*8 LED + MAX7219 module

ЧАСТЬ ТРЕТЬЯ
Подключение модуля Matrix 8*8 LED + MAX7219

Время бежит. До нового года осталось менее месяца. Обещанная ребенку гирлянда "круче чем у всех" еще только в моей голове.
Для удобства настройки и отладки взял два модуля, состоящие из LED Matrix 8x8 и драйвера MAX7219


Фото с интернета имеет подвох. В модуле матрица вставлена не правильно.
Модуль имеет следующую схему:


 Два модуля подключаются так

Первый модуль правый. Второй левый.
Долгий подбор библиотеки подходящий для моих целей и вот промежуточный результат. Ссылка, если видео не работает


Для реализации данного способа подключения потребуется:
·        1 * ARDUINO (от 300 до 950 руб)
·        2 * Модуль MAX7219 Matrix 8*8 (200 руб)
·        1 * перемычка МАМА-МАМА (2.50 руб за 1 шт)
·        8 * перемычка ПАПА-ПАПА (100 руб за набор из 32 штук)

Цены взяты с сайта МОЛОТОК.РУ
       
        Собираем схему, для простоты накидал схемку от руки которая соответствует фото, видео и скетчу.




Библиотека MaxMatrix.
Основные функции которые я использовал:

MaxMatrix m(dataIn, load, clock, maxInUse);
m.Init();
Описание подключения и количество модулей

m.setIntensity(value)
Яркость 0-15, где 15 максимум, а 0 тусклое свечение (как на видео)

m.writeSprite(x, y, sprite)
Печать спрайта (картинки, которая описана в программе) с позиции x,y. Значение 0,0 верхний левый угол на фото, можно печатать за пределами матрицы. Например, берем спрайт (картинку) размером 32 на 8 точек печатаем ее с позиции -16,0 в этом случае мы увидим только правую половинку спрайта. А сдвинув его 16 раз в право (см.ниже) увидим левую половину

m.shiftLeft(true);
Left, Right, Up, Down соответственно сдвиг напечатанного спрайта влево, вправо, вверх, вниз на один пиксель. С параметром false подтирается хвост. С параметром true при сдвиге вправо левая колонка спрайта будет оставаться на матрице. Если в этой колонке есть пиксели, они составят хвост 

byte CH_A[] = {4, 8, B11111110, B00010001, B00010001, B11111110 };
Для примера описание спрайта размером в высоту 8, в ширину 4.
На спрайте изображена буква А
 ** 
*  *
*  *
*  *
***
*  *
*  *
*  *
m.writeSprite(0, 0, CH_A);
Печатаем его в позиции 0,0 и получаем результат

На основе этого собираюсь спаять гирлянду на окно. Уже купил 128 светодиодов, 4 метра кабеля (4 витых пары) и 3 м термоусадочной трубки диаметром 3мм (хотел 2мм, но не нашел)

Скетч из видео. 

ALEN Studio by Little_Red_Rat
// http://littleredrat.blogspot.ru/

#include <MaxMatrix.h>

// создаем спрайт снежинки
byte snowstar[] = {
  9, 8, B00000000, B01001001, B00101010, B00010100, B01101011, B00010100, B00101010, B01001001, B00000000};
// создаем снегопада
byte snow[] = {
  16,  8, B10000010, B00000001, B10000010, B00100000, B01110000, B00100001, B10000011, B00101001, B00010000, B00101000, B10000000,0B11000001, B10000000, B00000100, B00001110, B00000100};

// описание подключения
// DIN к 8
// CS к 9
// CLK к 10
// 2 модуля
MaxMatrix m(8, 9, 10, 2);

void setup(){
  m.init();
  m.setIntensity(0); // яркость 0 из 15
}

void loop(){

  // двигаем снежинку из-за левой границы за правую через цикл
  for (int i=-8; i<16; i++)
  {
    delay(100);
    m.writeSprite(i, 0, snowstar);
  }

  delay(100); // пауза
  // печатаем снегопад в 6 этажей
  m.writeSprite(0, 0, snow);
  m.writeSprite(0, -8, snow);
  m.writeSprite(0, -16, snow);
  m.writeSprite(0, -24, snow);
  m.writeSprite(0, -32, snow);
  m.writeSprite(0, -40, snow);

  // снегопад ... УРА !
  for (int i=0; i<32; i++)
  {
    m.shiftDown(true);
    delay(100);
  }
  // ветер сдувает снежинки, красота !
  for (int i=0; i<16; i++)
  {
    m.shiftLeft(false);
    delay(100);
  }
  delay(2000);

}

Кто-нибудь, подскажите пожалуйста, как правильно скетч вставить !!! А то как-то не красиво :(

Гирлянда часть первая
Гирлянда часть вторая

Большая просьба к любителям перепечаток, указывать автора Little_Red_Rat
Спасибо