Связка Mega2560 с p10 led module

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

уважаемый tika!

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

Накипело...

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

tika
Offline
Зарегистрирован: 22.07.2015

Стоп- Спасибо за внимание. Но из поста 242 видо и Вы пишете, что у вас все работает. а тут чо вы  если наидете время будите пилить его. НЕСОГЛАСОВАННОСТЬ. на основания вашего отписке 2424 я и попросил с точками поделится - которые якобы у вас работают. Если вы просто откудо-то прицепили картинку то извините - Я не поадресу.

sva_khv
Offline
Зарегистрирован: 19.12.2016

kostosspb пишет:

Здравствуйте!

У меня аналогичная матрица, как в сообщении http://arduino.ru/forum/apparatnye-voprosy/svyazka-mega2560-s-p10-led-module?page=4#comment-294365. Пробовал различные варианты, но ничего так и не заработало. Может кто-нибудь за это время сталкивался с чем-то похожим. Буду благодарен за любую информацию.

Почитай сдесь:

https://wiki.iarduino.ru/page/rgb-matrix/#

LA->A, LB->B, LC->C, остальные как в описании, 

Синего, я так понимаю  на твоей матрице нет?

 

dneese
Offline
Зарегистрирован: 20.12.2018
Существует некоторая дискуссия об использовании размера шрифта в структуре данных.
 В некоторых случаях он используется в качестве смещения для следующей структуры шрифта (что означает, что он имеет размер).
 В других случаях он содержит фактический адрес следующей структуры шрифта.
 Он используется только в библиотеке Arduino DMD для определения, является ли шрифт фиксированным или переменной ширины:
  - ноль указывает шрифт переменной ширины, а ширина каждого символа определяется в массиве width
  - не ноль указывает шрифт фиксированной ширины, а его значение - ширину символа. В этом случае массив 'width' отсутствует.
 
Каждый символ состоит из фиксированной высоты 16 пикселей с переменным числом пикселей по ширине.
Каждый вертикальный столбец представлен 2 байтами - верхние 8 строк пикселей и нижние 8 строк.
Первые 8 строк указываются первыми слева направо, а затем нижние 8 строк слева направо.
«1» означает, что пиксель включен, а «0» означает «выключен».
Ширина символа определяет количество байтов, необходимое для символа.
В этом шрифте требуется 2 байта на пиксель ширины.
Для шрифтов высотой 8 или менее пикселей требуется только 1 байт на пиксель в ширину.
Если размер шрифта указан как «0x00, 0x00», тогда шрифт имеет фиксированную ширину и все определения символов
 должны иметь одинаковое количество байтов в своем определении, а ширина указана в font_Width.
 В этом случае таблица ширины символов шрифта не требуется или не разрешается.
Определение символа состоит из списка байтов данных, начиная с верхнего левого байта до
 верхний правый байт, за которым следует нижний левый байт до нижнего правого байта.
 
В приведенном ниже примере показано, как символ «1» представлен в этом шрифте.
Байты и биты пронумерованы от 0 (не 1) '
 
 
/*



 0x0C, 0x0E, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, // 49 "1"

   ______________ byte 0 = 0C  this byte is specified first
  |  ____________ byte 1 = 0E  followed by this one
  | |  __________ byte 2 = FF
  | | |  ________ byte 3 = FF
  | | | |  ______ byte 4 = FF
  | | | | |  ____ byte 5 = 00
  | | | | | |  __ byte 6 = 00
  | | | | | | |
      * * *     - bit 0  a '0' in bytes 0, 1, a '1' in bytes 3, 4, 5,
    * * * *     - bit 1                  ...and a '0' in bytes 5 & 6.
  * * * * *     - bit 2
  * * * * *     - bit 3
      * * *     - bit 4
      * * *     - bit 5  Character '1' has a width of 0x07
      * * *     - bit 6  Character '1' is represented by "0x0C, ....
      * * *     - bit 7    
      * * *     - bit 0
      * * *     - bit 1
      * * *     - bit 2
      * * *     - bit 3
      * * *     - bit 4
  * * * * * * * - bit 5
  * * * * * * * - bit 6
  * * * * * * * - bit 7
  ^ ^ ^ ^ ^ ^ ^
  | | | | | | |__ byte n   = E0  this byte is specified last
  | | | | | |____ byte n-1 = E0  this byte is specified 2nd last
  | | | | |______ byte n-2 = FF
  | | | |________ byte n-3 = FF
  | | |__________ byte n-4 = FF
  | |____________ byte n-5 = E0
  |______________ byte n-6 = E0  this byte is specified after all the upper bytes are specified

*/

 

/*

 0x0C, 0x0E, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, // 49 "1"
ПРИМЕР ЦИФРЫ "1" ШРИФТА РАЗМЕРОМ 7*16, ГДЕ 0 ПОГАСШИЙ ПИКСЕЛЬ А 1 ГОРИТ
 
   ______________ byte 0 = 0C   (00001100)
  |  ____________ byte 1 = 0E   (00001110)
  | |  __________ byte 2 = FF  (11111111)Binary
  | | |  ________ byte 3 = FF  (11111111)Binary
  | | | |  ______ byte 4 = FF  (11111111)Binary
  | | | | |  ____ byte 5 = 00  (00000000)Binary
  | | | | | |  __ byte 6 = 00  (00000000)Binary
  | | | | | | |
  0 0 1 1 1 0 0 - bit 0  
  0 1 1 1 1 0 0 - bit 1	
  1 1 1 1 1 0 0 - bit 2		
  1 1 1 1 1 0 0 - bit 3
  0 0 1 1 1 0 0 - bit 4
  0 0 1 1 1 0 0 - bit 5                
  0 0 1 1 1 0 0 - bit 6                
  0 0 1 1 1 0 0 - bit 7                   
---------------------------------
  0 0 1 1 1 0 0 - bit 0
  0 0 1 1 1 0 0 - bit 1
  0 0 1 1 1 0 0 - bit 2
  0 0 1 1 1 0 0 - bit 3
  0 0 1 1 1 0 0 - bit 4
  1 1 1 1 1 1 1 - bit 5
  1 1 1 1 1 1 1 - bit 6
  1 1 1 1 1 1 1 - bit 7
  ^ ^ ^ ^ ^ ^ ^
  | | | | | | |__ byte n   = E0   (11100000)BIN
  | | | | | |____ byte n-1 = E0   (11100000)BIN
  | | | | |______ byte n-2 = FF   (11111111)Binary
  | | | |________ byte n-3 = FF   (11111111)Binary
  | | |__________ byte n-4 = FF   (11111111)Binary
  | |____________ byte n-5 = E0  (11100000)BIN
  |______________ byte n-6 = E0   (11100000)BIN

*/

// РИСУЕМ СВОЙ СИМВОЛ ( можно в exel), считаем и записываем нули и единички

// ПЕРЕВОДИМ С ПОМОЩЬЮ https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html

//С Binary в HEX,  с верху начиная с byte0,byte1,byte2,byte3,byte4,byte5,byte6,

//byte n, byte n-1, byte n-2, byte n-3, byte n4, byte n-5, byte n-6.

// получаем 0x0C, 0x0E, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, // 49 "1"

1982rodman
Offline
Зарегистрирован: 05.01.2019

Здравствуйте! Проблема такого характера: освоил вывод различных данных на модули р10 на основе dip диодов, используя библиотеки dmd и dmd2. Но тут попали под руку модули на основе smd светодиодов. Вроде бы подключение тоже, но ничего не получилось. Не работает

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

