1

Wan-Derer

★★★★✩✩✩
Команда форума
31 Июл 2018
1,440
281
Москва
wan-derer.ru
Нужен либо дисплей с прошитой кириллицей, либо библиотека, умеющая формировать русские символы на обычном дисплее.
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
А можно как до дописать до этой библиотеки что в https://alexgyver.ru/gyverstring/ чтобы она понимала украинские буквы і, ї, ґ . Я то понял что там ее код нужно прописать, а как этот код узнать? Как выставить какие диоды должны светить?
 

Эдуард Анисимов

★★★★✩✩✩
23 Сен 2019
765
218
54
Марий-Эл
Всё зависит от того, какой метод собираетесь использовать.
Или искать готовый или нарисовать самому.
Можете посмотреть этот пример. Он рабочий. Проверял.

Туда можно добавить недостающие символы на нужные позиции.
 

Вложения

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
Всё зависит от того, какой метод собираетесь использовать.

Или искать готовый или нарисовать самому.
Можете посмотреть этот пример. Он рабочий. Проверял.

Туда можно добавить недостающие символы на нужные позиции.
{0x44, 0x28, 0x10, 0x28, 0x44}, // x 0x78 120
{0x0c, 0x50, 0x50, 0x50, 0x3c}, // y 0x79 121
{0x44, 0x64, 0x54, 0x4c, 0x44}, // z 0x7a 122
{0x00, 0x08, 0x36, 0x41, 0x41}, // { 0x7b 123
{0x00, 0x00, 0x7f, 0x00, 0x00}, // | 0x7c 124
{0x41, 0x41, 0x36, 0x08, 0x00}, // } 0x7d 125
{0x04, 0x02, 0x04, 0x08, 0x04}, // ~ 0x7e 126

{0x7E, 0x11, 0x11, 0x11, 0x7E}, //__А (0xC0).
{0x7F, 0x49, 0x49, 0x49, 0x33}, //__Б (0xC1).
{0x7F, 0x49, 0x49, 0x49, 0x36}, //__В (0xC2).

вот как у Алекса ГуверА)
 

Эдуард Анисимов

★★★★✩✩✩
23 Сен 2019
765
218
54
Марий-Эл
Методов русификации или введение любого другого языка всего один. Переписывание 8ми ячеек памяти индикатора и вывод их на экран на лету.
Методик реализации много.
Я думаю информации на сайте Гайвера достаточно, что бы сделать всё самому.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
@mserega, тут смотрите, я правил библиотеку под украинские буквы, правда я ее ещё и порезал, слишком большая она для моих целей. Русские и украинские буквы выводятся только заглавные. Это позволило уменьшить ее объем при компиляции практически вдвое.
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
0x7C, 0x04, 0x05, 0x04, 0x00, //81 129 Ѓ D0 83
0x00, 0x78, 0x0A, 0x09, 0x00, //83 131 ѓ D1 93
0x3E, 0x49, 0x49, 0x41, 0x22, //AA 170 Є D0 84
0x38, 0x54, 0x54, 0x44, 0x28, //BA 186 є D1 94
0x00, 0x41, 0x7F, 0x41, 0x00, //B2 178 І D0 86
0x00, 0x44, 0x7D, 0x40, 0x00, //B3 179 і D1 96
0x00, 0x45, 0x7C, 0x45, 0x00, //AF 175 Ї D0 87
0x00, 0x45, 0x7C, 0x41, 0x00, //BF 191 ї D1 97

Я так понял эта функция отвечает за вывод букв


