Нужна помощь с матрицей 2X3 для шрифта Брайля

Я — программист Arduino среднего уровня и делаю электронный дисплей Брайля для своего друга. Этот дисплей можно представить как массив из 28x3 светодиодов (один символ Брайля содержит максимум шесть (2x3 для одной буквы) точек, так что одновременно может отображаться 14 символов, включая пробелы), но на самом деле вместо светодиодов будут электрические ячейки Брайля. Алгоритм будет следующим:

  1. Чтение строковых файлов (английский алфавит) с SD-карты
  2. Подсчитайте буквы, включая пробелы, пока их не станет 14. Преобразуйте их в шрифт Брайля (2x3 для одной буквы), а затем отобразите их (поскольку мы сможем отображать только 14 букв одновременно)
  3. Когда пользователь нажимает кнопку для следующей строки/страницы, выполните тот же процесс (шаг 2) для следующей строки.

Итак, вот полный процесс, который я хочу осуществить.

У меня есть 5 месяцев на выполнение. Главная проблема — как написать код для преобразования и отображения. Я знаю, что уже существует множество библиотек Arduino для отображения английских символов, но это другое дело, потому что я новичок в Arduino и языке C.

Вместо того, чтобы сходить с ума и говорить, что этот сайт не для таких глупцов, как вы, пожалуйста, объясните этому 17-летнему парню, чему мне следует научиться, чтобы сделать это для моего друга, который потерял зрение в результате несчастного случая (учитывая, что у меня есть 5 месяцев).

Нужно ли мне создавать совершенно новую библиотеку для преобразования алфавита и мультиплексирования Брайля? Или уже есть готовый код, который подойдёт?

Шрифт Брайля

, 👍3


1 ответ


Лучший ответ:

5

Прежде всего, позвольте поблагодарить вас за такую помощь вашему другу. Не могу представить себе лучшего способа использовать Arduino, чем в качестве драйвера для дисплея Брайля, как вы описали!

Как вы знаете, шрифт Брайля — это представление символов в «форме», которую многие системы не распознают. Большинство людей сталкиваются с Брайлем, только когда нажимают кнопку в лифте или банкомате и видят выпуклые точки. Тем не менее, это НАМНОГО проще, чем система, которой пользуются глухие: они представляют целые слова жестом руки.

Я призываю КАЖДОГО читателя этой публикации войти в лифт или взглянуть на банкомат и обратить внимание (и расшифровать!) на точки Брайля на кнопках. В лифтах почему-то используется двойная кодировка «#1», «#2», «#3» и т. д. (как описано на рисунке к вопросу), когда это явно не нужно — конечно же, вы хотите нажать номер этажа! Кнопки банкомата используют только «сырой» шаблон.

Поскольку в шрифте Брайля каждый символ преобразуется в своё собственное представление, можно выполнить ОЧЕНЬ простое преобразование. Если задуматься, это происходит в компьютерах триллионы раз в день: когда компьютер преобразует нажатие клавиши в набор пикселей, представляющих символ на экране. Ваши «пиксели» просто НАМНОГО проще, чем преобразование 5x7, 13x15 или преобразование, специфичное для шрифта, для символов, которые видят люди с нормальным зрением.

Первое, что вам нужно сделать, — это определить систему, которая преобразует массив 2x3 в массив битов. Зачем? Для удобства хранения. Я буду представлять ячейку Брайля набором цифр от 0 до 5:

 0   1
 2   3
 4   5

Почему? Потому что тогда можно «сжать» представление в один байт данных e. Если вы достаточно хорошо разбираетесь в информатике, то знаете, что она работает в двоичной системе счисления, и каждая цифра выше может быть представлена одним битом, пронумерованным от 0 до 5.

Таким образом, A представлен поднятием верхнего левого штифта, что совпадает с битом 0: который может быть представлен байтом B000001 или 0x01:

X .
. .
. .

Конечно, пробел без выступающих элементов будет представлен как B000000 или 0x00.

Возможно, вы этого не знаете, как и большинство компьютерщиков: следующая «очевидная» кодировка (для B) будет B000010 или 0x02:

. X
. .
. .

Но слепому человеку будет очень трудно расшифровать это, поскольку в отрыве от всего этого (нет возможности интерпретировать «нижние» штифты) это выглядело бы точно как «А». Поэтому тот факт, что «B» закодировано как:

X .
X .
. .

означает, что двоичное кодирование будет B000101 или 0x05.

В качестве еще одного примера, символ «I» будет

. X
X .
. .

или байт B000110 или 0x06.

Я не буду преобразовывать каждый символ, но надеюсь, что этого достаточно для вас. Присвоив каждому символу собственную битовую комбинацию, вы сможете преобразовать любую возможную строку в набор байтов для преобразования вашей библиотекой.

Только... есть проблема. В шрифте Брайля нужно преобразовать цифры от 0 до 9 в специальный шаблон. Поскольку в шрифте Брайля можно выбрать только шесть «бит» (и даже в этом случае не каждая комбинация «приятна» для чтения слепыми), существует специальный символ-«флаг», сообщающий: «Следующие символы — цифры!» (и шаблон, сообщающий: «Хорошо, возвращаемся к обычным буквам»).

Это означает, что не существует однозначного перевода между строкой английских символов и результирующей строкой байтов, представляющих эти символы в шрифте Брайля: необходимо добавить дополнительные байты «конвертации» в этот процесс. Конечно, эти байты «конвертации» можно представить тем же растровым изображением, что описано выше:

. X
. X
X X

равно B111010 или 0x3A.

Это означает, что можно написать функцию для преобразования последовательности символов ASCII в последовательность байтов шрифта Брайля: нужно просто предоставить больше байтов, чем преобразует строка! Это также означает, что вам может потребоваться использовать менее 14 символов из исходного текста, прежде чем место на дисплее закончится...

Я бы с удовольствием дал вам свой адрес для получения дополнительной помощи: боюсь, StackExchange не позволит мне опубликовать мой адрес электронной почты!

,