У меня был небольшой опыт работы с такими модулями. Распиновка была та же, но изображение было инвертировано, где-то ранее на этом форуме писал как сделать нормально. Но не понравилось, что в некоторых местах появлялись странные засветы лишних диодов (процентов на 5 яркости). По этой причине было решено от них отказаться, да и dip диоды менять легче при выгорании. В любом случае, проверьте распиновка именно своей матрицы, там могли поменять какие-то выводы

1982rodman
Offline
Зарегистрирован: 05.01.2019

Да я читал ту статью. У меня просто горит полоска 4х8 в правом верхнем углу и всё. Видимо модули разные. Да мне оже dip больше устраивют, просто хотел пристроить и эти

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Есть ещё модули от компании Elecrow, у них же есть шилды на Уну/Мегу, там распиновка совершенно иная, матрицы smd и rgb, попробуйте ещё в эту сторону копнуть. Я купил такой шилд, но он мне не подошёл. Короче ищите маркировку пинов по этой матрице, дальше понятнее будет

1982rodman
Offline
Зарегистрирован: 05.01.2019

А как здесь фото вставить?

1982rodman
Offline
Зарегистрирован: 05.01.2019

Обозначения около разъема там такие:
F. F
N. F
N. F
N. F
N. F
N. D1
N. D2
N. F
А у dip модуля
OE. A
N. B
N. C
N. S
N. L
N. R
N. G
N. D
Перерыл все, не могу найти, вроде и марка известная Чанг Ли, p10c4v17

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Какая-то странная маркировка... Попробуйте все же прикрепить фото, с телефона на сайте не смог нормально рассмотреть плату

1982rodman
Offline
Зарегистрирован: 05.01.2019

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Можно попробовать найти контакты их манагера и запросить даташит. Также можно поискать их профили на Alibaba или Aliexpress и оттуда дёрнуть менеджера. Китайцы довольно общительные товарищи и могут подкинуть нужной инфы

dneese
Offline
Зарегистрирован: 20.12.2018

может это поможет, «R» обозначает КРАСНЫЙ. Вы можете заметить неиспользуемый вывод «G», который для зеленого цвета на разъеме HUB12

/*--------------------------------------------------------------------------------------
 Only 7 of the 16 pins on the DMD are actually used:
 GND - Hopefully obvious
 nOE - Enable / Disable ALL the LEDs on the DMD
 A - A&B pins select which 1/4 of the DMD is selected 
 B - A&B pins select which 1/4 of the DMD is selected 
 CLK - Used to clock each pixel into the DMD shift registers
 SCLK - Latches the current content of the DMD shift registers
 R - The raw pixel data stream (NB: The 'R' stands for RED. You might notice an unused 'G' pin which is for Green on a HUB12 connector)
 --------
 nOE(D9) |1     2| A(D6)
 Gnd     |3     4| B(D7) 
 Gnd     |5     6| C
 Gnd     |6     8| CLK(D13)
 Gnd     |7    10| SCLK(D8)
 Gnd     |11   12| R(D11) 
 Gnd     |13   14| G
 Gnd     |15   16| D
 ---------
 --------------------------------------------------------------------------------------*/
//Fire up the DMD library as dmd

 

1982rodman
Offline
Зарегистрирован: 05.01.2019

А вообще дело может быть только в различиях распиновки или есть ещё что-то dip и smd модулей?

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

По логике принципиальных различий быть не должно, если остальная элементная та же. Посмотрите ещё какие сдвиговые регистры стоят, если там не 74hc595, то могут быть отличия по управлению мартицей в целом.
Так что в целях "поиграться" можно таки добиться истины, но если надо срочно, то есть смысл отложить до более свободного времени

1982rodman
Offline
Зарегистрирован: 05.01.2019

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

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Ну с дуиной все несколько иначе обстоит, либу Dmd явно забросили и никто не обновляет ее уже давно. Хотя тема годная, поднял на ней хороший проект.
Можно попробовать ещё полазить по форуму создателей библиотеки, я там много годной инфы нашел, заодно и английский подтянул))

Кстати вопрос к бывалым - никто не запускал эти модули с ДМД на стм32? Выше ли там частота обновления?

1982rodman
Offline
Зарегистрирован: 05.01.2019

Микросхемы там стоят sm16188в

IvanP
Offline
Зарегистрирован: 19.11.2018

Почему не выводит русский шрифт на светодиодную панель при использовании библиотеке DMD2, при DMD выводит, т.е

#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "SystemFont5x7.h"
//#include "Arial_Black_16_ISO_8859_1.h"

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 2 // количество экранов
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

/*--------------------------------------------------------------------------------------
  setup
  Called by the Arduino architecture before the main loop begins
--------------------------------------------------------------------------------------*/
void setup(void)
{

   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 3000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  Serial.begin(115200);
}

/*--------------------------------------------------------------------------------------
  loop
  Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
   dmd.clearScreen( true );
   dmd.selectFont(SystemFont5x7);
   // Français, Österreich, Magyarország
   const char *MSG = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
   dmd.drawMarquee(MSG,strlen(MSG),(32*DISPLAYS_ACROSS)-1,0);
   long start=millis();
   long timer=start;
   while(1){
     if ((timer+25) < millis()) {
       dmd.stepMarquee(-1,0);
       timer=millis();
     }
   }
}

Этот работает и все выводит, ниже только латинские буквы, русские нет.

#include <SPI.h>
#include <DMD2.h>
#include "SystemFont5x7rus.h"
//#include <fonts/Arial_Black_16_ISO_8859_1.h>

// Set Width to the number of displays wide you have
const int WIDTH =2;

// You can change to a smaller font (two lines) by commenting this line,
// and uncommenting the line after it:

const uint8_t *FONT = SystemFont5x7;

const char *MESSAGE = "QWERTY ЙЦУКЕН";

SoftDMD dmd(WIDTH,1);  // DMD controls the entire display
DMD_TextBox box(dmd);  // "box" provides a text box to automatically write to/scroll the display

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);
  dmd.setBrightness(255);
  dmd.selectFont(FONT);
  dmd.begin();
}

// the loop routine runs over and over again forever:
void loop() {
  const char *next = MESSAGE;
//  dmd.selectFont(FONT);
  while(*next) {
    Serial.print(*next);
    box.print(*next);
    delay(200);
    next++;
  }
}

шрифт один и тот же:

#include <inttypes.h>
#ifdef __AVR__
#include <avr/pgmspace.h>
#elif defined (ESP8266)
#include <pgmspace.h>
#else
#define PROGMEM
#endif

#ifndef SYSTEM5x7_H
#define SYSTEM5x7_H

#define SYSTEM5x7_WIDTH 5
#define SYSTEM5x7_HEIGHT 7

/*
 * added to allow fontname to match header file name.
 * as well as keep the old name for backward compability
 */

#define SystemFont5x7 System5x7