// интерпретатор кода символа в массиве fontHEX (для Arduino IDE 1.8.* и выше)
uint8_t getFont(uint8_t font, uint8_t row) {
font = font - '0' + 16; // перевод код символа из таблицы ASCII в номер согласно нумерации массива
if (font <= 90) return pgm_read_byte(&(fontHEX[font][row])); // для английских букв и символов
else if (font >= 112 && font <= 159) { // для русских
return pgm_read_byte(&(fontHEX[font - 17][row]));
} else if (font >= 96 && font <= 111) {
return pgm_read_byte(&(fontHEX[font + 47][row]));
}
}


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

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
0x7C, 0x04, 0x05, 0x04, 0x00, //81 129 Ѓ D0 83
0x00, 0x78, 0x0A, 0x09, 0x00, //83 131 ѓ D1 93
0x3E, 0x49, 0x49, 0x41, 0x22, //AA 170 Є D0 84
0x38, 0x54, 0x54, 0x44, 0x28, //BA 186 є D1 94
0x00, 0x41, 0x7F, 0x41, 0x00, //B2 178 І D0 86
0x00, 0x44, 0x7D, 0x40, 0x00, //B3 179 і D1 96
0x00, 0x45, 0x7C, 0x45, 0x00, //AF 175 Ї D0 87
0x00, 0x45, 0x7C, 0x41, 0x00, //BF 191 ї D1 97
Во первых, это неправильно, согласно таблице cp1251 эти буквы имеют другой код
К примеру Ґ = 165, ґ = 180, а не 129 и 131. Єє = 170,186; Її = 175,191, Іі=178,179.
cp1251.gif
Во вторых, это не совсем тривиальная задача, эти буквы раскиданы по таблице. И в логику функции интерпретации не пролазят. Тут не только добавить их нужно, но и код, который вы выше приводили, править.
 
Последнее редактирование:

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
Во первых, это неправильно, согласно таблице cp1251 эти буквы имеют другой код
К примеру Ґ = 165, ґ = 180, а не 129 и 131. Єє = 170,186; Її = 175,191, Іі=178,179.
Посмотреть вложение 12083
Во вторых, это не совсем тривиальная задача, эти буквы раскиданы по таблице. И в логику функции интерпретации не пролазят. Тут не только добавить их нужно, но и код, который вы выше приводили, править.
Вы сможете это сделать за скромную плату?
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
Во первых, это неправильно, согласно таблице cp1251 эти буквы имеют другой код
К примеру Ґ = 165, ґ = 180, а не 129 и 131. Єє = 170,186; Її = 175,191, Іі=178,179.
Посмотреть вложение 12083
Во вторых, это не совсем тривиальная задача, эти буквы раскиданы по таблице. И в логику функции интерпретации не пролазят. Тут не только добавить их нужно, но и код, который вы выше приводили, править.
Я смотрел вот эту библиотеку

Там так выкладывают этот код

else if(ASA_utf8_preliminary_byte == 0xD0) //
{
ASA_utf8_preliminary_byte = 0;
if((c >= 144) && (c <= 191)) {
return c - 17;
} else if (c == 129) { // Ё
return 191;
} else if (c == 131) { // Ѓ
return 193;
} else if (c == 132) { // Є
return 195;
} else if (c == 134) { // І
return 197;
} else if (c == 135) { // Ї
return 199;
} else if (c == 142) { // Ў
return 201;
} else {
return '*';
}
}
else if(ASA_utf8_preliminary_byte == 0xD1) //
{
ASA_utf8_preliminary_byte = 0;
if((c >= 128) && (c <= 143)){
return c + 47;
} else if (c == 145) { // ё
return 192;
} else if (c == 147) { // ѓ
return 194;
} else if (c == 148) { // є
return 196;
} else if (c == 150) { // і
return 198;
} else if (c == 151) { // ї
return 200;
} else if (c == 158) { // ў
return 202;
} else {
return '*';
}
}
else if(ASA_utf8_preliminary_byte == 0xD2) //
{
ASA_utf8_preliminary_byte = 0;
if (c == 144) { // Ґ
return 203;
} else if (c == 145) { // ґ
return 204;
} else {
return '*';
}
}
 

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
@mserega, Хм... Все оказалось совсем не так просто, как я думал. Тем более, что в железе проверить не получится, нет у меня матриц, да и собирать все это лень.
Исходя из этого, нас послали нахрен с русскими буквами, и пропускаем символ?!
C++:
  if (scrollTimer.isReady() || (!BTcontrol && !gamemodeFlag)) {
    FastLED.clear();
    byte i = 0, j = 0;
    while (text[i] != '\0') {
      if ((byte)text[i] > 191) {    // работаем с русскими буквами! Вот тут я не понял. Нас послали нахрен с русскими буквами???
        i++;
      } else {
        drawLetter(j, text[i], offset + j * (LET_WIDTH + SPACE), color);
        i++;
        j++;
      }
    }
    fullTextFlag = false;

    offset--;
    if (offset < -j * (LET_WIDTH + SPACE)) {    // строка убежала
      offset = WIDTH + 3;
      fullTextFlag = true;
    }
    FastLED.show();
  }
