LED-матрица + MAX7219 + MaxMatrix.lib

vk007
Offline
Зарегистрирован: 16.06.2015

Там много чего не так.

46 строку нужно писать так:

LC.setColumn(i / 8, i % 8, 255 >> (8 - readMux(i)));

Если же считаете, что LC.setColumn более уместна в функции readMux() (как в коде из сообщения #141), то тогда уж ее там стоит записать так:

LC.setColumn(channel / 8, channel % 8, 255 >> (8 - val));

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

знаете я сейчас на стадии медведь на велосепеде который в страшных снах и видеть не мог это бесово колесо с едушкой , есть у меня товарщь , чтоб его черти на свороде жарили без масла , подсул мне эту штуковину типа ардуино две недели назад , паскуда , я все это время по два часа сплю , так что извените за мою тупость , я даже не совсем понимаю в данный момент последовательности вот усилино пытаюсь разобраться , а при мысли что еще и цыфры вывести еще в оморк падаю , да так бьюсь головой что клавиши с клавиатуры разлетаються , да еще и кот паскуда  зактывает их под холодильник пока обморчном состоянии , и вот как тут сосредочиться , ведь нормальные же мужики водку пью и по бабам ходят , да нет  ардуино сцуко 

vk007
Offline
Зарегистрирован: 16.06.2015

Может тогда стоило сначала помигать светодиодом, почитать что-нибудь, хотя бы справочник по языку http://arduino.ru/Reference . Он тут правда немного урезан, больше инфо есть тут https://www.arduino.cc/reference/en/ (на английском) или на русском, например, тут:

http://arduino.su/Reference

https://doc.arduino.ua/ru/prog/

http://wikihandbk.com/wiki/Arduino:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%...

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018
[code]
#define EN 3
#define S0 4
#define S1 5
#define S2 6
#define S3 7 
#define SIG A0
#include "LedControl.h"
LedControl LC = LedControl(12, 11, 10, 4); 
int val;
int i;
void setup(){
  Serial.begin(9600);
  
  LC.shutdown(0, false); //Активируем 0ю матрицу
  LC.shutdown(1, false); //Активируем 1ю матрицу
  LC.shutdown(2, false); //Активируем 2ю матрицу
  LC.shutdown(3, false); //Активируем 3ю матрицу
    
   LC.setIntensity(0, 8);
   LC.setIntensity(1, 8);
   LC.setIntensity(2, 8);
   LC.setIntensity(3, 8);
   LC.clearDisplay(0);
   
  pinMode(S0, OUTPUT); 
  pinMode(S1, OUTPUT); 
  pinMode(S2, OUTPUT); 
  pinMode(S3, OUTPUT);   

  digitalWrite(S0, LOW);
  digitalWrite(S1, LOW);
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);

  pinMode(EN, OUTPUT); 
  digitalWrite(EN, LOW);

  
}
 int dataarr[16]; // указываем размер массива в который будет слкадываться  значение с датчика 
 int pos = 0;    // массив обнуляеться 
    
void loop(){



   dataarr[pos++] = val;
   if(pos == 8) pos = 0; 
   
  for(int i = 0; i < 16; i ++){
  LC.setColumn(i / 8, i % 8, 255 >> (8 - readMux(i)));
  
 
  }
}


int readMux(int channel){
  int controlPin[] = {S0, S1, S2, S3};

  int muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  //loop through the 4 sig
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  int val = analogRead(SIG);
      val = map(val,0,700,0,8);
      val = constrain(val,0,8); 
      
  return val;
}
[/code]

а вот так нормально?

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

а в 49 строчке  if(pos == 8) pos = 0; разве if(pos == 16) должно быть ?

 

vk007
Offline
Зарегистрирован: 16.06.2015

Jenek_Anapa пишет:

а вот так нормально?

Нет. Куча лишнего и непонятного.

1) Строк 10, 11 не надо.