static const uint8_t System5x7[] PROGMEM = {
    0x0, 0x0, // size of zero indicates fixed width font, actual length is width * height
    0x05, // width
    0x07, // height
    0x20, // first char
    0x9F, // char count

    // Fixed width; char width table not used !!!!

    // font data
    0x00, 0x00, 0x00, 0x00, 0x00,// (space)
	0x00, 0x00, 0x5F, 0x00, 0x00,// !
	0x00, 0x07, 0x00, 0x07, 0x00,// "
	0x14, 0x7F, 0x14, 0x7F, 0x14,// #
	0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
	0x23, 0x13, 0x08, 0x64, 0x62,// %
	0x36, 0x49, 0x55, 0x22, 0x50,// &
	0x00, 0x05, 0x03, 0x00, 0x00,// '
	0x00, 0x1C, 0x22, 0x41, 0x00,// (
	0x00, 0x41, 0x22, 0x1C, 0x00,// )
	0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
	0x08, 0x08, 0x3E, 0x08, 0x08,// +
	0x00, 0x50, 0x30, 0x00, 0x00,// ,
	0x08, 0x08, 0x08, 0x08, 0x08,// -
	0x00, 0x60, 0x60, 0x00, 0x00,// .
	0x20, 0x10, 0x08, 0x04, 0x02,// /
	0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
	0x00, 0x42, 0x7F, 0x40, 0x00,// 1
	0x42, 0x61, 0x51, 0x49, 0x46,// 2
	0x21, 0x41, 0x45, 0x4B, 0x31,// 3
	0x18, 0x14, 0x12, 0x7F, 0x10,// 4
	0x27, 0x45, 0x45, 0x45, 0x39,// 5
	0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
	0x01, 0x71, 0x09, 0x05, 0x03,// 7
	0x36, 0x49, 0x49, 0x49, 0x36,// 8
	0x06, 0x49, 0x49, 0x29, 0x1E,// 9
	0x00, 0x36, 0x36, 0x00, 0x00,// :
	0x00, 0x56, 0x36, 0x00, 0x00,// ;
	0x00, 0x08, 0x14, 0x22, 0x41,// <
	0x14, 0x14, 0x14, 0x14, 0x14,// =
	0x41, 0x22, 0x14, 0x08, 0x00,// >
	0x02, 0x01, 0x51, 0x09, 0x06,// ?
	0x32, 0x49, 0x79, 0x41, 0x3E,// @
	0x7E, 0x11, 0x11, 0x11, 0x7E,// A
	0x7F, 0x49, 0x49, 0x49, 0x36,// B
	0x3E, 0x41, 0x41, 0x41, 0x22,// C
	0x7F, 0x41, 0x41, 0x22, 0x1C,// D
	0x7F, 0x49, 0x49, 0x49, 0x41,// E
	0x7F, 0x09, 0x09, 0x01, 0x01,// F
	0x3E, 0x41, 0x41, 0x51, 0x32,// G
	0x7F, 0x08, 0x08, 0x08, 0x7F,// H
	0x00, 0x41, 0x7F, 0x41, 0x00,// I
	0x20, 0x40, 0x41, 0x3F, 0x01,// J
	0x7F, 0x08, 0x14, 0x22, 0x41,// K
	0x7F, 0x40, 0x40, 0x40, 0x40,// L
	0x7F, 0x02, 0x04, 0x02, 0x7F,// M
	0x7F, 0x04, 0x08, 0x10, 0x7F,// N
	0x3E, 0x41, 0x41, 0x41, 0x3E,// O
	0x7F, 0x09, 0x09, 0x09, 0x06,// P
	0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
	0x7F, 0x09, 0x19, 0x29, 0x46,// R
	0x46, 0x49, 0x49, 0x49, 0x31,// S
	0x01, 0x01, 0x7F, 0x01, 0x01,// T
	0x3F, 0x40, 0x40, 0x40, 0x3F,// U
	0x1F, 0x20, 0x40, 0x20, 0x1F,// V
	0x7F, 0x20, 0x18, 0x20, 0x7F,// W
	0x63, 0x14, 0x08, 0x14, 0x63,// X
	0x03, 0x04, 0x78, 0x04, 0x03,// Y
	0x61, 0x51, 0x49, 0x45, 0x43,// Z
	0x00, 0x00, 0x7F, 0x41, 0x41,// [
	0x02, 0x04, 0x08, 0x10, 0x20,// "\"
	0x41, 0x41, 0x7F, 0x00, 0x00,// ]
	0x04, 0x02, 0x01, 0x02, 0x04,// ^
	0x40, 0x40, 0x40, 0x40, 0x40,// _
	0x00, 0x01, 0x02, 0x04, 0x00,// `
	0x20, 0x54, 0x54, 0x54, 0x78,// a
	0x7F, 0x48, 0x44, 0x44, 0x38,// b
	0x38, 0x44, 0x44, 0x44, 0x20,// c
	0x38, 0x44, 0x44, 0x48, 0x7F,// d
	0x38, 0x54, 0x54, 0x54, 0x18,// e
	0x08, 0x7E, 0x09, 0x01, 0x02,// f
	0x08, 0x14, 0x54, 0x54, 0x3C,// g
	0x7F, 0x08, 0x04, 0x04, 0x78,// h
	0x00, 0x44, 0x7D, 0x40, 0x00,// i
	0x20, 0x40, 0x44, 0x3D, 0x00,// j
	0x00, 0x7F, 0x10, 0x28, 0x44,// k
	0x00, 0x41, 0x7F, 0x40, 0x00,// l
	0x7C, 0x04, 0x18, 0x04, 0x78,// m
	0x7C, 0x08, 0x04, 0x04, 0x78,// n
	0x38, 0x44, 0x44, 0x44, 0x38,// o
	0x7C, 0x14, 0x14, 0x14, 0x08,// p
	0x08, 0x14, 0x14, 0x18, 0x7C,// q
	0x7C, 0x08, 0x04, 0x04, 0x08,// r
	0x48, 0x54, 0x54, 0x54, 0x20,// s
	0x04, 0x3F, 0x44, 0x40, 0x20,// t
	0x3C, 0x40, 0x40, 0x20, 0x7C,// u
	0x1C, 0x20, 0x40, 0x20, 0x1C,// v
	0x3C, 0x40, 0x30, 0x40, 0x3C,// w
	0x44, 0x28, 0x10, 0x28, 0x44,// x
	0x0C, 0x50, 0x50, 0x50, 0x3C,// y
	0x44, 0x64, 0x54, 0x4C, 0x44,// z
	0x00, 0x08, 0x36, 0x41, 0x00,// {
	0x00, 0x00, 0x7F, 0x00, 0x00,// |
	0x00, 0x41, 0x36, 0x08, 0x00,// }
	0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
	0x08, 0x1C, 0x2A, 0x08, 0x08, // <-
	 0x7C, 0x14, 0x14, 0x14, 0x08,//p
    0x38, 0x44, 0x44, 0x44, 0x20,//c
    0x04, 0x04, 0x7c, 0x04, 0x04,//т
    0x0C, 0x50, 0x50, 0x50, 0x3C,//у
    0x30, 0x48, 0xfc, 0x48, 0x30,//ф
    0x44, 0x28, 0x10, 0x28, 0x44,//x
    0x7c, 0x40, 0x40, 0x40, 0xfc,//ц 
    0x0c, 0x10, 0x10, 0x10, 0x7c,//ч
    0x7c, 0x40, 0x7c, 0x40, 0x7c,//ш
    0x7c, 0x40, 0x7c, 0x40, 0xfc,//щ
    0x04, 0x7c, 0x50, 0x50, 0x20,//ъ 
    0x7c, 0x50, 0x50, 0x20, 0x7c,//ы
    0x7c, 0x50, 0x50, 0x20, 0x00,//ь
    0x28, 0x44, 0x54, 0x54, 0x38,//э
    0x7c, 0x10, 0x38, 0x44, 0x38,//ю
    0x08, 0x54, 0x34, 0x14, 0x7c,//я
    0x7e, 0x11, 0x11, 0x11, 0x7e,//A
    0x7f, 0x49, 0x49, 0x49, 0x33,//Б
    0x7f, 0x49, 0x49, 0x49, 0x36,//В
    0x7f, 0x01, 0x01, 0x01, 0x03,//Г
    0xe0, 0x51, 0x4f, 0x41, 0xff,//Д
    0x7f, 0x49, 0x49, 0x49, 0x41,//E 
    0x77, 0x08, 0x7f, 0x08, 0x77,//Ж
    0x41, 0x49, 0x49, 0x49, 0x36,//З
    0x7f, 0x10, 0x08, 0x04, 0x7f,//И
    0x7c, 0x21, 0x12, 0x09, 0x7c,//Й
    0x7f, 0x08, 0x14, 0x22, 0x41,//K
    0x20, 0x41, 0x3f, 0x01, 0x7f,//Л
    0x7f, 0x02, 0x0c, 0x02, 0x7f,//M
    0x7f, 0x08, 0x08, 0x08, 0x7f,//H
    0x3e, 0x41, 0x41, 0x41, 0x3e,//O
    0x7f, 0x01, 0x01, 0x01, 0x7f,//П
	0x7f, 0x09, 0x09, 0x09, 0x06,//P  
    0x3e, 0x41, 0x41, 0x41, 0x22,//C 
    0x01, 0x01, 0x7f, 0x01, 0x01,//T
    0x47, 0x28, 0x10, 0x08, 0x07,//У
    0x1c, 0x22, 0x7f, 0x22, 0x1c,//Ф 
    0x63, 0x14, 0x08, 0x14, 0x63,//X 
    0x7f, 0x40, 0x40, 0x40, 0xff,//Ц
    0x07, 0x08, 0x08, 0x08, 0x7f,//Ч
    0x7f, 0x40, 0x7f, 0x40, 0x7f,//Ш
    0x7f, 0x40, 0x7f, 0x40, 0xff,//Щ
    0x01, 0x7f, 0x48, 0x48, 0x30,//Ъ 
    0x7f, 0x48, 0x30, 0x00, 0x7f,//Ы
    0x00, 0x7f, 0x48, 0x48, 0x30,//Э  
    0x22, 0x41, 0x49, 0x49, 0x3e,//Ь
    0x7f, 0x08, 0x3e, 0x41, 0x3e,//Ю
    0x46, 0x29, 0x19, 0x09, 0x7f,//Я
    0x20, 0x54, 0x54, 0x54, 0x78,//a
    0x3c, 0x4a, 0x4a, 0x49, 0x31,//б
    0x7c, 0x54, 0x54, 0x28, 0x00,//в
    0x7c, 0x04, 0x04, 0x04, 0x0c,//г 
    0xe0, 0x54, 0x4c, 0x44, 0xfc,//д
    0x38, 0x54, 0x54, 0x54, 0x18,//e
    0x6c, 0x10, 0x7c, 0x10, 0x6c,//ж
    0x44, 0x44, 0x54, 0x54, 0x28,//з
    0x7c, 0x20, 0x10, 0x08, 0x7c,//и
    0x7c, 0x41, 0x22, 0x11, 0x7c,//й
    0x7c, 0x10, 0x28, 0x44, 0x00,//к
    0x20, 0x44, 0x3c, 0x04, 0x7c,//л
    0x7c, 0x08, 0x10, 0x08, 0x7c,//м
    0x7c, 0x10, 0x10, 0x10, 0x7c,//н
    0x38, 0x44, 0x44, 0x44, 0x38,//o
    0x7c, 0x04, 0x04, 0x04, 0x7c//п 
	
	
	
	
};

