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

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

  1. SergeiL

    SergeiL Оракул Модератор

    А чем на AVR, char[] отличается от uint8_t[], ну кроме знаковости?
     
  2. Рокки1945

    Рокки1945 Гуру

    да в том то и дело что ничем
     
  3. SergeiL

    SergeiL Оракул Модератор

    Вы массивом всех запутали.
    В первом сообщении вы говорите, что принимаете данные по UART и пишите про этот массив:
    Потом пишите:
    Вы определитесь, массив, строка с завершающим \0 или UART.

    Если вы в теле скетча сохраняете массив и инициализируете его строкой с русскими буквами, кодировка будет UTF-8
    Для вывода информации на дисплей используем:
    Код (C++):
    matrix.print(utf8rus(str));
    Если вы принимаете данные в буфер по UART, то данные приходят в WIN-1251
    И тогда вывод на экран будет:
    Код (C++):
    matrix.print(str);
    Разницу видите?
     
    Igor68 нравится это.
  4. SergeiL

    SergeiL Оракул Модератор

    Добавлю,
    На вход функции utf8rus() должна передаваться строка, строка - это массив символов с завершающим нулем.
    То есть это просто массив символов:
    Код (C++):
    char str [2] = {255,184};
    А это уже строка:
    Код (C++):
    char str [3] = {255,184,0};
    функция принимает указатель на начало массива, и обрабатывает его до \0.
    Просто Вам повезло, что в следующей ячейке памяти, после последнего элемента массива,был \0.
    Иначе бы на индикатор вывелся бы хлам из памяти, до первого \0
     
    Igor68 и Рокки1945 нравится это.
  5. Рокки1945

    Рокки1945 Гуру

    получается что функция utf8rus - вообще не нужна? Нужно было только занести символы в glcdfont библиотеки ?
     
  6. b707

    b707 Гуру

    да.
    Функция utf8rus пригодится, когда у вас кодировка кириллицы в коде и в шрифте не совпадают. Если вы сами правили фонт под свою кодировку - никакие функции не нужны.
    Хотя не уверен, что вы это поймете :) - не поймете - не расстраивайтесь, вам это не нужно
     
    Igor68 и Рокки1945 нравится это.
  7. Рокки1945

    Рокки1945 Гуру

    сейчас вот этот блок
    char str [11] = {255,184,184,184,184,184,184,184,184,184,255};
    matrix.print(str);
    выводит русские блоки яёёёёёёёёёя - как и требовалось!
     
  8. issaom

    issaom Гуру

    и через UART работает как нужно ?
     
  9. Рокки1945

    Рокки1945 Гуру

    У меня следующий вопрос, если можно?
    Подключил уарт преобразователь к нему HC-05, в протеусе собрал схему компонент COMPIM и атмегу 328, сконектился по телефону и в приёмнике у меня вываливается следующее на букву "я" . Вот скетч
    void setup()
    {

    Serial.begin(9600);

    }
    void loop(){}
    void serialEvent()
    {
    byte kol = Serial.read(); //чтение количества
    Serial.print(kol);
    }
    вот как теперь чекрыжить?
     
  10. Рокки1945

    Рокки1945 Гуру

    нет ответ выше
     
  11. b707

    b707 Гуру

    вопрос в чем?
     
  12. Рокки1945

    Рокки1945 Гуру

    143 - это то что нужно а как от ненужных символов избавляться?
     
  13. Рокки1945

    Рокки1945 Гуру

    ребят на работу вызвали - позже отвечу извиняюсь за офтоп!
     
  14. issaom

    issaom Гуру

    Кстати в Арудино IDE тоже что-то поменялось, точно помню что раньше приходил 1 байт (программы можно было отлаживать отправляя ю и я и читая младший бит, а теперь приходит 2 байта.... Хотя вроде как разработчики чето многократно перепиливали в IDE - но баловался давно и точно поммю что данный код кирилицу тоже хавал корректно если вместо uint8_t прописать char
    arduino.JPG
     
  15. SergeiL

    SergeiL Оракул Модератор

    Похоже исправили, у меня 1.8.5.
    Отправляю 'я', на ардуине принимается 0xFF, а возвращая символ на PC, в мониторе порта выводится перевернуты вопрос.
    То есть, монитор порта ждет UTF-8.


    upload_2020-6-9_12-55-18.png
     
  16. Рокки1945

    Рокки1945 Гуру

    А как-же всё таки предложения на русском выводить, принятые по-уарту? Ребят подскажите, вот прочитал про парсинг а как это в моём случае сделать?
     
  17. issaom

    issaom Гуру

    В новой версии как вот так получается.....
    arduino5.JPG
     
  18. issaom

    issaom Гуру

    Делаете поэлементный цикл по массиву который собрали из UART, из нужных символов собираете поэлементно новую строку и скармливаете её библиотеке.
     
    Рокки1945 нравится это.
  19. Рокки1945

    Рокки1945 Гуру

    щас так и попробывал сделать char str [11] = {209,143,13,10}; отлично скармливается
    но это только 1 буква, щас посмотрим что будет со словом
     
  20. Рокки1945

    Рокки1945 Гуру

    ну всё отлично
    char str [11] = {208,
    188,
    208,
    176,
    208,
    188,
    208,
    176,
    13,
    10}; // мама вышла!!!