четверг, 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
Спасибо

6 комментариев:

  1. Отличный у вас блог. Все доходчиво написано. Собираюсь увлечься Arduino. Пока не знаю что из этого выйдет. Вот эта статья мне нравится больше всего, потому что хочу сделать самостоятельно часы на базе Arduino, а дальше уже усложнять конструкцию. Но я уже не испытываю никаких заблуждений и считаю, что Arduino станет для меня просто развлечением.

    ОтветитьУдалить
  2. Спасибо за ваш комментарий. Приятно знать что моя писанина не напрасна. Придется дописать эту тему, тем более не за горами очередной новый год :)

    ОтветитьУдалить
  3. Как быть у меня вот такая проблемка http://www.youtube.com/watch?v=Vwi4N7n21jY буква должна бегать с лева на права как бегущая строка а она скачет с матрицы на матрицу ?

    ОтветитьУдалить
  4. Надо посмотреть ваш скетч.
    Самое простое развернуть матрицы. Но похоже, что в вашем случае это физически не возможно.
    Придется спрайт буквы А расписывать не слева-направо, а сверху-вниз
    byte CH_A[] = {8, 8, B00010000, B00101000, B01000100, B10000010, B10000010, B11111110, B10000010, B10000010};
    И вместо m.shiftRight(true) сдвигать m.shiftDown(true)
    Как-то так

    ОтветитьУдалить
  5. Спасибо за статью ,недавно спаял етот модуль не знал чо делать , статья помогла .

    ОтветитьУдалить
  6. Спасибо огромное автору - очень понятно, доступно, а главное оригинально и красиво. Статья очень помогла разобраться и сделать программку, которая теперь сама генерирует спрайт для матрицы 16х16 по нарисованной картинке

    ОтветитьУдалить