2) Зачем нужен массив dataarr[]? Вы туда пытаетесь (пока безуспешно) сохранять значения со входа. Вы планируете пользоваться этими значениями в будущем?

3) Замечания относительно constrain и map вы почему-то упорно игнорируете.

Продолжение следует...

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018
[code]
#define EN 3
#define S0 4
#define S1 5
#define S2 6
#define S3 7 
#define SIG A0
#include "LedControl.h"
LedControl LC = LedControl(12, 11, 10, 4); 

void setup(){
  Serial.begin(9600);
  
  LC.shutdown(0, false); //Активируем 0ю матрицу
  LC.shutdown(1, false); //Активируем 1ю матрицу
  LC.shutdown(2, false); //Активируем 2ю матрицу
  LC.shutdown(3, false); //Активируем 3ю матрицу
    
   LC.setIntensity(0, 8);
   LC.setIntensity(1, 8);
   LC.setIntensity(2, 8);
   LC.setIntensity(3, 8);
   LC.clearDisplay(0);
   
  pinMode(S0, OUTPUT); 
  pinMode(S1, OUTPUT); 
  pinMode(S2, OUTPUT); 
  pinMode(S3, OUTPUT);   

  digitalWrite(S0, LOW);
  digitalWrite(S1, LOW);
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);

  pinMode(EN, OUTPUT); 
  digitalWrite(EN, LOW);

  
}

 int pos = 0;    // массив обнуляеться 
    
void loop(){



 
   
  for(int i = 0; i < 16; i ++){
  LC.setColumn(i / 8, i % 8, 255 >> (8 - readMux(i)));   
                                                        //LC.setColumn(int address, int column, byte value);
                                                        //LC - объект класса LedControl
                                                        //int address - адрес устройства на базе драйвера MAX72xx
                                                        //int column - номер столбца(нумерация столбцов, как и строк, начинается с 0, заканчивается 7)
                                                        //byte value - переменная(тип данных byte), значение которой будет включать определённые светодиоды
                                                        // в столбце LED матрицы 8x8. Эта переменная может быть проинициализирована значением следующего формата,
                                                        // к примеру - B00000111, означающего, что B - это формат записи для двоичного представления числа и 
                                                        //8 значений состояния, для столбца из 8-ми светодиодов. Если какое-либо значение равно 1 то включить 
                                                        //светодиод, если же 0 то выключить. В данном примере, включатся 5-й, 6-й и 7-й светодиоды в столбце, 
                                                        //остальные останутся выключенными.
  
 
  }
}


int readMux(int channel){
  int controlPin[] = {S0, S1, S2, S3};

  int muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  //loop through the 4 sig
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  int val = analogRead(SIG);
      
      
  return val;
}
[/code]

 

что еще не так ?

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

vk007 пишет:

Jenek_Anapa пишет:

а вот так нормально?

Нет. Куча лишнего и непонятного.

1) Строк 10, 11 не надо.

2) Зачем нужен массив dataarr[]? Вы туда пытаетесь (пока безуспешно) сохранять значения со входа. Вы планируете пользоваться этими значениями в будущем?

3) Замечания относительно constrain и map вы почему-то упорно игнорируете.

Продолжение следует...

кстати мап и констреин как то привязоны я еще не разобрался но без них светомузыка начинаеться 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

вы и дальше будете читать через строчку?

http://arduino.ru/forum/programmirovanie/led-matritsa-max7219-maxmatrixl...

http://arduino.ru/forum/programmirovanie/led-matritsa-max7219-maxmatrixl...

вы это намеренно проигнорили?

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

и весь код себе переломали

толку от строк от 68 до 93 нет никакого - это просто незадействованный баласт

а на выход вы даете вообще с пина на прямую значение

vk007
Offline
Зарегистрирован: 16.06.2015

Попробуйте так:

#include "LedControl.h"

#define EN 3
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define SIG A0

LedControl LC = LedControl(12, 11, 10, 4);
byte channel;

