Куб Alexgyver Русский шрифты.
- Войдите на сайт для отправки комментариев
Добрый вечер!
Сделал куб по проекту Алекса, но там нет поддержки русского языка. А очень хочется сделать с поддержкой русского. К сожалению я не программировал ардуино до этого, да и не программировал ни когда за исключением каких-то мелочей.
https://alexgyver.ru/arduino-led-cube/
Куб заработал, но вот с кодом я не смог решить своими силами. По этому прошу помощи.
{0x02, 0x02, 0x02, 0x02, 0x0C, 0x02, 0x02, 0x02},
// } 0x7d 125
{0x00, 0x00, 0x00, 0x46, 0x49, 0x31, 0x00, 0x00},
// ~ 0x7e 126
{0x7e, 0x09, 0x09, 0x09, 0x7e}, // А 192
Вот кусочек файла fonts.h. Я заметил что английские буквы делались в разрешении 8х8, а вот русские 5х8. Хотя я думаю это от куда-то скопировано и всё. Не правили русские шрифты. Я попробовал создать сам русские буквы. На сайте http://arduino.on.kg/matrix-font . И меня постигла неудача, куб по русски не стал писать. Я пробовал подставить код английских букв русским, но результат тот-же. Я попробовал в редакторе создать английскую букву и понял что они не соответствуют тому что записано в файле fonts.h . Прошу вас помочь разобраться. Спасибо
Тут гайвера нет. Спросите у него, там где он есть :)
ну так и делай 8х8
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Подрисовал несколько символов:
{0x18, 0x24, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42}, // А 192 {0x7e, 0x02, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e}, // Б {0x3E, 0x42, 0x42, 0x3E, 0x42, 0x42, 0x42, 0x3E}, // В {0x7e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // Г {0x18, 0x24, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x42}, // Д {0x7E, 0x02, 0x02, 0x3E, 0x02, 0x02, 0x02, 0x7E}, // Е {0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92}, // ЖКаждое число это одна строка символа начиная с верхней. !!! Младший бит идет первым !!!
https://wokwi.com/projects/331788669107044948
Подрисовал несколько символов:
{0x18, 0x24, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42}, // А 192 {0x7e, 0x02, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e}, // Б {0x3E, 0x42, 0x42, 0x3E, 0x42, 0x42, 0x42, 0x3E}, // В {0x7e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // Г {0x18, 0x24, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x42}, // Д {0x7E, 0x02, 0x02, 0x3E, 0x02, 0x02, 0x02, 0x7E}, // Е {0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92}, // ЖКаждое число это одна строка символа начиная с верхней. !!! Младший бит идет первым !!!
https://wokwi.com/projects/331788669107044948
Там у тебя много букафф )))
ua6em а разве за количество букафф не доплачивают ???
Warcan я сделал страничку в Excel - сможете сами нарисовать шрифт. Куда скинуть ?
Попробовал ваши буквы вставить. Но хочет показывать. Видимо гдето в коде что то не то
warcan@mail.ru
Нарисую конечно сам. Спасибо!
Выслал. Рисуйте 1 (единичками) там где нужны точки и 0 (ноликами) или очищайте там где не нужны.
Русские буквы кодируются двумя символами, а английские одним.
Вот так надо добавить функцию для перекодировки в Windows-1251 и через неё объявлять выводимую строку... https://wokwi.com/projects/331788669107044948
String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } String disp_text = utf8rus("Test-АБВГДЕЖ");Огромное спасибо за файл для шрифта. Я с помощью него создал шрифты. Но в прямую это не заработало. Вот что у меня получилось. Но бейте особо я первый раз шрифт рисовал.
const uint8_t fontHEX[][8] PROGMEM = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x20 32 {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02}, // ! 0x21 33 {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // " 0x22 34 {0x28, 0x28, 0x7E, 0x14, 0x14, 0x3F, 0x0A, 0x0A}, // # 0x23 35 {0x04, 0x1E, 0x05, 0x05, 0x0E, 0x14, 0x14, 0x0F}, // $ 0x24 36 {0x46, 0x49, 0x29, 0x26, 0x90, 0x50, 0x48, 0x88}, // % 0x25 37 {0x06, 0x09, 0x09, 0x26, 0x29, 0x11, 0x31, 0x4E}, // & 0x26 38 {0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' 0x27 39 {0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02}, // ( 0x28 40 {0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02}, // ) 0x29 41 {0x15, 0x0E, 0x15, 0x04, 0x00, 0x00, 0x00, 0x00}, // * 0x2a 42 {0x00, 0x08, 0x08, 0x08, 0x7F, 0x08, 0x08, 0x08}, // + 0x2b 43 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02}, // , 0x2c 44 {0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00}, // - 0x2d 45 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02}, // . 0x2e 46 {0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01}, // / 0x2f 47 {0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}, // 0 0x30 48 {0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0E}, // 1 0x31 49 {0x0E, 0x11, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1F}, // 2 0x32 50 {0x0E, 0x11, 0x10, 0x0C, 0x10, 0x10, 0x11, 0x0E}, // 3 0x33 51 {0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x08}, // 4 0x34 52 {0x1F, 0x01, 0x01, 0x0F, 0x10, 0x10, 0x11, 0x0E}, // 5 0x35 53 {0x0C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x11, 0x0E}, // 6 0x36 54 {0x1F, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02}, // 7 0x37 55 {0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x11, 0x0E}, // 8 0x38 56 {0x0E, 0x11, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x06}, // 9 0x39 57 {0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02}, // : 0x3a 58 {0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02}, // ; 0x3b 59 {0x00, 0x40, 0x30, 0x0C, 0x02, 0x0C, 0x30, 0x40}, // < 0x3c 60 {0x00, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x00}, // = 0x3d 61 {0x00, 0x02, 0x0C, 0x30, 0x40, 0x30, 0x0C, 0x02}, // > 0x3e 62 {0x07, 0x08, 0x08, 0x04, 0x02, 0x02, 0x00, 0x02}, // ? 0x3f 63 {0x7C, 0x82, 0x39, 0x25, 0x25, 0x25, 0xF9, 0x02}, // @ 0x40 64 {0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x42}, // A 0x41 65 {0x1E, 0x22, 0x22, 0x1E, 0x22, 0x22, 0x22, 0x1E}, // B 0x42 66 {0x78, 0x04, 0x02, 0x02, 0x02, 0x02, 0x04, 0x78}, // C 0x43 67 {0x1E, 0x22, 0x42, 0x42, 0x42, 0x42, 0x22, 0x1E}, // D 0x44 68 {0x3E, 0x02, 0x02, 0x1E, 0x02, 0x02, 0x02, 0x3E}, // E 0x45 69 {0x3E, 0x02, 0x02, 0x3E, 0x02, 0x02, 0x02, 0x02}, // F 0x46 70 {0x78, 0x04, 0x02, 0x02, 0x72, 0x42, 0x44, 0x78}, // G 0x47 71 {0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42}, // H 0x48 72 {0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C}, // I 0x49 73 {0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C}, // J 0x4a 74 {0x22, 0x12, 0x0A, 0x06, 0x06, 0x0A, 0x12, 0x22}, // K 0x4b 75 {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3C}, // L 0x4c 76 {0x63, 0x63, 0x55, 0x55, 0x49, 0x49, 0x41, 0x41}, // M 0x4d 77 {0x46, 0x46, 0x4A, 0x4A, 0x52, 0x52, 0x62, 0x62}, // N 0x4e 78 {0x1C, 0x22, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1C}, // O 0x4f 79 {0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x02}, // P 0x50 80 {0x1C, 0x22, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1C}, // Q 0x51 81 {0x1E, 0x22, 0x22, 0x22, 0x1E, 0x12, 0x22, 0x42}, // R 0x52 82 {0x3C, 0x02, 0x02, 0x1C, 0x20, 0x20, 0x20, 0x1E}, // S 0x53 83 {0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, // T 0x54 84 {0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C}, // U 0x55 85 {0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08}, // V 0x56 86 {0x91, 0x91, 0x91, 0xAA, 0xAA, 0xAA, 0x44, 0x44}, // W 0x57 87 {0x22, 0x22, 0x14, 0x08, 0x08, 0x14, 0x22, 0x22}, // X 0x58 88 {0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x08, 0x08}, // Y 0x59 89 {0x3E, 0x20, 0x10, 0x08, 0x08, 0x04, 0x02, 0x3E}, // Z 0x5a 90 {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, // [ 0x5b 91 {0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04}, // \ 0x5c 92 {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, // ] 0x5d 93 {0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00}, // ^ 0x5e 94 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // _ 0x5f 95 {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ` 0x60 96 {0x00, 0x00, 0x1C, 0x20, 0x3C, 0x22, 0x22, 0x3C}, // a 0x61 97 {0x02, 0x02, 0x1E, 0x22, 0x22, 0x22, 0x22, 0x1E}, // b 0x62 98 {0x00, 0x00, 0x38, 0x04, 0x04, 0x04, 0x04, 0x38}, // c 0x63 99 {0x20, 0x20, 0x3C, 0x22, 0x22, 0x22, 0x22, 0x3C}, // d 0x64 100 {0x00, 0x00, 0x1C, 0x22, 0x3E, 0x02, 0x22, 0x1C}, // e 0x65 101 {0x30, 0x08, 0x08, 0x1C, 0x08, 0x08, 0x08, 0x08}, // f 0x66 102 {0x3C, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x1C}, // g 0x67 103 {0x02, 0x02, 0x02, 0x1E, 0x22, 0x22, 0x22, 0x22}, // h 0x68 104 {0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, // i 0x69 105 {0x10, 0x00, 0x18, 0x10, 0x10, 0x10, 0x10, 0x0C}, // j 0x6a 106 {0x02, 0x02, 0x12, 0x0A, 0x06, 0x0A, 0x12, 0x22}, // k 0x6b 107 {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, // l 0x6c 108 {0x00, 0x00, 0x37, 0x49, 0x49, 0x49, 0x49, 0x49}, // m 0x6d 109 {0x00, 0x00, 0x1E, 0x22, 0x22, 0x22, 0x22, 0x22}, // n 0x6e 110 {0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x22, 0x1C}, // o 0x6f 111 {0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x02}, // p 0x70 112 {0x3C, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20}, // q 0x71 113 {0x00, 0x00, 0x34, 0x0C, 0x04, 0x04, 0x04, 0x04}, // r 0x72 114 {0x00, 0x00, 0x38, 0x04, 0x0C, 0x30, 0x20, 0x1C}, // s 0x73 115 {0x08, 0x08, 0x3C, 0x08, 0x08, 0x08, 0x08, 0x30}, // t 0x74 116 {0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3C}, // u 0x75 117 {0x00, 0x00, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08}, // v 0x76 118 {0x00, 0x00, 0x49, 0x49, 0x55, 0x55, 0x22, 0x22}, // w 0x77 119 {0x00, 0x00, 0x22, 0x14, 0x08, 0x08, 0x14, 0x22}, // x 0x78 120 {0x00, 0x00, 0x12, 0x12, 0x12, 0x1C, 0x10, 0x0C}, // y 0x79 121 {0x00, 0x00, 0x3C, 0x20, 0x10, 0x08, 0x04, 0x3C}, // z 0x7a 122 {0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04}, // { 0x7b 123 {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // | 0x7c 124 {0x02, 0x02, 0x02, 0x02, 0x0C, 0x02, 0x02, 0x02}, // } 0x7d 125 {0x00, 0x00, 0x00, 0x46, 0x49, 0x31, 0x00, 0x00}, // ~ 0x7e 126 {0x18, 0x24, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42}, // А 192 {0x7e, 0x02, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e}, // Б {0x3E, 0x42, 0x42, 0x3E, 0x42, 0x42, 0x42, 0x3E}, // В {0x7e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // Г {0x18, 0x24, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x42}, // Д {0x7E, 0x02, 0x02, 0x7E, 0x02, 0x02, 0x02, 0x7E}, // Е {0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92}, // Ж {0x38, 0x44, 0x40, 0x20, 0x40, 0x40, 0x44, 0x38}, // З {0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42}, // И {0x5A, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42}, // Й {0x22, 0x12, 0x0A, 0x06, 0x06, 0x0A, 0x12, 0x22}, // К {0x7C, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x46}, // Л {0x63, 0x63, 0x55, 0x55, 0x49, 0x49, 0x41, 0x41}, // М {0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42}, // Н {0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18}, // О {0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42}, // П {0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x02}, // Р {0x38, 0x44, 0x02, 0x02, 0x02, 0x02, 0x44, 0x38}, // С {0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, // Т {0x44, 0x44, 0x44, 0x78, 0x40, 0x40, 0x44, 0x38}, // У {0x7C, 0x92, 0x92, 0x92, 0x92, 0x7C, 0x10, 0x10}, // Ф {0x22, 0x22, 0x14, 0x08, 0x08, 0x14, 0x22, 0x22}, // Х {0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x7E, 0x40}, // Ц {0x44, 0x44, 0x44, 0x7C, 0x40, 0x40, 0x40, 0x40}, // Ч {0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x7F}, // Ш {0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xFF, 0x80}, // Щ {0x06, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x44, 0x3c}, // Ъ {0x42, 0x42, 0x42, 0x4E, 0x52, 0x52, 0x52, 0x4E}, // Ы {0x02, 0x02, 0x02, 0x3E, 0x42, 0x42, 0x42, 0x3E}, // Ь {0x3C, 0x42, 0x40, 0x7C, 0x40, 0x40, 0x42, 0x3C}, // Э {0x32, 0x4A, 0x4A, 0x4E, 0x4A, 0x4A, 0x4A, 0x32}, // Ю {0x7C, 0x42, 0x42, 0x7C, 0x50, 0x48, 0x44, 0x42}, // Я 223 {0x00, 0x1C, 0x22, 0x20, 0x3C, 0x22, 0x22, 0x1C}, //a 224 {0x06, 0x18, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x1C}, //б {0x00, 0x1E, 0x22, 0x22, 0x1E, 0x22, 0x22, 0x1E}, //в {0x00, 0x3E, 0x22, 0x02, 0x02, 0x02, 0x02, 0x02}, //г {0x00, 0x3C, 0x28, 0x24, 0x22, 0x3E, 0x22, 0x22}, //д {0x00, 0x1C, 0x22, 0x22, 0x3E, 0x02, 0x02, 0x1C}, //e {0x00, 0x2A, 0x2A, 0x2A, 0x1C, 0x2A, 0x2A, 0x2A}, //ж {0x00, 0x1C, 0x22, 0x20, 0x1C, 0x20, 0x22, 0x1C}, //з {0x00, 0x22, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22}, //и {0x00, 0x2A, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22}, //й {0x00, 0x22, 0x12, 0x0A, 0x06, 0x0A, 0x12, 0x22}, //к {0x00, 0x3C, 0x28, 0x28, 0x28, 0x28, 0x2A, 0x24}, //л {0x00, 0x22, 0x36, 0x2A, 0x22, 0x22, 0x22, 0x22}, //м {0x00, 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22}, //н {0x00, 0x1C, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C}, //o {0x00, 0x3E, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22}, //п {0x00, 0x1E, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x02}, //p {0x00, 0x1C, 0x22, 0x02, 0x02, 0x02, 0x22, 0x1C}, //c {0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, //т {0x00, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x22, 0x1C}, //у {0x00, 0x08, 0x1C, 0x2A, 0x2A, 0x2A, 0x1C, 0x08}, //ф {0x00, 0x22, 0x14, 0x14, 0x08, 0x14, 0x14, 0x22}, //x {0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x3E, 0x20}, //ц {0x00, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x20}, //ч {0x00, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x3E}, //ш {0x00, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x3E, 0x20}, //щ {0x00, 0x06, 0x04, 0x04, 0x1C, 0x24, 0x24, 0x1C}, //ъ {0x00, 0x22, 0x22, 0x22, 0x2E, 0x32, 0x32, 0x2E}, //ы {0x00, 0x02, 0x02, 0x02, 0x0E, 0x12, 0x12, 0x0E}, //ь {0x00, 0x1C, 0x22, 0x20, 0x3C, 0x20, 0x22, 0x1C}, //э {0x00, 0x12, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x12}, //ю {0x00, 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22}, //я 225 }; /* АЛЬТЕРНАТИВНЫЙ РУССКИЙ КАПС!!! Проверяйте =) {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}, //Я */ // интерпретатор кода символа по ASCII в его номер в массиве fontHEX uint8_t getFont(uint8_t font, uint8_t row) { font = font - '0' + 16; // перевод код символа из таблицы ASCII в номер согласно нумерации массива if (font < 256) return pgm_read_byte(&(fontHEX[font][row])); // для английских букв и символов else return fontHEX[font - 65][row]; // для русских букв и символов (смещение -65 по массиву) }Правильно ли я понимаю что мне надо в коде заменить
String disp_text = "AlexGyver SHOW SUBSCRIBE!"
на вот эту
String disp_text = utf8rus("Test-АБВГДЕЖ");
И вставить код который вы предоставили где-то в выше строки String disp_text. Попробовал сделать так и увы не заработало. Английский текст фразы читаем, а вот вместо русских букв какие-то полоски и всё.
Или я что-то не так сделал.
String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; }А откуда взялось про pgm ???
202if(font < 256)returnpgm_read_byte(&(fontHEX[font][row]));// для английских букв и символов203elsereturnfontHEX[font - 65][row];// для русских букв и символов (смещение -65 по массиву)Это видимо вторая версия ... Откда тогда 256 ???
uint8_t getFont(uint8_t font, uint8_t row) { font = font - '0' + 16; // перевод код символа из таблицы ASCII в номер согласно нумерации массива if (font < 126) return pgm_read_byte(&(fontHEX[font][row])); // для английских букв и символов else return pgm_read_byte(&(fontHEX[font - 65][row])); // для русских букв и символов (смещение -65 по массиву) }Вот так попробуйте для шрифта в PROGMEM...
byte mirrorFont = 0; for (byte i = 0; i < 7; i++) { if (thisFont & (1 << 6 - i)) mirrorFont |= (1 << i); else mirrorFont |= (0 << i); } if (MIRROR_FONT) cube[i][0] = mirrorFont; else cube[i][0] = thisFont;Вот тут у Алекса почему то зеркалится только 7 бит шрифта ! Так что если ваш шрифт попадает в крайний правый столбец, то будет лажа. А это else mirrorFont |= (0 << i); очередной шедевр ....
byte mirrorFont = 0; for (byte i = 0; i < 8; i++) { if (thisFont & (1 << 7 - i)) mirrorFont |= (1 << i); } if (MIRROR_FONT) cube[i][0] = mirrorFont; else cube[i][0] = thisFont;Так ИМХО зеркалится все 8 бит ...
Да стало читаться. Но буквы идут смещённые на одну вертикальную колонну вправо.
https://fex.net/ru/s/5mxsysv
Видео того что куб показывает.
http://arduino.ru/forum/programmirovanie/kub-alexgyver-russkii-shrifty#comment-655149
http://arduino.ru/forum/programmirovanie/kub-alexgyver-russkii-shrifty#comment-655151
вот это надо поправить ! У Алекса без косяков не бывает !!!
вот это надо поправить ! У Алекса без косяков не бывает !!!
Это я понимаю, по этому сюда и пришёл просить помощи.
Подправил я как вы рекомендовали и всё стало работать нормально.
Но я вывел все символы и понял что придётся править много букв английских. Буду править.
А ещё подскажите пожалуйста, вот хотел бы исключить некоторые не нужные мне режимы. А в идеале ещё сделать так что бы они переключались по времени последовательно от одного к следующему.
А ещё подскажите пожалуйста, вот хотел бы исключить некоторые не нужные мне режимы. А в идеале ещё сделать так что бы они переключались по времени последовательно от одного к следующему.
дай водицы попить, а то так есть хочется, что переночевать негде... )))
Тут вас выручит самообразование в области C/C++ или платный раздел форума ...
Ещё раз спасибо за помощь. Ваш файл для создания шрифта очень помог. Подскажите пожалуйста у меня вроде получилось отключить режимы, вот вопрос правильно ли я понял что надо убирать их в этой части кода.
В частности я закомментировал режим волна и поправил номера case, в противном случае при переключении режимов с клавиш куб ничего не показывал при нажатии клавиши далее он показывал следующий режим. И ещё подправил вот это #define TOTAL_EFFECTS 10 // количество эффектов
Возможно это корявое решение, но пока я не способен на более правильное.
switch (currentEffect) { case RAIN: rain(); break; case PLANE_BOING: planeBoing(); break; case SEND_VOXELS: sendVoxels(); break; case WOOP_WOOP: woopWoop(); break; case CUBE_JUMP: cubeJump(); break; case GLOW: glow(); break; case TEXT: if (showResult) { String result = String(score); text(result, result.length()); } else { text(disp_text, disp_text.length()); } break; case LIT: lit(); break; // case 8: sinusFill(); break; case 8: sinusThin(); break; case 9: walkingCube(); break; case 11: snake(); break; case 12: shooter(); break; case 13: tunnel(); break; } renderCube(); }И ещё вопрос вот эта часть кода отвечает за смену режима работы куба. И попробую спросить можно ли сюда попробовать прикрутить автоматическую смену режимов работы куба? Что то вроде условия по таймеру.
void loop() { butt1.tick(); butt2.tick(); if (butt1.isClick()) { currentEffect++; if (currentEffect >= TOTAL_EFFECTS) currentEffect = 0; changeMode(); } if (butt2.isClick()) { currentEffect--; if (currentEffect < 0) currentEffect = TOTAL_EFFECTS - 1; changeMode(); } if (butt1.isStep()) { // если кнопка была удержана (это для инкремента) modeTimer += 10; } if (butt2.isStep()) { // если кнопка была удержана (это для инкремента) modeTimer -= 10; }Читаете статью "Blink без delay", берете оттуда код, вместо блинка вставляете currentEffect = (currentEffect + 1) % TOTAL_EFFECTS;