Не преобразует в кириллицу принятый байт по уарту (utf8rus)

Тема в разделе "Флудилка", создана пользователем Рокки1945, 8 июн 2020.

  1. Рокки1945

    Рокки1945 Гуру

    Приветствую дорогие форумчане!
    Помогите решить проблему в скетче использую хорошо известную функцию utf8rus, которая выводит кириллицу на дисплей. По уарту принимаю массив символов char str [2] = {'f','Я'};// допустим
    Затем отправляю её matrix.print(utf8rus(str));
    И тут кот-Облом из фильма "Знакомство с родителями" - на матрице буржуйский символ правильно а вот вместо 'Я' - ключик. Подскажите что делать?

    [​IMG]
     
    Airbus нравится это.
  2. Airbus

    Airbus Радиохулиган Модератор

    А сам дисплей то поддерживает кириллицу?
     
  3. Рокки1945

    Рокки1945 Гуру

    Там не дисплей там светодиодные матрицы
     
  4. b707

    b707 Гуру

    картинка не грузится

    какие матрицы, какая библиотека?
     
  5. Airbus

    Airbus Радиохулиган Модератор

    А ты сам догадайся по почерку )))’
     
  6. issaom

    issaom Гуру

    Я могу ошибаться, но если через терминал Arduino отправить, маленькую русскую букву я - то придет число 255 (Windows-1251). А в среде Arduino IDE буква я это два байта 209 143 в UTF-8. т.е. без дополнительных танцев с бубном поработать через UART на русском языке не выйдет
     
    Igor68 и b707 нравится это.
  7. b707

    b707 Гуру

    Рокки, для начала - вот такой строчкой вы никогда букву "Я" по уарту не примете и на матрице не напечатаете
    Код (C++):
    char str [2] = {'f','Я'};
    matrix.print(utf8rus(str));
    во-первых, в букве "Я" 2 байта, во-вторых в строке должен быть терминатор
     
    Последнее редактирование: 8 июн 2020
  8. b707

    b707 Гуру

    и в третьих ТС не написал. что за шрифт он использует, мож там русских букв вовсе нет :)))
     
  9. Рокки1945

    Рокки1945 Гуру

    Приветствую вот такой массив выводит на ура !
    char str [40] = "МАМА МЫЛА РАМУ";

    matrix.print(utf8rus(str));
     
  10. issaom

    issaom Гуру

    Поэлементно посмотрите какие числа содержит этот массив ;-) будете приятно удивлены ;-)
    а если хотите чтобы не заработало - напишите char str [14] = "МАМА МЫЛА РАМУ" - я думаю после этого будет понятно, что русские буквы хранятся в виде 2-х байт а не одного
     
  11. Рокки1945

    Рокки1945 Гуру

    Как же тогда быть, чтобы принятая строка или массив по карту передавалась корректно, по- русски. Спасибо!
     
  12. b707

    b707 Гуру

    вы принципиально не отвечаете ни на один вопрос?
    Какая матрица?
    Какая библиотека?
    какой шрифт?

    И потом - вам выше написали, в чему вас проблема. Или вы и ответы не читаете?
     
  13. issaom

    issaom Гуру

    Берете вот такую штуку
    http://blog.kislenko.net/show.php?id=2045
    Дальше пишите фукцию (например для буквы "я")
    Если с UART пришло 255 то в библиотеку отправляем два байта (209,143)
    Если просто стандартный то ASCII символ то просто его отправляем без конвертации
    А если еще вот это сделать:
    Ё.jpg
    То алгоритм значительно упрощается )))
     
  14. Рокки1945

    Рокки1945 Гуру

    Извините пожалуйста, матрица представляет из себя 7 светодиодных линеек ws2812 по 60 светодиодов. Библиотека от Адафруита. Шрифт происходит заменой файла, там добавляются кириллические символы. Ответы читаю просто не все понимаю.
     
  15. issaom

    issaom Гуру

    Блoндинка оформляет кредит.
    Менеджеp: — Tут cумму пишите пpопиcью. — а этo как? — Буквами!
    — Мужчина, вы в cвoем уме? Как я цифры буквами напишу?
    Вам надо с точностью наоборот сделать
    То что приходит для русских символов с UART обозначается одними цифрами (1 байт от 192....255) , а в библиотеке те же буквы другими цифрами обозначаются (два байта в UTF-8), что тут еще может быть не понятного? Читайте букву переводите в число, конвертируете в 2 других числа и отправляете в библиотеку.
     
  16. Рокки1945

    Рокки1945 Гуру

    Ну вот же спасибо большущее.
     
  17. Рокки1945

    Рокки1945 Гуру

    приветствую ещё раз не понятно зачем на 2 числа - всё прекрасно отрабатывает и с одним числом
    char str [2] = {255,184};
    matrix.print(utf8rus(str));
    в строке я и Ё и не надо 2 чисел
     
    Последнее редактирование модератором: 8 июн 2020
  18. issaom

    issaom Гуру

    Тогда не понятно в чем вообще был вопрос)))
     
    Igor68 нравится это.
  19. Igor68

    Igor68 Гуру

    Да в том-то и бардак, что символы с кодом 0...127 не надо обрабатывать - они и так в один байт. А вот коды 128...255 это первый байт, который определяет какой набор символов применить (кирилица и др.), а второй байт собственно код символа. Не помню какой код должен быть для кирилицы. А если что-то вдруг нечаянно вышло и без этого, то у Вас конкретно получилось подпрыгнуть, и свистнуть поврощав во все стороны головой прежде чем коснуться ступнями земли.
     
  20. issaom

    issaom Гуру

    Ну в принципе если ТС ничего не путает то скорее всего нужно char[] куда он сохраняет данные с UART заменить на uint8_t[] и усе заработает...., но на счет "ничего не путает" я не уверен
     
    Рокки1945 и Igor68 нравится это.