#endif

третий день уже, весь мозг сломал...причем в монитор порта русские выводит, а на панель - нет

QWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕНQWERTY ЙЦУКЕ

 

dneese
Offline
Зарегистрирован: 20.12.2018

обрати внимание на строку 04 и 44 в первом коде,

и посмотри на строки 03 и 12 во втором коде

да код шрифта имеет вопросы. какое всё ж его название?

 

IvanP
Offline
Зарегистрирован: 19.11.2018

Это не от названия шрифта, в верхнем я просто в папку со скетчем положил и переименовал, думал может откудато еще другой шрифт подтягивается, смотри в самом шрифте строки 21 и 23 соответсвенно. Пробовал переименовывать и с DMD2 - не помогло. Может есть другой побольше шрифт с русскими буквами? Поделитесь, пожалуйста.

IvanP
Offline
Зарегистрирован: 19.11.2018

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

dneese
Offline
Зарегистрирован: 20.12.2018

с чего вы взяли что у вас русский шрифт?

вот накатал маленький тестовый пример с помощью которого можно увидеть

соответствуют ли символы в вашем шрифте  таблице символов ascii Кодовая таблица 1251 – MS Windows

слева вверху будет номер символа а справа внизу соответствующий символ.

если справа внизу пусто значит символа в шрифте нет

 с 48 по 57 цифры

английские символы начинаются с 65 по 90 Заглавные

малые с 97 по 122

руские с 192 по 223 заглавные

и с 224 по 255 малые

 

// create by dneese fb.com/explod
/*--------------------------------------------------------------------------------------
  Includes
--------------------------------------------------------------------------------------*/
#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "SystemFont5x7.h"
#include "Arial_Black_16_ISO_8859_1.h"

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

const int COUNTDOWN_FROM = 0;
int counter = COUNTDOWN_FROM;

char b[8];
String str;

/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

/*--------------------------------------------------------------------------------------
  setup
  Called by the Arduino architecture before the main loop begins
--------------------------------------------------------------------------------------*/
void setup(void)
{

   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 3000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  Serial.begin(115200);


  
}

/*--------------------------------------------------------------------------------------
  loop
  Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
   
    if(counter < 260) { // 
      
counter++ ; // прибавляем 
   str=counter;
    str.toCharArray(b,6);   // конвертим интеджер в стринг
    
   dmd.clearScreen( true );
   dmd.selectFont(SystemFont5x7);
    dmd.drawString(  1,  1,b, 5, GRAPHICS_NORMAL );//напечатаем номер в таблице символов ascii
    
    dmd.drawChar(  26,  8, counter, GRAPHICS_NORMAL );// напечатаем символ
}
delay(1000); // Do not get immediate repeat
 }

 

IvanP
Offline
Зарегистрирован: 19.11.2018

Ардуино IDE разве не кодировке UTF-8. Берем таблицу кодировки и получается что:

диапазону 0x80(128) — 0x8F(143) соответствуют маленькие буквы от «р» до «я»

с 0x90 и до 0xAF идут заглавные по порядку «А» — «Я» исключая «Ё»

и в хвосте с 0xB0 до 0xBF маленькие от «а» до «п». ?

dneese
Offline
Зарегистрирован: 20.12.2018

происходит путаница, возьмите скетч для печати из компорта на матрицу

подставте свой шрифт и печатайте в мониторе порта русские буквы по одной

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

попереставляете на нужные места нужные буквы правильно. А результатом поделитесь с обществом.

#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //
#include <TimerOne.h>  //
#include "SystemFont5x7.h"

char stringa[20];
int i = 0;

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);


void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}


void setup(void)
{

   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 500 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
  dmd.selectFont(SystemFont5x7);
   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  
  Serial.begin(9600);
}
 

void loop(void)
{
  // Read line from Serial
  memset(stringa, 0, sizeof(stringa)); // set string contents to zero
  Serial.setTimeout(100); // second input timeout
  i = Serial.readBytesUntil('\n', stringa, sizeof(stringa)-1); // Read line of input
 if(i > 0) { // Display line if anything was read
 
    Serial.println(stringa);

    dmd.clearScreen(true);
   
    dmd.drawString( 0, 0, stringa , strlen(stringa), GRAPHICS_NORMAL );
    
  }
}

 

dneese
Offline
Зарегистрирован: 20.12.2018

выложу свой шрифт русифицированый под DMD

пробуйте отписывайте


// в IDE Arduino в файле preference только когда IDE Arduino не запущена
// заменить в строчке 67 preproc.substitute_unicode=true
// на preproc.substitute_unicode=false

#include <inttypes.h>
#include <avr/pgmspace.h>

#ifndef SYSTEM5x7_H
#define SYSTEM5x7_H

#define SYSTEM5x7_WIDTH 5
#define SYSTEM5x7_HEIGHT 7

/*
 * added to allow fontname to match header file name. 
 * as well as keep the old name for backward compability
 */