void setup()
{
  Serial.begin(9600);

  for(byte i = 0; i < 4; i++)
  {
    LC.shutdown(i, false);
    LC.setIntensity(i, 8);
    LC.clearDisplay(i);
  }

  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);

  digitalWrite(S0, LOW);
  digitalWrite(S1, LOW);
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);

  pinMode(EN, OUTPUT);
  digitalWrite(EN, LOW);
}

void loop()
{
  byte controlPin[] = { S0, S1, S2, S3 };
  for(byte i = 0; i < 4; i ++)
  {
    digitalWrite(controlPin[i], bitRead(channel, i));
  }

  int val = analogRead(SIG);
  val = constrain(val, 0, 700);
  val = map(val, 0, 700, 0, 8);
  LC.setColumn(channel / 8, channel % 8, 255 >> (8 - val));

  channel++;
  if(channel == 16) channel = 0;
}

upd. Исправил опечатку в коде.

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

Ребят тлко не бейте , но что с ними не так то , мап это диапозон  а констреин чтоб за пределы не выходили значения , я не прав? или с чем их поменя , я не могу понять то, извините 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

я бы еще заменил 

LC.setColumn(channel / 8, channel % 8, 255 >> (8 - val));

channel++

на

LC.setColumn(channel / 8, ++channel % 8, 255 >> (8 - val));

//поправил

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

Jenek_Anapa пишет:

Ребят тлко не бейте , но что с ними не так то , мап это диапозон  а констреин чтоб за пределы не выходили значения , я не прав? или с чем их поменя , я не могу понять то, извините 

вы просто запутались в последовательности выполнения действий в коде - и это уже не однократно

вы всё время пытаетесь вначале съесть яблоко, а потом только сорвать или еще хуже, вынуть огрызок из несуществующего яблока и удивляетесь, что он какойто странный :)

просто не спешити, используёте комментариев больше для наглядности

ну и выделяйте содержимое блоков отступами - это тоже помогает в наглядности

vk007
Offline
Зарегистрирован: 16.06.2015

Пробуйте мой код.

Вы правильно понимаете, constrain - это чтобы ограничить значения переменной, а map - это преобразование переменной из одного диапазона в другой. Только в вашем случае изначальный диапазон значительно шире получаемого. Поэтому, правильней сначала разобраться со считанным со входа значением, а потом уже переводить его в нужный диапазон.

vk007
Offline
Зарегистрирован: 16.06.2015

ELITE пишет:

я бы еще заменил 

LC.setColumn(channel / 8, channel % 8, 255 >> (8 - val));

channel++

на

LC.setColumn(channel / 8, ++channel % 8, 255 >> (8 - val));

//поправил

Не надо запутывать Jenek_Anapa окончательно, пускай будет как есть, так ему будет проще понять. Ведь строки 46-49 тоже можно в одну слепить. Но код от этого читабельней не станет.

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

ДА ЛАДНО , ВсЕ так просто и работает? да как так то ?  у вас ученые степени чтоль? Да вы кто вы там таки то вообще? Я в шоке если честно 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

ладно не судите строго , я как то привык знания  добывать с помощь заобрать готовое  ипонять как оно работет , вот  это меня и подводит очень часто , Подскажите следующее , вот  допустим я хочу теперь к каждому столбику привязать цыфру , тоесть номер , кторый будет высвечиваться на третей и четвертой матрице  а если столбиков будет больше чтобы  номера чередовались по кругу , раскожите мне последовательность дествей , верне как разумней делать порядок действий , и я вам очень благодарен за то что возитесь со мной 

vk007
Offline
Зарегистрирован: 16.06.2015

Что этот номер будет значить?

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

номер пина  мультика или же ноамер столбика матрици , но номер будет появляться только тогда если хоть одна точка из столбика зажгеться , если загутся два столбика (сигнал придет с двух пинов ) то цыфры чередуються тех номеров которым соответствуют столбики 

