Побуквенная обработка вводимого текста через COM порт.
- Войдите на сайт для отправки комментариев
Ср, 29/07/2020 - 15:56
Добрый день, уважаемые форумчане!
Поршу помощи:
Как можно реализовать на базе Atmega328P через COM порт обработку вводимого текста так, чтобы ардуинка понимала вводимый текст не как целый "неделимый пакет", а как отдельные символы?
Для чего это всё и что собственно хочу реализовать:
Есть матрица 8х8 , которую подключаю через драйвер MAX7219. Задача: Вводить в COM порт строчку целого текста (Например, "Hello world"), чтобы МК сам разбирал введенную строчку на отдельные символы и присваивал их значения переменным, для дальнейшего распознавания их из уже заранее определенного массива букв для вывода на матрицу.
Как можно реализовать на базе Atmega328P через COM порт обработку вводимого текста так, чтобы ардуинка понимала вводимый текст не как целый "неделимый пакет", а как отдельные символы?
так ведь ардуина его и принимает посимвольно - команда Serial.read() читает по одному символу за раз.
Обычно новички мучаются с обратной задачей - как собрать обратно то, что пришло отдельными байтами :)
Может ты прочитаешь основы работы, прежде чем придумывать какие-то неделимые пакеты?
Согласен, был не прав, товарищи!
МК воспринимает каждый символ в Юникоде, в UTF-8, присваивая каждому символу русских букв два байта. Так для буквы "П" значения будут - 208, 159.
Теперь у меня возник следующий вопрос - из описания Serial.print() "Передает данные через последовательный порт как ASCII текст. Эта функция может принимать различные типы данных. Так целые числа выводятся соответствующими им символами ASCII. Вещественные выводятся с помощью двух ASCII символов, для целой и дробной части. Байты передаются как символ с соответствующим номером. Симоволы и строки отсылаются как есть"
т.е. COM порт "понимает" кирилицу по UTF-8 и выдает два байта информации, а выводить может только ASCII текст? Как зная кодировку кириллицы выслать в COM порт понятный для него формат буквы?
Ничего кроме байтов там не передается. Как их интерпретировать - это на твое усмотрение.
т.е. COM порт "понимает" кирилицу по UTF-8 и выдает два байта информации, а выводить может только ASCII текст? Как зная кодировку кириллицы выслать в COM порт понятный для него формат буквы?
COM-порту абсолютно пофиг что через него передаётся. Не пофиг может быть принимающей программе.
Кому Вы это передаёте?
Если ардуиновскому монитору порта, и при этом у Вас современная IDE, то просто пишите
любуйтесь на результат в мониторе порта и не выносите мозг ни себе, ни другим.
Если же Вы передаёте какой-то другой программе, то найдите в сети функцию utf8rus и пользуйте на здоровье.
Не важно для какой цели мне это. На самом деле, вопрос озвученный мной был прост - как имея код кириллицы в UTF-8 (два байта) вывести их в СOM порт так, чтобы он его понял и вывел в саму Arduino IDE соответствующий символ.
Вот есть у меня кодировка трёх символов в кириллице по UTF-8: 208, 165; 208,163; 208, 153; Как их вывести через Serial.println()? Коллега выше написал уже что никак. Serial.println() воспринимает только один байт по ASCII.
я вижу у ТС сознание абсолютно незамутнено какими-то знаниями :) не завидую тому. кто попытается ему обьяснить разницу между байтами и битами :)
Зато два serial.print выдадут два аски кода или символа или байта.
Вот есть у меня кодировка трёх символов в кириллице по UTF-8: 208, 165; 208,163; 208, 153; Как их вывести через Serial.println()?
Я Вам написал
Если же Вы передаёте какой-то другой программе, то найдите в сети функцию utf8rus и пользуйте на здоровье.
Вы не умеете читать? Или не можете в гугле имя функции вбить?
я вижу у ТС сознание абсолютно незамутнено какими-то знаниями :) не завидую тому. кто попытается ему обьяснить разницу между байтами и битами :)
Зато есть задача! Нисколько не удивлюсь, что задачу препод поставил...
vat712, ни в Си, ни в Си++ нет адекватных типов данных для работы в кодировке utf-8.
Соответственно, чтобы работать с этими кодировками, необходимо хорошо представлять, что такое кодировка символа вообще, зачем она нужна, какие кодировки бывают и как их можно преобразовывать одну в другую. "Автоматически" ничего не получится, все надо делать ручками.
ни в Си, ни в Си++ нет адекватных типов данных для работы в кодировке utf-8.
Нет типов для работы с байтовыми последовательностями? Ну приехали.
ни в Си, ни в Си++ нет адекватных типов данных для работы в кодировке utf-8.
wchar_t
ни в Си, ни в Си++ нет адекватных типов данных для работы в кодировке utf-8.
wchar_t
Зачем в сети? Эта функция на форуме почти 5 лет назад выложена:
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...