#define SystemFont5x7 System5x7

const static uint8_t System5x7[] PROGMEM = {
    0x0, 0x0, // size of zero indicates fixed width font, actual length is width * height
    0x05, // width
    0x07, // height
    0x20, // first char
    0xE0, // char count
    
    // Fixed width; char width table not used !!!!
    
    // font data   согласно ASCII таблица кодов символов Windows (Win-1251) https://www.celitel.info/klad/tabsim.htm
    0x00, 0x00, 0x00, 0x00, 0x00,// (space)
	0x00, 0x00, 0x5F, 0x00, 0x00,// !
	0x00, 0x07, 0x00, 0x07, 0x00,// "
	0x14, 0x7F, 0x14, 0x7F, 0x14,// #
	0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
	0x23, 0x13, 0x08, 0x64, 0x62,// %
	0x36, 0x49, 0x55, 0x22, 0x50,// &
	0x00, 0x05, 0x03, 0x00, 0x00,// '
	0x00, 0x1C, 0x22, 0x41, 0x00,// (
	0x00, 0x41, 0x22, 0x1C, 0x00,// )
	0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
	0x08, 0x08, 0x3E, 0x08, 0x08,// +
	0x00, 0x50, 0x30, 0x00, 0x00,// ,
	0x08, 0x08, 0x08, 0x08, 0x08,// -
	0x00, 0x00, 0x40, 0x00, 0x00, // .
	0x20, 0x10, 0x08, 0x04, 0x02,// /
	0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
	0x00, 0x42, 0x7F, 0x40, 0x00,// 1
	0x42, 0x61, 0x51, 0x49, 0x46,// 2
	0x21, 0x41, 0x45, 0x4B, 0x31,// 3
	0x18, 0x14, 0x12, 0x7F, 0x10,// 4
	0x27, 0x45, 0x45, 0x45, 0x39,// 5
	0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
	0x01, 0x71, 0x09, 0x05, 0x03,// 7
	0x36, 0x49, 0x49, 0x49, 0x36,// 8
	0x06, 0x49, 0x49, 0x29, 0x1E,// 9
	0x00, 0x36, 0x36, 0x00, 0x00,// :
	0x00, 0x56, 0x36, 0x00, 0x00,// ;
	0x00, 0x08, 0x14, 0x22, 0x41,// <
	0x14, 0x14, 0x14, 0x14, 0x14,// =
	0x41, 0x22, 0x14, 0x08, 0x00,// >
	0x02, 0x01, 0x51, 0x09, 0x06,// ?
	0x32, 0x49, 0x79, 0x41, 0x3E,// @
	0x7E, 0x11, 0x11, 0x11, 0x7E,// A
	0x7F, 0x49, 0x49, 0x49, 0x36,// B
	0x3E, 0x41, 0x41, 0x41, 0x22,// C
	0x7F, 0x41, 0x41, 0x22, 0x1C,// D
	0x7F, 0x49, 0x49, 0x49, 0x41,// E
	0x7F, 0x09, 0x09, 0x01, 0x01,// F
	0x3E, 0x41, 0x41, 0x51, 0x32,// G
	0x7F, 0x08, 0x08, 0x08, 0x7F,// H
	0x00, 0x41, 0x7F, 0x41, 0x00,// I
	0x20, 0x40, 0x41, 0x3F, 0x01,// J
	0x7F, 0x08, 0x14, 0x22, 0x41,// K
	0x7F, 0x40, 0x40, 0x40, 0x40,// L
	0x7F, 0x02, 0x04, 0x02, 0x7F,// M
	0x7F, 0x04, 0x08, 0x10, 0x7F,// N
	0x3E, 0x41, 0x41, 0x41, 0x3E,// O
	0x7F, 0x09, 0x09, 0x09, 0x06,// P
	0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
	0x7F, 0x09, 0x19, 0x29, 0x46,// R
	0x46, 0x49, 0x49, 0x49, 0x31,// S
	0x01, 0x01, 0x7F, 0x01, 0x01,// T
	0x3F, 0x40, 0x40, 0x40, 0x3F,// U
	0x1F, 0x20, 0x40, 0x20, 0x1F,// V
	0x7F, 0x20, 0x18, 0x20, 0x7F,// W
	0x63, 0x14, 0x08, 0x14, 0x63,// X
	0x03, 0x04, 0x78, 0x04, 0x03,// Y
	0x61, 0x51, 0x49, 0x45, 0x43,// Z
	0x00, 0x00, 0x7F, 0x41, 0x41,// [
	0x02, 0x04, 0x08, 0x10, 0x20,// "\"
	0x41, 0x41, 0x7F, 0x00, 0x00,// ]
	0x04, 0x02, 0x01, 0x02, 0x04,// ^
	0x40, 0x40, 0x40, 0x40, 0x40,// _
	0x00, 0x01, 0x02, 0x04, 0x00,// `
	0x20, 0x54, 0x54, 0x54, 0x78,// a
	0x7F, 0x48, 0x44, 0x44, 0x38,// b
	0x38, 0x44, 0x44, 0x44, 0x20,// c
	0x38, 0x44, 0x44, 0x48, 0x7F,// d
	0x38, 0x54, 0x54, 0x54, 0x18,// e
	0x08, 0x7E, 0x09, 0x01, 0x02,// f
	0x08, 0x14, 0x54, 0x54, 0x3C,// g
	0x7F, 0x08, 0x04, 0x04, 0x78,// h
	0x00, 0x44, 0x7D, 0x40, 0x00,// i
	0x20, 0x40, 0x44, 0x3D, 0x00,// j
	0x00, 0x7F, 0x10, 0x28, 0x44,// k
	0x00, 0x41, 0x7F, 0x40, 0x00,// l
	0x7C, 0x04, 0x18, 0x04, 0x78,// m
	0x7C, 0x08, 0x04, 0x04, 0x78,// n
	0x38, 0x44, 0x44, 0x44, 0x38,// o
	0x7C, 0x14, 0x14, 0x14, 0x08,// p
	0x08, 0x14, 0x14, 0x18, 0x7C,// q
	0x7C, 0x08, 0x04, 0x04, 0x08,// r
	0x48, 0x54, 0x54, 0x54, 0x20,// s
	0x04, 0x3F, 0x44, 0x40, 0x20,// t
	0x3C, 0x40, 0x40, 0x20, 0x7C,// u
	0x1C, 0x20, 0x40, 0x20, 0x1C,// v
	0x3C, 0x40, 0x30, 0x40, 0x3C,// w
	0x44, 0x28, 0x10, 0x28, 0x44,// x
	0x0C, 0x50, 0x50, 0x50, 0x3C,// y
	0x44, 0x64, 0x54, 0x4C, 0x44,// z 122
	0x00, 0x08, 0x36, 0x41, 0x00,// {
	0x00, 0x00, 0x7F, 0x00, 0x00,// |
	0x00, 0x41, 0x36, 0x08, 0x00,// }
	0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
	0x08, 0x1C, 0x2A, 0x08, 0x08, // <-	 127
	
	0x00, 0x00, 0x00, 0x00, 0x00,//  128
	0x00, 0x00, 0x00, 0x00, 0x00,//  129
	0x00, 0x50, 0x30, 0x00, 0x00,// , 130
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,// 140
	0x00, 0x00, 0x00, 0x00, 0x00,// 141
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,// 143
	
	0x00, 0x00, 0x00, 0x00, 0x00,// 144
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,// 150
	0x00, 0x00, 0x00, 0x00, 0x00,// 151
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,// 159
	
	0x00, 0x00, 0x00, 0x00, 0x00,// 160
	0x00, 0x00, 0x00, 0x00, 0x00,// 161
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x00, 0x00, 0x00, 0x00, 0x00,//
	0x7e, 0x4b, 0x4a, 0x43, 0x24, //Ё 168
	0x00, 0x00, 0x00, 0x00, 0x00,// 169
	0x7F, 0x49, 0x49, 0x49, 0x41,// E Є 170
	0x00, 0x00, 0x00, 0x00, 0x00,// 171 
	0x00, 0x00, 0x00, 0x00, 0x00,// 172
	0x00, 0x00, 0x00, 0x00, 0x00,// 173
	0x00, 0x00, 0x00, 0x00, 0x00,// 174
	0x00, 0x00, 0x00, 0x00, 0x00,// Ї 175
	
	0x06, 0x09, 0x09, 0x06, 0x00,// o 176 
	0x00, 0x00, 0x00, 0x00, 0x00,// 177
	0x00, 0x82, 0xFE, 0x82, 0x00, // І  І 178
	0x0, 0x45, 0x7c, 0x41, 0x00, //i 179
	0x00, 0x00, 0x00, 0x00, 0x00,// 180
	0x00, 0x00, 0x00, 0x00, 0x00,// 181
	0x00, 0x00, 0x00, 0x00, 0x00,// 182
	0x00, 0x00, 0x00, 0x00, 0x00,// 183
	0x3c, 0x53, 0x52, 0x53, 0xc,// ё 184
	0x14, 0x7F, 0x14, 0x7F, 0x14,// # 185
	0x3c, 0x52, 0x52, 0x52, 0xc, //е є 186
	0x00, 0x00, 0x00, 0x00, 0x00,// 187
	0x00, 0x00, 0x00, 0x00, 0x00,// 188
	0x00, 0x00, 0x00, 0x00, 0x00,// 189
	0x00, 0x00, 0x00, 0x00, 0x00,// 190
	0x00, 0x00, 0x00, 0x00, 0x00,//  ї 191
	
	0x7E, 0x11, 0x11, 0x11, 0x7E,// А 192
	0x7f, 0x45, 0x45, 0x45, 0x39,// Б
	0x7F, 0x49, 0x49, 0x49, 0x36,// B
	0x7f, 0x01, 0x01, 0x01, 0x03,// Г
	0x60, 0x3e, 0x31, 0x3f, 0x60,// Д
	0x7F, 0x49, 0x49, 0x49, 0x41,// E 
	0x73, 0x0c, 0x7f, 0x0c, 0x73,// Ж
	0x22, 0x49, 0x49, 0x49, 0x36,// З
	0x7f, 0x10, 0x8, 0x4, 0x7f,// 	И 
	0x7f, 0x10, 0x9, 0x4, 0x7f,// 	Й
	0x7F, 0x08, 0x14, 0x22, 0x41,// K 
	0x40, 0x3e, 0x01, 0x01, 0x7f,// Л
	0x7F, 0x02, 0x04, 0x02, 0x7F,// M
	0x7F, 0x08, 0x08, 0x08, 0x7F,// H
	0x3E, 0x41, 0x41, 0x41, 0x3E,// O
	0x7f, 0x01, 0x01, 0x01, 0x7f,// П 207
	
	0x7F, 0x09, 0x09, 0x09, 0x06,// P 208
	0x3E, 0x41, 0x41, 0x41, 0x22,// C 
	0x01, 0x01, 0x7F, 0x01, 0x01,// T 
	0x27, 0x48, 0x48, 0x48, 0x3f,// У 
	0xe, 0x11, 0x7f, 0x11, 0xe,//   Ф 
	0x63, 0x14, 0x08, 0x14, 0x63,// X 
	0x3f, 0x20, 0x20, 0x20, 0x7f,// Ц 
	0x07, 0x08, 0x08, 0x08, 0x7f,// Ч 
	0x3f, 0x20, 0x3f, 0x20, 0x3f,// Ш 
	0x3f, 0x20, 0x3f, 0x20, 0x7f,// Щ 
	0x03, 0x01, 0x7f, 0x48, 0x30,// Ъ 
	0x7f, 0x48, 0x48, 0x30, 0x7f,// Ы 
	0x00, 0x00, 0x7f, 0x48, 0x30,// Ь
	0x22, 0x49, 0x49, 0x49, 0x3e,// Э 
	0x7f, 0x08, 0x3e, 0x41, 0x3e,// Ю  
	0x46, 0x29, 0x19, 0x09, 0x7f,// Я 223
	
	0x7c, 0x12, 0x12, 0x12, 0x7c,// a 224
	0x3e, 0x45, 0x45, 0x45, 0x38,// б
	0x7e, 0x4a, 0x4a, 0x34, 0x00, // в
	0x7e, 0x02, 0x02, 0x04, 0x00, // г 
	0x60, 0x3c, 0x22, 0x3e, 0x60, // д
	0x3c, 0x52, 0x52, 0x52, 0x0c, // e 
	0x76, 0x08, 0x7e, 0x08, 0x76,// ж
	0x24, 0x42, 0x4a, 0x4a, 0x34, // з
	0x7e, 0x60, 0x18, 0x6, 0x7e,// и
	0x7e, 0x60, 0x19, 0x6, 0x7e,// й
	0x7e, 0x08, 0x08, 0x08, 0x76,// k
	0x40, 0x3e, 0x02, 0x02, 0x7e, // л
	0x7e, 0x04, 0x08, 0x04, 0x7e, // м
	0x7e, 0x08, 0x08, 0x08, 0x7e,// н
	0x3c, 0x42, 0x42, 0x42, 0x3c,// o
	0x7e, 0x02, 0x02, 0x02, 0x7e,// п  239
	
	0x7e, 0x12, 0x12, 0x12, 0xc, // p 240
	0x3c, 0x42, 0x42, 0x42, 0x24,// c
	0x02, 0x02, 0x7e, 0x02, 0x02,// т
	0x0e, 0x50, 0x50, 0x50, 0x3e,// y
	0x0c, 0x12, 0x7e, 0x12, 0x0c,// ф
	0x76, 0x08, 0x08, 0x08, 0x76,// x
	0x3e, 0x20, 0x20, 0x20, 0x5e, //ц
	0x0e, 0x10, 0x10, 0x10, 0x7e, //ч
	0x3e, 0x20, 0x3e, 0x20, 0x3e,//ш
	0x3e, 0x20, 0x3e, 0x20, 0x7e,//щ
	0x06, 0x02, 0x7e, 0x48, 0x30, //ъ 
	0x7e, 0x48, 0x30, 0x00, 0x7e,// ы
	0x00, 0x00, 0x7e, 0x48, 0x30,// ь 
	0x24, 0x42, 0x4a, 0x4a, 0x3c,//э 
	0x7e, 0x08, 0x3c, 0x42, 0x3c,//ю
	0x00, 0x4c, 0x32, 0x12, 0x7e,//я 255
	

    
};