vk007
Offline
Зарегистрирован: 16.06.2015

А смысл в этом есть? Ведь каждый столбик имеет фиксированное положение. Проще на лицевой панеле под каждым из них нарисовать его номер.

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

смысл есть , в первую очередь научиться , я делаю себе помогайку , занимаюсь я автоэлектроникой большегрузов и спец техникой , в основном автобусами , очень часто приходиться вызванивать пучки проводов , а так упрощаеться , я тоже думал просто оставить столбики но они очень мелкие  подписывать и приглядываться как то не с руки , да и к тому же , это ж луче чем дурака валять )

 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

идеальны вариант конечно же сделать дублирующее табло по ради каналу , но мне к этому очень долго идти придеться , но тем немение , опыт не помешает такой да и много где приготься еще

 

vk007
Offline
Зарегистрирован: 16.06.2015

Понятно. Врядли будет информативно. А если сигналов будет не один-два, а пять, десять,... все шестнадцать? А если сигнал будет коротким, прошел импульс и все?

vk007
Offline
Зарегистрирован: 16.06.2015

И почему матрицы? Я бы делал на отдельных светодиодах. Их разнести по панели можно и подписать нормально.

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

а помоему очень информативно ,  допустим из практики обычно из пучка 16 проводом  допустим натыкаешься один два ,  а на чет того что ипульс пришол и все я тоже  думал и решил что можно пришить писщалку которая будет голосить с первых точек  столбиков , я думаю это то что надо будет , а цыфры с 12 метров разглядеть думаю можно будет ,  автобусы примерно такой длины )

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

тогда лучше вам под каждой матрицец поставить 8 разрядный 7 сигментный индикатор также на мах7219

и каждая цифра будет соответствовать столбику матрицы

при этом весь код программы увеличится на 4 строчки

при этом эти табло можно поставить удаленно - соединение всего 4 провода

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

ну если просто светодиоды можно было бы и не замрачиваться с ардуинкой , а так вроде как компактно получаетьс я , мне нравиться )

 

vk007
Offline
Зарегистрирован: 16.06.2015

Все-таки я не до конца понял. Устройство нужно для того, чтобы найти соответствующий конец кабеля или вам надо ловить и анализировать какие-то сигналы, которые уже бегают по этим кабелям (генерируются устройствами автомобиля)?

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

можно и так , надо подумать , мыслишка итересная , к сожалению у меня пока нет таких модулей , будем исходить из того что есть , и вывести цифру я думаю не сложно у меня гдето есть даже массив 16ти ричный для матрицы 

#include "LedControl.h"

//Синтаксис создания класса LedControl(dataPin,clockPin,csPin,numDevices)
//Где LedControl - объект класса
//dataPin  - пин на плате Arduino к которому будет подключен пин DIN
//clockPin - пин на плате Arduino к которому будет подключен пин CLK
//csPin    - пин на плате Arduino к которому будет подключен пин CS
//numDevices - количество устройств на шине

//Создать объект класса matrix в нашем случае с одним подключенным устройством
LedControl matrix = LedControl(12, 11, 10, 4);

void setup() 
{
  //Устройству с адресом 0 по SPI интерфейсу выйти из спящего режима по умолчанию
  matrix.shutdown(0, false);
  //Установить яркость Led матрицы на 8 из 15      
  matrix.setIntensity(0, 1); 
  //Очистить дисплей
  matrix.clearDisplay(0);
}