некая перекодировка символов происходит во внешней программе для андроид. Потому как русские буквы просто игнорятся. Или я чего-то сильно не допонял.

Ок. Попробуем нае обуздать.
C++:
// интерпретатор кода символа в массиве fontHEX (для Arduino IDE 1.8.* и выше)
uint8_t getFont(uint8_t font, uint8_t row) {
  uint8_t i = 0;

  switch (font) {             // здесь мы захардкодим коды, соответсвующие нужным укр.символам и приважим их к элементам массива
    case 165:  // Ґ (165)
      i = 159;    // номер в массиве
      break;
    case 180: // ґ (180)
      i = 160;
      break;
    case 170: // Є (170)
      i = 161;
      break;
    case 186: // є (186)
      i = 162;
      break;
    case 178: // І (178)
      i = 163;
      break;
    case 179: // і (179)
      i = 164;
      break;
    case 175: // Ї (175)
      i = 165;
      break;
    case 191: // ї (191)
      i = 166;
      break;
    default:                    // если код символа не попал в свитч, перекодируем его ака Гайвер.
      i = 0;
      font = font - '0' + 16;   // перевод код символа из таблицы ASCII в номер согласно нумерации массива (ака Гайвер)
      break;
  }

  if (i > 0) {                                 // код символа попал в одно из условий свитч, i присвоено номер элемента массива больше 0
    return pgm_read_byte(&(fontHEX[i][row]));  // возвращаем из массива начертание украинских букв
  }

  if (font <= 90) {
    return pgm_read_byte(&(fontHEX[font][row]));              // для английских букв и символов

  } else if (font >= 112 && font <= 159) {                  // и *****ц для русских
    return pgm_read_byte(&(fontHEX[font - 17][row]));

  } else if (font >= 96 && font <= 111) {
    return pgm_read_byte(&(fontHEX[font + 47][row]));

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

Вложения

  • 8 KB Просмотры: 3
Последнее редактирование:

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
Упс, пардон. Поставьте после каждой строки i = цифра знак ;
Пример i = 160;

Говорю же, не проверял. Опечатка :)

Поправил выше.
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
Безымянный.png
Теперь оно показывает например слово привет "I I I I Iє є є є є" что то в этом роде.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
@mserega, это происходит с любым выводом или только со словами с укр.буквами?
Как латиницу выводит?

Скопируйте код ещё раз, я кое что поправил.

Хотелось бы, чтобы вы были впредь более мгогословны.
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
@mserega, это происходит с любым выводом или только со словами с укр.буквами?
Как латиницу выводит?

Скопируйте код ещё раз, я кое что поправил.

Хотелось бы, чтобы вы были впредь более мгогословны.
Полностью все... английские, русские и цифры не работают.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
Скопируйте код ещё раз.

А, черт, снова ; пропустил. Уже выправил. Перешел в редактор с подсветкой, чтобы больше так не косячить. ПС. вверху уже исправил
 
Последнее редактирование:

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
Вместо руской
"к" пишет "є"
"г" пишет "і"
"в" пишет "І"
"п" пишет "ї"
"д" пишет какой то ероглиф

Вместо слово например "Привіт" пишет то что на скрине.
 

Вложения

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
@mserega, похоже, что какая-то перекодировка русских букв таки происходит в программе андроид. Что-то я логики не могу уловить как Гайвер номер элемента массива под код буквы подгоняет. Выглядит все вроде просто, а в результате... фигня получается. Надо думать.
 

mserega

✩✩✩✩✩✩✩
27 Мар 2020
29
0
@mserega, похоже, что какая-то перекодировка русских букв таки происходит в программе андроид. Что-то я логики не могу уловить как Гайвер номер элемента массива под код буквы подгоняет. Выглядит все вроде просто, а в результате... фигня получается. Надо думать.
А можно как то тупо отключить его шрифт и библиотеку и подключить
 

kostyamat

★★★★★★✩
29 Окт 2019
1,376
600
@mserega, нет.
Прошейте пожалуста оригинальным кодом, без моих изменений и последовательно проверьте, что будет выводится если ввести
Ґґ, Єє, Її, Іі
Какие символы оно выведет? Хотя, подозреваю что вообще никаких.