#endif

 

https://youtu.be/pKU_4lISd2Y

dneese
Offline
Зарегистрирован: 20.12.2018

а для DMD2 нужно изменить в файле DMD2-Text.cpp который в папке с библиотекой.

в строке 41:

 char c = letter;

 

на:

unsigned char c = letter;

 

  • unsigned char, дает вам как минимум диапазон от 0 до 255.
dneese
Offline
Зарегистрирован: 20.12.2018

IvanP пишет:

Ардуино IDE разве не кодировке UTF-8. Берем таблицу кодировки и получается что:

диапазону 0x80(128) — 0x8F(143) соответствуют маленькие буквы от «р» до «я»

с 0x90 и до 0xAF идут заглавные по порядку «А» — «Я» исключая «Ё»

и в хвосте с 0xB0 до 0xBF маленькие от «а» до «п». ?

 в IDE Arduino в файле preference только когда IDE Arduino не запущена

заменить в строчке 67 preproc.substitute_unicode=true

на preproc.substitute_unicode=false
sqrt8
Offline
Зарегистрирован: 28.01.2019

Уважаемый dneese спасибо! сделал как написано выше, попробовал ваш шрифт, всё работает.

Подумал прикрутить к этому всему bluetooth и сделать как у этого чувака https://create.arduino.cc/projecthub/abhijitbrain/wireless-notice-board-arduino-uno-dmd-9ff29e  но сталкнулся с проблемкой,  не выводится русские символы. Делал я так,  русифицированный шрифт  положил в папку с библиотекой DMD и на всякий случай еще и в папку со скетчем. Скетч я использовал как в статье, добавив русский таким образом  #include "SystemFont5x7rus.h" и dmd.selectFont(SystemFont5x7); в итоге подключившись к bluetooth я отправляю в терминал английские буквы и они высвечиваются на "табло" как и положено, а вот русские буквы не совсем т.е. я к примеру пишу "привет" а высвечивается  "р  р  ро," и т.д. в чём может быть проблема? подскажите пожалуйста товарищи!