//Объявляем массив из 10-ти символов
//Каждый символ включает в себя массив из 8-ти байт
//закодированных числом в шестнадцатиричном коде  
byte CountDigits[10][8] = 
{
  {0xe, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0xe, 0x0},  //0
  {0x2, 0x6,  0xe,  0x6,  0x6,  0x6,  0x6, 0x0},  //1
  {0xe, 0x1b, 0x3,  0x6,  0xc,  0x18, 0x1f,0x0},  //2
  {0xe, 0x1b, 0x3,  0xe,  0x3,  0x1b, 0xe, 0x0},  //3
  {0x3, 0x7,  0xf,  0x1b, 0x1f, 0x3,  0x3, 0x0},  //4
  {0x1f,0x18, 0x1e, 0x3,  0x3,  0x1b, 0xe, 0x0},  //5
  {0xe, 0x1b, 0x18, 0x1e, 0x1b, 0x1b, 0xe, 0x0},  //6
  {0x1f,0x3,  0x6,  0xc,  0xc,  0xc,  0xc, 0x0},  //7
  {0xe, 0x1b, 0x1b, 0xe,  0x1b, 0x1b, 0xe, 0x0},  //8
  {0xe, 0x1b, 0x1b, 0xf,  0x3,  0x1b, 0xe, 0x0}   //9

  

void loop() 
{
  for(int j = 0; j < 10; j ++) // листает символы 
  {
    for(int i = 0; i < 8; i ++) //листает строки
    {
      //0 - адрес, либо номер устройства на шине SPI
      //j - индекс массива байт с символом
      //i - текущий ряд на матрице
      //CountDigits[i] - значение(byte) которым заполнится ряд
      matrix.setRow(0, i, CountDigits[j][i]); // команда вывода массива 
    }
    delay(1000);
  }
}

 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

просто ловить провода , у автобуса жгуты  бывают проводов по 60 , на с пец технике коробки гидравлические с соленойдами  по десятку инногда 

 

DenKis
Offline
Зарегистрирован: 20.05.2015

Покрутил я в голове, как это можно было бы сделать... и что-то ничего не придумал.. Думал наклеить светофильтры на на матрицу, но как-то это на 12 метрах нечитаемо. 

Я бы всё же сделал бы на управляемых светодиодах WS2812 - они разноцветные и большие, полоски можно нарезать любой длины. Опять же для начинающего это красиво и наглядно.

https://www.youtube.com/watch?time_continue=3&v=jbNSa695bVo

vk007
Offline
Зарегистрирован: 16.06.2015

Тогда зачем вам отображать сигнал в виде столбика с зависимостью от напряжения? Загорелся светодиод - "есть сигнал", не горит - "нет сигнала", мне кажется, так проще.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

vk007 пишет:

Тогда зачем вам отображать сигнал в виде столбика с зависимостью от напряжения? Загорелся светодиод - "есть сигнал", не горит - "нет сигнала", мне кажется, так проще.

именно

а надо видно и далеко - вместо матрицы поставить 7 сигментное тобло высотой 10см - видно будет очень далеко

и просто выводить номер сканируемого пина

0-9 или 0-99 если 2 символа

 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

ааааа а тут есть еще один итересный опыт ,  на вход мултика вешаем оптопару на вход опто пары вешаем диоднай мостик на диодный мотик лампочку от галогенки в итоге имеем нагрузку 5 ампер , а 5 ампер в случае если попаду на плюс разгрузит и не будет кз а если на проводе висит моторчик или реле по длине столбика узна что там что тоесть ) , заморочился скажете вы , но поверьте очень хорошая помогайка  ,  

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

так у меня в планах сделать дуликат матрици только по радио каналу , но мне одо этого рости придеться , идеи надо реализовывать , темболее  это инструмент ) , ребят  вы мне преложили кучу вариантов , что есть какаято трудность вывода циферек ?

 

 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

а я почему то думал что столбики это какойто ад будет ) для меня это два дня назад было что то сверх естественное , как бы и сейчас не все понятно но разобраться и последовательность действи разберу точно , 

vk007
Offline
Зарегистрирован: 16.06.2015

Jenek_Anapa пишет:

есть какаято трудность вывода циферек ?

Смотря для кого, но вообще-то нет. Пример, как выводить цифры, у вас есть. Надо будет всего-лишь скрестить ежа и ужа.

DenKis
Offline
Зарегистрирован: 20.05.2015

