Как зажигать определённые светодиоды на матрице 8x8 ?

Arduinshik
Offline
Зарегистрирован: 11.12.2016

Здравствуйте, решил заняться програмирование светодиодной матрицы 8x8 на max7219.

Скетч нашёл но сталкнулся с такой проблемой. Не смог найти таблицы или чего-то подобного чтобы понять какие значения отвечают за светодиоды.Шестнадцатиричная система. Может у кого-то есть значения или знает и может суда скинуть? буду благодарин.

 

вот скетч - 

define Din 2
#define Load 3
#define Clk 4
 
char data[][8]=
  {  {0x00,0x00,0xFF,0x81,0x81,0xFF,0x00,0x00}, //0- 0
     {0x00,0x00,0x00,0x20,0x40,0xFF,0x00,0x00}, //1-1
     {0x00,0x00,0xCF,0x89,0x89,0xF9,0x00,0x00}, //2- 2
     {0x00,0x00,0x91,0x91,0x91,0xFF,0x00,0x00}, //3- 3
     {0x00,0x00,0xF8,0x08,0x08,0xFF,0x00,0x00}, //4- 4
     {0x00,0x00,0xF1,0x91,0x91,0x9F,0x00,0x00}, //5- 5
     {0x00,0x00,0xFF,0x91,0x91,0x9F,0x00,0x00}, //6- 6
     {0x00,0x00,0x80,0x80,0x80,0xFF,0x00,0x00}, //7- 7
     {0x00,0x00,0xFF,0x91,0x91,0xFF,0x00,0x00}, //8- 8
     {0x00,0x00,0xF1,0x91,0x91,0xFF,0x00,0x00}, // 9-9
     {0x20,0x40,0xFF,0x00,0xFF,0x81,0x81,0xFF}, // 10-10
     {0x20,0x40,0xFF,0x00,0xFF,0x81,0x81,0xFF}, // 10-10
    {0x3C,0x42,0x81,0x99,0x99,0x81,0x42,0x3C}, // 11 -  ГЛАЗ центр.
    {0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}, //12 - закрыт
    {0x3C,0x42,0xB1,0xB1,0x81,0x81,0x42,0x3C}, //13 - ВЕРХ левый угол.
    {0x3C,0x42,0x81,0x8D,0x8D,0x81,0x42,0x3C}, //14 - ВНИЗ средне.
    {0x3C,0x42,0x81,0x81,0x8D,0x8D,0x42,0x3C}, // 15 - ВНИЗ направо
    {0x3C,0x42,0x81,0x81,0xB1,0xB1,0x42,0x3C}, // 16 - ВЕРХ направо угол
    {0x3C,0x42,0x81,0xB1,0xB1,0x81,0x42,0x3C}, // 17 - ВЕРХ средне
    {0x3C,0x42,0x81,0xE1,0xE1,0x81,0x42,0x3C},  // 18 - ВЕРХ высоко
    {0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C},  //19 - НИЖНИЕ моргание.
    {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30}, // 20 - ВЕРХ МОРГАНИЕ.
 
 
    {0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF}, // 21-КВАДРАТ
    {0xFF,0x81,0x81,0x99,0x99,0x81,0x81,0xFF}, // 22-КВАДРАТНЫЙ ГЛАЗ
    {0xAA,0x80,0x01,0x80,0x01,0x80,0x01,0x55}, // 23 БЕГУЩИЙ ОГОНЯ ПОЛОЖЕНИЕ-1
    {0x55,0x01,0x80,0x01,0x80,0x01,0x80,0xAA}, // 24 БЕГУЩИЙ ОГОНЯ ПОЛОЖЕНИЕ-2
 
    {0x18,0x3C,0x3C,0x24,0x24,0x24,0x24,0x18}, // 25 -УЗКИЙ ГЛАЗ ЛЕВО.
    {0x18,0x24,0x24,0x3C,0x3C,0x24,0x24,0x18}, // 26 -УЗКИЙ ГЛАЗ.
    {0x18,0x24,0x24,0x24,0x24,0x3C,0x3C,0x18}, // 27 -УЗКИЙ ГЛАЗПРАВО.
 
    {0x18,0x3C,0x24,0x24,0x24,0x24,0x24,0x18}, // 28 -УЗКИЙ ГЛАЗ ЛЕВО ЛЕВЕЕ.
    {0x18,0x24,0x24,0x24,0x24,0x24,0x3C,0x18}, // 29 -УЗКИЙ ГЛАЗПРАВО ПРАВЕЕ.
  
    {0x0A,0x05,0x05,0x07,0x07,0x05,0x05,0x0A}, // 30 -УЗКИЙ ГЛАЗ В НИЗУ.
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} // 31
 
 
 };
 void setup() {
  pinMode(Din, OUTPUT);
  pinMode(Load, OUTPUT);
  pinMode(Clk, OUTPUT);
   //Устанавливаем Decode Mode, Intensity, Scan Limit, Shutdown и Display Test, но сначала
  digitalWrite (Clk, 0);  //первый такт устанавливаем в 0, чтобы точно знать, что он в 0
   // настраиваем
  Data16sent(0x09,0x00);  //Decode Mode - без декодирования.
  Data16sent(0x0A,0x08);  //Intensity - среднее свечение 17 из 32 см.таблицу
  Data16sent(0x0B,0x07);  //Scan Limit - Используем все 8 катодов.
  Data16sent(0x0C,0x01);  //используем режим Shutdown в Normal Mode.
  Data16sent(0x0F,0x00);  //Display Test - Normal Mode.
 }
 void loop(){
  
  FlashNow(0);
  delay(1000);
  FlashNow(3);
  delay(400);
  FlashNow(0);
  delay(900);
  FlashNow(1);
  delay(90);
  FlashNow(0);
  delay(800);
  FlashNow(2);
  delay(200);
  FlashNow(0);
  delay(1000);
  FlashNow(1);
  delay(120);
  FlashNow(0);
  delay(800);
  FlashNow(4);
  delay(200);
  FlashNow(5);
  delay(200);
  FlashNow(0);
  delay(350);
  FlashNow(1);
  delay(100);
  FlashNow(0);
  delay(150);
  FlashNow(1);
  delay(100);
  FlashNow(0);
  delay(1000);
}
 void FlashNow(int sost){            //Функция. Зажигает номер комбинации - положения ГЛАЗА из двумерного массива data[][]
 
  for(int i=0;i<8;i++){              //заполняет 8 столбцов матрицы
   char temp='0x0'+(i+1);            //готовим столбец-катод №1(меняется только последняя цифра,начинаем с 1, поэтому i+1)
   Data16sent(temp,data[sost][i]);   //зажигаем один i-ый солбец-катод в соответствии с данными массива data[][]
  }
 }
 void Data16sent (char adress, char data ){    //Функция. Принимает 8 бит адреса и 8 бит данных,
                                               //отправляет и защёлкивает 16 бит посылку в MAX7219
   digitalWrite(Load, 0);
   shiftOut(Din, Clk, MSBFIRST, adress);       //первым уходит старший байт
   shiftOut(Din, Clk, MSBFIRST, data);         //вторым младший
   digitalWrite(Load, 1);
 }
T.Rook
Offline
Зарегистрирован: 05.03.2016

Судя по Вашему коду (кстати не поленитесь, найдите как правильно вставлять код в сообщение - почитайте прикрепленный сверху пост), каждый столбик - байт: верхняя точка старший бит, нижняя точка младший бит.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

в библиотеке LedControl есть команда

led.setLed(2, 2, 1, true) ;//управление каждым  ЛЕД отдельно,true-вкл,false-выкл
led.setLed(2, 2, 2, false) ;//управление каждым  ЛЕД отдельно

 

leks
Offline
Зарегистрирован: 22.10.2017

http://arduino.on.kg/rabotaem-s-bibliotekoy-LedControl---razbor-funkciy-i-primery-primeneniya

Вот подробно и доступно про работу этой библиотеки.