dneese
Offline
Зарегистрирован: 20.12.2018

ну во первых ссылку которую вы дали на чувака, ведёт на не существующую страницу 

во вторых

sqrt8 пишет:

Скетч я использовал как в статье, добавив русский таким образом  #include "SystemFont5x7rus.h" и dmd.selectFont(SystemFont5x7);

 в чём может быть проблема? подскажите пожалуйста товарищи!

#include "SystemFont5x7rus.h" 

и 

dmd.selectFont(SystemFont5x7);

разницу и ошибку не видите?

в третьих, преобразуй сам файл скетча в кодировку ANSI, ежели в IDE отключил юникод

ну а файл шрифта нужно ложить только в папку с библиотекой

https://www.youtube.com/watch?v=10yHjO0i3PA

sqrt8
Offline
Зарегистрирован: 28.01.2019

за ссылку извиняюсь.

переименовал #include "SystemFont5x7rus.h"  в "SystemFont5x7.h" и dmd.selectFont(SystemFont5x7) вроде это особой роли не играет, но могу ошибаться.

преобразовал кодировку в ANSI через Notepad++ (надеюсь это так делается) сменил текст в скетче на "привет всем" и он действительно стал отображаться на панеле, но когда я пытаюсь с телефона  отправить текст "привет" на русском снова выходит "p с рёрip c," английские символы отображаются нормально

 

dneese
Offline
Зарегистрирован: 20.12.2018

А с телефона подозреваю текст отпраляете приложением блютуз терминал, но кодировку charset в настройках с utf8 не переключили на windows 1251 как в шрифте библиотеки.? На крайний случай можно отправлять utf8 и конвертить как написано тут

sqrt8
Offline
Зарегистрирован: 28.01.2019

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

Благодарю, на дня попытаюсь конвертировать.

sqrt8
Offline
Зарегистрирован: 28.01.2019

\

dneese
Offline
Зарегистрирован: 20.12.2018

sqrt8 пишет:

\

взял первое попавшиеся приложение и там обнаружил настройки кодировки

sqrt8
Offline
Зарегистрирован: 28.01.2019

эх, вот я лошара)  со смены приду и попробую

sqrt8
Offline
Зарегистрирован: 28.01.2019

Спасибо Вам dneese.  Сменил кодировку в терминале и всё отображается как надо.  

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Дорого времени суток. Нужна помощь. Имеется  ардуино уно, светодиодная  панель P10 32x16, минимальный опыт работы с ардуино и огромное  желание "сотворить девайс". Суть устройства вот в чем. На дисплее 4 цифры с разделительными точками 00:00  (как для часов). К пинам 0, 1, 2, 3  подключены  одноименные  кнопки с  общим плюсом. Каждое  нажатие  на кнопку 0  увеличивает  значение  старшего  разряда на  единицу от 0 до 9 по кругу .  Остальные кнопки  работают аналогично: 1, для третьего разряда, 2 для  второго  разрада и 3 для первого, самого младшего.  Цифры  на дисплей  выводятся,  значения  программно  меняются. А вот  как  это реализовать на кнопках разобраться не могу. Буду благодарен за любую подсказку.

dneese
Offline
Зарегистрирован: 20.12.2018

Достаточно почитать спраку по digitalRead

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Читал и пробовал, пробовал и читал... неделю уже как бьюсь. Использую модифицированный  скетч  из   DMD,  examples,  dmd_clock_readout.pde. Убрал на мой взгляд лишнее, отцентровал. А куда прикрутить digitalReade  мозгов не хватает. Посмотрите  пож. скетч, если не затруднит - на правильном пути хоть? А если подправите на примере одной кнопки, буду безмерно благодарен. Спасибо. P.S. Девайс  сей будет использоваться в детском саду для спортивных соревнований. 

 

#include <SPI.h>        //
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"

 DMD dmd(1,1);

void ScanDMD()
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.drawChar(  0,  1,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  7,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 16,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 24,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 14,  2, ':', GRAPHICS_OR);   // clock colon overlay on
   
}
void setup(void)
{
   
   Timer1.initialize( 500 );           //
   Timer1.attachInterrupt( ScanDMD );   //
 
   dmd.selectFont(Arial_Black_16);
   pinMode(0,INPUT);
   digitalWrite(0,LOW);
   pinMode(1,INPUT);
   digitalWrite(1,LOW);
   pinMode(2,INPUT);
   digitalWrite(2,LOW);
   pinMode(3,INPUT);
   digitalWrite(3,LOW);
}
 