радиоканал - это пара приёмник и передатчик и родная библиотека VirtualWire - с одной стороны передаём полтора байта (адрес столбца и значение) - 5-10 строчек, с другой - парсить текст и выводить в матрицу (тоже десяток- строк). Правда, это не самый лучший радиоканал за 70 рублей - критичен к расположению антенн и обилию железа. 

http://zelectro.cc/arduino-radio-transmitter-receiver

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

я попробую разобраться , сначало надо разобраться с тем что есть там принцип почти такой же 

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

пок не понятно как првязать столбики хотя их массив то уже есть , я думаю что нужно обращаться одновременно ко обоим или же отделить первые точки столбиков а кним привязатся ,

 

vk007
Offline
Зарегистрирован: 16.06.2015

Ничего не понял.

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

мне нужно с начало синхронизировать два буфера , что бы циыфры и столбики крутились синхронно 

 

vk007
Offline
Зарегистрирован: 16.06.2015

Первая и вторая матрицы у вас используются для вывода столбиков. Используйте третью матрицу для вывода десятков (т.е. выводим на ней 1, если число >9, иначе - пусто), а четвертую - для единиц.

Что касается синхронности... Я пока туманно себе предствавляю, как оно должно в итоге выглядеть в реальности, если каналов 16, одновременно сигнал может быть на нескольких и, тут самое главное, эти несколько номеров каналов надо как-то показывать.

vk007
Offline
Зарегистрирован: 16.06.2015

На скольки каналах могут быть одновременно сигналы?

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

а  это важно ? а если на всех 16ти ? 

 
 
//LC.setColumn(int address, int column, byte value);
//LC - объект класса LedControl
//int address - адрес устройства на базе драйвера MAX72xx
//int column - номер столбца(нумерация столбцов, как и строк, начинается с 0, заканчивается 7)
//byte value - переменная(тип данных byte), значение которой будет включать определённые светодиоды
// в столбце LED матрицы 8x8. Эта переменная может быть проинициализирована значением следующего формата,
// к примеру - B00000111, означающего, что B - это формат записи для двоичного представления числа и 
//8 значений состояния, для столбца из 8-ми светодиодов. Если какое-либо значение равно 1 то включить 
//светодиод, если же 0 то выключить. В данном примере, включатся 5-й, 6-й и 7-й светодиоды в столбце, 
//остальные останутся выключенными.
ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

я вообще не понимаю зачем матрицы!!

заменить их на числовые индикаторы - 2 по 8 знаков также на мах7219

код вообще не изменится! - но у вас будет крупная четкая картинка с номерами!! которую будет четко видно за 5-10 и более метров (цифру то можно сделать любого размера)

 

при этом даже код почти не надо будет менять! заменить только вывод столбца на вывод символа ПРОФИТ!

Jenek_Anapa
Offline
Зарегистрирован: 13.02.2018

компактность и радио канал в перспективе с такойже матрицей 

vk007
Offline
Зарегистрирован: 16.06.2015

Jenek_Anapa пишет:

а  это важно ? а если на всех 16ти ? 

И как вы предлагаете отображать все эти 16 чисел? По-очереди? Но тогда, чтобы хоть что-то разглядеть в этой карусели смены чисел, надо после каждого числа делать хотя бы секундную паузу. А, пока будет длиться пауза, то даже на том канале, номер которого отображается в данный момент, сигнал может исчезнуть.

Конечно, программно это все реализуемо, но воспринимать такую информацию будет проблематично.

vk007
Offline
Зарегистрирован: 16.06.2015

Самый простой и эффективный вариант, сделать табло хоть метр в длину, поделить его на 16 ячеек (ячейки при этом будут не такими уж и большими, как может показаться - всего около 6 см шириной), в каждой ячейке лампочка или более менее мощный светодиод (или несколько обычных). Накрывается все это хозяйство оргстеклом с нанесенными числами, соответствующими номерам каналов. За 12 метров будет и видно хорошо, и не будет мешанины из цифр.