void loop(void)
{
   unsigned int ui;
   ui = 0000;
   ShowClockNumbers( ui, true );
   delay( 100);
}
 
dneese
Offline
Зарегистрирован: 20.12.2018

не уверен что правильно но попробуйте так:

#include <SPI.h>        //
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"
 DMD dmd(1,1);

unsigned int ui;

void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.drawChar(  0,  1,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  7,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 16,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 24,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 14,  2, ':', GRAPHICS_OR);   // clock colon overlay on
   
}
void setup(void)
{
   
   Timer1.initialize( 500 );           //
   Timer1.attachInterrupt( ScanDMD );   //
 
   dmd.selectFont(Arial_Black_16);
   ui = 0000;

  pinMode(0, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
 
void loop(void)
{

 if(digitalRead(0)==HIGH)//если кнопка нажата ..
 {
   ui = ui+1; // прибавляем 1
 ShowClockNumbers( ui, true ); 
}

 if(digitalRead(1)==HIGH)//если кнопка нажата ..
 {
   ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true ); 
}

 if(digitalRead(2)==HIGH)//если кнопка нажата ..
 {
   ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true ); 
}

  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 {
   ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true ); 
}
 
   delay( 100);
}

 

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Ругается. 

collect2.exe: error: ld returned 5 exit status
 
exit status 1
Ошибка компиляции.
 
 
 
VsemDobra
Offline
Зарегистрирован: 24.03.2019

На Ваш скетч ругается, компилироваться не хочет. Такое впечатление, что   unsigned int ui;  не в том месте стоит. Вернул ее в void loop,  компилируется и работает, но работает криво. Во первых дисплей мерцает с интервалом в одну секунду (но думаю, это благодаря delai). Во вторых  нажатием на одну из кнопок прибавляется единица и сразу обнуляется. Помоготе навести порядок в скетче. Пожалуйста.

#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"
 
//Fire up the DMD library as dmd
DMD dmd(1,1);
 
/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
  dmd.scanDisplayBySPI();
}
 
/*--------------------------------------------------------------------------------------
  Show clock numerals on the screen from a 4 digit time value, and select whether the
  flashing colon is on or off
--------------------------------------------------------------------------------------*/
void ShowClockNumbers ( unsigned int uiTime, byte bColonOn )
 
{
   dmd.clearScreen(true);
   dmd.drawChar(  0,  1, '0'+((uiTime%10000)/1000), GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  8,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 17,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 25,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 15,  3, '.', GRAPHICS_OR     );   // clock colon overlay on
      
}
 
/*--------------------------------------------------------------------------------------
  setup
  Called by the Arduino architecture before the main loop begins
--------------------------------------------------------------------------------------*/
void setup(void)
{
   
   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 5000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
 
   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
   dmd.selectFont(Arial_Black_16);
 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)
 
   
}
/*--------------------------------------------------------------------------------------
  loop
  Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
  unsigned int ui;
   
   // 10 x 14 font clock, including demo of OR and NOR modes for pixels so that the flashing colon can be overlayed
   ui = 0000;
   ShowClockNumbers( ui, true );
   delay( 100 );
 
{
   
  
   if(digitalRead(1)==HIGH)//если кнопка нажата ..
   {
     ui = ui+1; // прибавляем 1
   ShowClockNumbers( ui, true );
  }
   
   if(digitalRead(2)==HIGH)//если кнопка нажата ..
   {
     ui = ui+10; // прибавляем 10
   ShowClockNumbers( ui, true );
  }
   
    if(digitalRead(3)==HIGH)//если кнопка нажата ..
   {
     ui = ui+100; // прибавляем 100
   ShowClockNumbers( ui, true );
  }
  
    if(digitalRead(4)==HIGH)//если кнопка нажата ..
   {
     ui = ui+1000; // прибавляем 1000
   ShowClockNumbers( ui, true );
  }
     delay( 1000);
  }
 
 
}
 
dneese
Offline
Зарегистрирован: 20.12.2018

Зачем в loop ставите опять
ui = 0000 ?

Посмотрите мой пример ещё раз

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Ну так не хочет компилироваться ... Я понимаю, что косячу, но как сделать правильно не хватает ума. К стати спасибо, что отозвались. 

lean_74
Offline
Зарегистрирован: 22.12.2015

VsemDobra пишет:

спасибо, что отозвались. 

вставь код правильно, тогда может кто и поможет. 

VsemDobra
Offline
Зарегистрирован: 24.03.2019
#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"

//Fire up the DMD library as dmd
DMD dmd(1,1);
 
/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

/*--------------------------------------------------------------------------------------
  Show clock numerals on the screen from a 4 digit time value, and select whether the
  flashing colon is on or off
--------------------------------------------------------------------------------------*/
void ShowClockNumbers ( unsigned int uiTime, byte bColonOn )

{
   dmd.clearScreen(true);
   dmd.drawChar(  0,  1, '0'+((uiTime%10000)/1000), GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  8,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 17,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 25,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 15,  3, '.', GRAPHICS_OR     );   // clock colon overlay on
      
}

/*--------------------------------------------------------------------------------------
  setup
  Called by the Arduino architecture before the main loop begins
--------------------------------------------------------------------------------------*/
void setup(void)
{
   
   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 5000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
   dmd.selectFont(Arial_Black_16);

  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)

   
}
/*--------------------------------------------------------------------------------------
  loop
  Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
  unsigned int ui;
   
   // 10 x 14 font clock, including demo of OR and NOR modes for pixels so that the flashing colon can be overlayed
   ui = 0000;
   ShowClockNumbers( ui, true );
   delay( 100 );

{
   
  
   if(digitalRead(1)==HIGH)//если кнопка нажата ..
   {
     ui = ui+1; // прибавляем 1
   ShowClockNumbers( ui, true );
  }
   
   if(digitalRead(2)==HIGH)//если кнопка нажата ..
   {
     ui = ui+10; // прибавляем 10
   ShowClockNumbers( ui, true );
  }
   
    if(digitalRead(3)==HIGH)//если кнопка нажата ..
   {
     ui = ui+100; // прибавляем 100
   ShowClockNumbers( ui, true );
  }
  
    if(digitalRead(4)==HIGH)//если кнопка нажата ..
   {
     ui = ui+1000; // прибавляем 1000
   ShowClockNumbers( ui, true );
  }
     delay( 1000);
  }


}

 

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Код из сообщения 292  любезно предоставленный форумчанином не хочет компилироваться.  Этот компилируется, но работает криво.

dneese
Offline
Зарегистрирован: 20.12.2018

что у Вас там не компилируется? вот скрин, всё работает

https://images2.imgbox.com/7b/4e/HzqzEoSu_o.png

вопросы по ошибкам компиляции в других темах.

Читайте код и по коду задавайте вопросы, а мы ответим если будем знать ответ.

Вы в Loop тулите переменную и назначаете её значение 0000, потом нажимаете кнопку меняете значение

и спрашиваете почему опять 0000? читаёте спавку что такое loop, это цикл который повторяется

ui = 0000; ставте в сетуп, одноразовое выполнение в начале программы

ну и вывод на екран ShowClockNumbers( ui, true );  тоже раз выведите в начале

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

делей вам вообще не нужен.