TFT LCD ILI9163C 128x128

ilya000
Offline
Зарегистрирован: 12.09.2016

Я проделал несколько эксперементов, замерил скорости

Не рекомендую использовать библиотеку ili9163c, с этим дисплеем

рекомендаую Adafruit_ST7735, работает в середнем в двое быстрее, меньше глюков, ест меньше памяти

В строке инициализации писать TFT.initR(INITR_GREENTAB); 

таким образом доступно все пространство дисплея, и нет справа шумов и мусора.

 

Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

Я проделал несколько эксперементов, замерил скорости

Не рекомендую использовать библиотеку ili9163c, с этим дисплеем

рекомендаую Adafruit_ST7735, работает в середнем в двое быстрее, меньше глюков, ест меньше памяти

В строке инициализации писать TFT.initR(INITR_GREENTAB); 

таким образом доступно все пространство дисплея, и нет справа шумов и мусора.

 

Да у меня так-то особых претензий к библиотеке ILI9163C нет. Те примеры, что удалось запустить летают довольно шустро. Но некоторые примеры просто не запускаются...я не понимаю почему.

Попробую библиотеку Adafruit_ST7735. Но у меня подозрение, что это библиотека для другого дисплея. У меня дисплей ILI9163.

ilya000
Offline
Зарегистрирован: 12.09.2016

Поверьте идут обе библиотеки на этом дисплее. Проверял. У меня приложение критичное по скорости, поэтому специально тестировал

Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

Поверьте идут обе библиотеки на этом дисплее. Проверял. У меня приложение критичное по скорости, поэтому специально тестировал

Спасибо. Попробую.

TovBender
Offline
Зарегистрирован: 12.04.2015

Joiner

Как ваш дисплей выводит фото на экран ? как проэкт движется ?

накопал случайно интерресное видио про эти дисплеи .  Может вам что пригодится . там и ссылки на проэкты. Только всё а на Вражьем языке. Английском https://youtu.be/9RIKzXANbOY       

https://youtu.be/ZosNH0HEF4Q. 

 

Joiner
Offline
Зарегистрирован: 04.09.2014

TovBender пишет:

Joiner

Как ваш дисплей выводит фото на экран ? ...................видио про эти дисплеи ......................

Сейчас изучаю дисплей ILI9163C  1.44  128x128. А ваши ссылки про дисплей ILI9341. У меня есть ILI9340 (аналогичный ILI9341) 320x240. С ним у меня все нормально. Примеры идут, фотки с карточки выводятся. Подключал его к проминьке 3.3вольта дисплей прекрасно работает, карточка работать перестает. Надо просто разобраться немного. А от 5 вольт и дисплей и карта работает. В настоящее время (благодаря arduinec и DarkGenius, спасибо им огромное) руссифицировал дисплейчик ILI9163C. Надеюсь, что теперь смогу руссифицировать и дисплей ILI9340. Не смогу, так теперь знаю к кому обращаться :)

А картинку вывести с SD карточки на дисплей ILI9163C 128х128 пока не смог :(

Joiner
Offline
Зарегистрирован: 04.09.2014

Почитал соседнюю тему 

Русификация библиотеки Adafruit-GFX и вывод русских букв на дисплей в кодировке UTF-8 из Arduino IDE

Сто раз готов сказать спасибо arduinec_у и DarkGenius_у. Благодаря им смог выводить на дисплейчик ILI9163C 128x128 русский текст. Очень обрадовался

Но дальше, больше.....На картинке самый мелкий шрифт, который является основой для более крупных шрифтов. Более крупные получаются простым увеличением массштаба этого самого мелкого, поэтому, чем крупней шрифт, тем он корявее. Недавно увидел, что буржуи применяют на этом экране шрифты немного крупнее, но более гладкие. Смотрятся и читаются они гораздо приятнее. Все эти вкусности осуществляются в разных версиях и комплектах библиотек Adafruit_GFX и ILI9163C. Есть большая мечта соединить классную руссификацию arduinec_а и красивый шрифт как у SpearMint_а.  

Вот картинка как смотрится немного более крупный и красивый шрифт

Joiner
Offline
Зарегистрирован: 04.09.2014

SpearMint пишет:

Ребят, на днях могу вам подогнать шрифт с Кирилицей, но для этого вам нужно будет перебраться на новую версию библиотеки

https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0r5

На 1.0r4 не советую сидеть, есть некоторые проблемы.

................................................................

Если кому интересно могу поподробнее описать как подключаются шрифты и как можно заменить стандартный.

SpearMint, как Ваши успехи с дисплейчиком? Как руссификация? Как подключение новых шрифтов? Хотелось бы увидеть картинку с русским текстом......пожалуйста..

Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

Я проделал несколько эксперементов, замерил скорости

Не рекомендую использовать библиотеку ili9163c, с этим дисплеем

рекомендаую Adafruit_ST7735, работает в середнем в двое быстрее, меньше глюков, ест меньше памяти

В строке инициализации писать TFT.initR(INITR_GREENTAB); 

таким образом доступно все пространство дисплея, и нет справа шумов и мусора.

 

У меня Adafruit_ST7735 не запустилась. Вернее запустилась...показала на экранчике серо-белые вертикальные полоски...и все :(

ilya000
Offline
Зарегистрирован: 12.09.2016

Странно. У нас точно одинаковые дисплеи?

По ссылке фото моего:

https://www.dropbox.com/s/9tgkljqipqzeset/2016-09-15%2020.13.34.jpg?dl=0

(да мне удалось подключить 3 штуки к одному ардуино, все три работают с одной библиотекой Adafruit_ST7735, адресация отдельная, изображения тоже показывают разное (не дублируется) )

 

Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

Странно. У нас точно одинаковые дисплеи?

Мне кажется что разные. Я сужу по рамочке из белой пласмассы. Они разные по внешнему виду. И у моего на обратной стороне платы написано      1.44' SPI 128*128 V1.1. А что написано на Вашем?

Вот фотка моего 

ilya000
Offline
Зарегистрирован: 12.09.2016
Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

У меня. Точно такиеже;

.............

А ссылочку можно, откуда качали драйвер.

Странно, почему же у меня не запускается?

P.S. Мне показалось ч то Ваши с внешней стороны выглядят иначе. Я нашел два различия.

ilya000
Offline
Зарегистрирован: 12.09.2016
Joiner
Offline
Зарегистрирован: 04.09.2014

Спасибо, попробую. Но я , вродебы, тоже оттуда качал. Наверное разные дисплеи.

Joiner
Offline
Зарегистрирован: 04.09.2014

Очень жаль, что на мой призыв "Давайте сделаем красивый русский шрифт на дисплейчик 1.44 SPI 128х128 !!!!" ни кто не откликнулся. Но чем больше я занимаюсь этим дисплейчиком, он мне нравится все больше и больше. Конечно, моих знаний в программировани очень мало, и приходится работать методом тыка. Но, все-таки удалось запустить библиотеку "TFT_ILI9163C-Pre-Releas-1.0p7". Там куча всяких примеров, правда, у меня не все заработали, но библиотека интересная. На глаз заметна гораздо более высокая скорость, и в скетчах подключается только сама эта библиотека без библиотеки Adafruit_GFX, есть возможность подключения внешних шрифтов.

Сниму видео по примерам из библиотеки, выложу для сравнения.

negavoid
Offline
Зарегистрирован: 09.07.2016

Joiner пишет:

Очень жаль, что на мой призыв "Давайте сделаем красивый русский шрифт на дисплейчик 1.44 SPI 128х128 !!!!" ни кто не откликнулся.

Дык возьмите и сконвертируйте для gfx любой шрифт - http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi?page=2#comment-221218

Joiner
Offline
Зарегистрирован: 04.09.2014

negavoid пишет:

Дык возьмите и сконвертируйте для gfx любой шрифт - http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi?page=2#comment-221218

Спасибо. Я решил всетаки убить свое время и попробовать самому разобраться в библиотеках на ходовые дисплеи. Сохранил все ссылки про руссификацию и подключение шрифтов. Буду грызть.

P.S. Сегодня натолкнулся на ролик про часики DS3231 и дисплей ILI9163C. Залил в свои часики, кое-что поправил. Получился хороший пример по недостаткам библиотеки. Дисплей маленький по размеру и приходится играть с размерами шрифтов. Так вот нормально смотрится только самый маленький шрифт, а шрифты полученные масштбированием смотрятся довольно коряво. Картинка прилагается

ilya000
Offline
Зарегистрирован: 12.09.2016

По моему все не плохо. Зато такие шрифты занимают мало места.  Памяти на AVR платформы по минимому (даже если вы используете PROGMEM)

Можно орагнизовать "псевдо сглаживание" штрифта, нарисовав его дважды (или трижды)

Сначала серым цветом сдвинув на один пиксел вниз или вправо, а потом белым по верх. Зрительно будет смотреться лучше.

Joiner
Offline
Зарегистрирован: 04.09.2014

ilya000 пишет:

По моему все не плохо. Зато такие шрифты занимают мало места.  Памяти на AVR платформы по минимому (даже если вы используете PROGMEM)

Можно орагнизовать "псевдо сглаживание" штрифта, нарисовав его дважды (или трижды)

Сначала серым цветом сдвинув на один пиксел вниз или вправо, а потом белым по верх. Зрительно будет смотреться лучше.

А мне-то хотелось бы применить шрифт не массштабированный из шрифта 5х7, а гладкий, немного большего размера, какой-нибудь 7х12, ну, то есть начать с такого и применять его, а если понадобится то массштабировать его. Выложу видео о том, что я хочу.

Joiner
Offline
Зарегистрирован: 04.09.2014
 
arduinec пишет:

.......................................

К остальным дисплеям нужно подключить соответствующие библиотеки Adafruit - все они используют Adafruit-GFX, которая там русифицирована.

================================================================

 

arduinec, подскажите пожалуйста как можно отредактировать шрифт и добавить в него русские буквы. В настоящее время пробовал библиотеку ILI9163C версия 1.0.7p для одноименного дисплея. Эта версия работает сама по себе без библиотеки Adafruit. В ней имеется несколько красивых шрифтов разной величины, и даже вроде бы есть шрифт с разной шириной букв......но там нет русских букв :( Хотелось бы их дорисовать

ptr
Offline
Зарегистрирован: 28.05.2016

Joiner пишет:

применить шрифт не массштабированный из шрифта 5х7, а гладкий, немного большего размера

Квадратичные кривые Безье?

 

Joiner
Offline
Зарегистрирован: 04.09.2014

ptr пишет:

Joiner пишет:

применить шрифт не массштабированный из шрифта 5х7, а гладкий, немного большего размера

Квадратичные кривые Безье?

 

ptr, Вы меня убиваете! Я не знаю даже что такое индекс доуджонса, а Вы меня про какое-то безье спрашиваете!

Я имел в виду масштабирование шрифтов начинать не с шрифта 5х7, асделать самым маленьким шрифт покрупнее, какой-нибудь 7х12.

ptr
Offline
Зарегистрирован: 28.05.2016

Joiner пишет:

Я не знаю даже что такое индекс доуджонса, а Вы меня про какое-то безье спрашиваете!

Знаете. Точно знаете. Они у вас сейчас на экране )

На компе и TrueType, и PostScript шрифты, которые вы можете видеть на экране рисуются кривыми Безье )

 

ptr
Offline
Зарегистрирован: 28.05.2016

А если без шуток, то иной размер шрифта библиотека TFT (точнее Adafruit_GFX в ней) просто не поддерживает. Так как размер шрифта захаркожен.

 

James
Offline
Зарегистрирован: 26.02.2016

и что мешает поменять в Adafruit_GFX.cpp в строке:" textsize  = 1;" ?

Joiner
Offline
Зарегистрирован: 04.09.2014

Похоже, что меня не совсем понимают...Посмотрите пожалуйста пост # 157. Там две фотки с моего экранчика. На первой фотке шрифт 5х7, на второй шрифт покрупнее...но он не масштабирован, он гладкий и не состоит из увеличенных квадратиков. Во втором случае используется модифицированная библиотека Adafruit, но в этом шрифте нет русских букв, и если применять функцию arduinec_а, если писать по-русски, то ни чего не выводится. А мне хотелось бы такой гладкий шрифт и с русскими буквами.

James
Offline
Зарегистрирован: 26.02.2016

можно ссылку на модифицированую ? поковырять попробую

Joiner
Offline
Зарегистрирован: 04.09.2014

James пишет:

можно ссылку на модифицированую ? поковырять попробую

Ссылка на рабочий комплект ILI9163c и Adafruit_mfGFX https://yadi.sk/d/KV1YCchqgGjuJ

Забыл написать. Если запускать примеры из библиотеки ILI9163c, то в скетче надо заменить #include <Adafruit_GFX.h> на #include <Adafruit_mfGFX.h> . Вот еще скетч с менюхой, что на картинке https://yadi.sk/d/-Xe6hLYWwGGUo

Еще есть библиотека для ILI9163c, которая работает без Adafruit_GFX, имеет возможность подключать разные шрифты. Сниму видео или фотки, выложу.

James
Offline
Зарегистрирован: 26.02.2016

http://arduino-project.net/kak-sozdat-svoi-shrifty-tft/ способ как тут пробовал?

Joiner
Offline
Зарегистрирован: 04.09.2014

James пишет:

http://arduino-project.net/kak-sozdat-svoi-shrifty-tft/ способ как тут пробовал?

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

James
Offline
Зарегистрирован: 26.02.2016

просто в библиотеке размер шрифта происходит тупым умножением h*textsize. По-этому лучше сделать свой и не париться

TovBender
Offline
Зарегистрирован: 12.04.2015

товарищь Joiner

как вы разобрались с диплеем, ?

пробовали вывод картинки с CD карты на дисплее LCD 1,8 160x128

стандартная библиотека из примеров, занимает много места, как бы её сократить. 

сделал осцилограф на промини, хотел при включении была заставка, с CD карты, но не влазет, места осталось 7 к.   Подскажете что нибудь ?

Joiner
Offline
Зарегистрирован: 04.09.2014

TovBender пишет:

товарищь Joiner

как вы разобрались с диплеем, ?

пробовали вывод картинки с CD карты на дисплее LCD 1,8 160x128

стандартная библиотека из примеров, занимает много места, как бы её сократить. 

сделал осцилограф на промини, хотел при включении была заставка, с CD карты, но не влазет, места осталось 7 к.   Подскажете что нибудь ?

С дисплеем пока не разобрался. По профессии я столяр, поэтому программирование идет туговато. Так что ни чем помочь не могу...  Вот если табуреточку помочь, то это запросто :)

Сейчас балуюсь с часиками на дисплейчике ILI9163C 144х144. А 160х128 у меня такого нет и с таким я не сталкивался.

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

Моя цель - хочу писать этой библиотекой по-русски не корявыми шрифтами, пока не получается. Кстати, библиотека довольно шустрая, скоро покажу.

Joiner
Offline
Зарегистрирован: 04.09.2014

Как и обещал показываю работу дисплейчика https://www.youtube.com/watch?v=n7jPeFdNzbk&feature=youtu.be

TovBender
Offline
Зарегистрирован: 12.04.2015

Спасибо Joiner  

хоть ктото в серьёз занялся шрифтами и их , адаптацией к разным дисплееям. И особенно добавлением РУССКИХ шрифтов. это нужное дело.

я пока рою интернет и пробую изменить программы под свой дисплей для вывода изображений. те что встречаются работают не очень норм, на TFT 160x128 со встроенного SD адаптера, и занимают много места, пробую сократить код. и те что в комплекте с библиотекой много места занимают.

буду пытать инет дальше.

Joiner
Offline
Зарегистрирован: 04.09.2014

TovBender пишет:

...хоть ктото в серьёз занялся шрифтами.........

Да это разве всерьез?..Если поискать по этому форуму, можно найти темы где люди на самом деле всерьез занимались этим. Есть очень красивые решения. Все расписано как сделать...Но я пока не могу полностью все понять, не хватает времени и знаний. Готовый русский шрифт на своем дисплейчике использовать удалось (на ILI9361), а на дисплейчике Nokia 5110 даже сам подредактировал русский шрифт, сделал его красивее.

Сейчас удалось "расшифровать" как строится буква в библиотеке. Оказывается все байты массива, определяющего букву, как бэ выстраиваются в длинную линейку битов, а потом эта линейка режется на кусочки, по количеству битов, равному ширине шрифта. Потом из этих кусочков складывается стопка, равная высоте шрифта, и получается буква. Пока вот так :)

TovBender
Offline
Зарегистрирован: 12.04.2015

   товарищь Joiner

могу подилится как я русифицировал свой дисплейчик TFT 1.8 128*160   ТУТ обсуждение и примеры

может в дальнейшем пригодится вдруг.

у меня тоже появился дисплейчик ILI9361 / а как вы добавляете доп. шрифты русские в этот экран.

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

Joiner
Offline
Зарегистрирован: 04.09.2014

TovBender пишет:

   товарищь Joiner

могу подилится как я русифицировал свой дисплейчик TFT 1.8 128*160   ТУТ обсуждение и примеры

может в дальнейшем пригодится вдруг.

у меня тоже появился дисплейчик ILI9361 / а как вы добавляете доп. шрифты русские в этот экран.

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

Могу скинуть руссифицированную библиотеку для ILI9163. Немного выше в этой теме картинка часиков, сделаных с этой библиотекой. Там "Воскресение" написано чисто по-русски :) 

Только эта библиотека работает в комплекте с библиотекой Adafruit.

А сейчас я ломаю голову с библиотекой для ILI9163, которая работает без Adafruit, и имеет возможность подключать внешние шрифты. Хочу понять, как для нее сделать русский шрифт.

А по Вашей ссылке не про шрифт, а про беспроводной выключатель.

TovBender
Offline
Зарегистрирован: 12.04.2015

тов Joiner извеняюсь за битую ссылку, чтото пошло не так.  ------------------   

Тут исправил. про шрифты   и    ТУТ

и тут  вид шрифтов кривой 

 

TovBender
Offline
Зарегистрирован: 12.04.2015

и ещё нашёл с несколько примеров готовых.  под U8Glib под разные дисплееи 

эти шрифты как я понял вы уже попробовали.

а часики стрелочные оочень даже симпатичные.   скетч тот же ?  или изменили сильно. ?

Joiner
Offline
Зарегистрирован: 04.09.2014

TovBender пишет:

и ещё нашёл ...............

Спасибо, почитаю...может чего пойму :)

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Joiner пишет:

Сейчас удалось "расшифровать" как строится буква в библиотеке. Оказывается все байты массива, определяющего букву, как бэ выстраиваются в длинную линейку битов, а потом эта линейка режется на кусочки, по количеству битов, равному ширине шрифта. Потом из этих кусочков складывается стопка, равная высоте шрифта, и получается буква. Пока вот так :)

Ну, это лишь один из вариантов. Кстати, оптимальный по занимаемому месту, но неоптимальный по скорости отрисовки.

В других вариантах может использоваться целое число байт на фрагмент (строку или столбец пикселей). Например, для шрифта шириной 20 пикселей может использоваться 3 байта на строку.

Еще вариант - растр хранится не построчно, а "постолбцово", т.е. в виде не горизонтальных, а вертикальных полосок.

Но это все, естественно, только про растровые шрифты, тогда как в теме поднимался вопрос и векторных.

 

Joiner
Offline
Зарегистрирован: 04.09.2014

andriano пишет:

Ну, это лишь один из вариантов. .......

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

Вот как в этой библиотеке описывается шрифт arial20, хотелось бы в него добавить или лучше заменить на русские буквы. И еще хотелось бы сделать отдельный шрифт с большими цифрами от 0 до 9


/*******************************************************************************

* name: arial20
* family: Arial Narrow
* size: 20
* style: Normal
* --------------------------------------
* included characters:  !"#$%&'()*+,-./0123456789:;<=>?\x0040ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
* --------------------------------------
* antialiasing: no
* ascent:		25
* descent:		6
* type: proportional
* encoding: latin1
* unicode bom: no
*
* data block size: 8 bit(s), uint8_t
* RLE compression enabled: no
* conversion type: Monochrome, Edge 144
* bits per pixel: 1
*
* preprocess:
*  main scan direction: top_to_bottom
*  line scan direction: forward
*  inverse: yes
*  Template filename: C:/Users/chinatown/Desktop/lcd-image-converter-beta/sumotoy_font_2.4.tmpl
* ------------------------------------------------------------------------------
* Created by a custom template of LCD-Image-Converter for .s.u.m.o.t.o.y.
* Font template version: 2.4
* Note: Font height should be fixed and all glyps must have the same height!
* ------------------------------------------------------------------------------
*******************************************************************************/

#if !defined(SUMO_FNT_LIB_arial20)
#define SUMO_FNT_LIB_arial20

#include <stdint.h>



const _smCharType image_data_arial20_0x20[1] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00};//character: ' '

const tImage arial20_0x20 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x20, 5, 1};//character: ' ' (charW,total bytes)

const _smCharType image_data_arial20_0x21[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x01, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00 };//character: '!'

const tImage arial20_0x21 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x21, 5, 13};//character: '!' (charW,total bytes)

const _smCharType image_data_arial20_0x22[15] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x01, 0x45, 0x14, 0x51, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '"'

const tImage arial20_0x22 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x22, 6, 15};//character: '"' (charW,total bytes)

const _smCharType image_data_arial20_0x23[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x08, 0x84, 0x42, 0x23, 0x27, 0xfc, 0x88, 0x44, 0x22, 0x11, 0x3f, 0xe4, 0x44, 0x42, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '#'

const tImage arial20_0x23 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x23, 9, 23};//character: '#' (charW,total bytes)

const _smCharType image_data_arial20_0x24[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x08, 0x1e, 0x0a, 0x89, 0x24, 0x92, 0x41, 0xa0, 0x70, 0x0e, 0x05, 0x82, 0x49, 0x24, 0x91, 0x50, 0x70, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00 };//character: '$'

const tImage arial20_0x24 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x24, 9, 23};//character: '$' (charW,total bytes)

const _smCharType image_data_arial20_0x25[38] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x70, 0x41, 0xb1, 0x02, 0x22, 0x04, 0x48, 0x08, 0x90, 0x11, 0x20, 0x36, 0x9c, 0x39, 0x6c, 0x04, 0x88, 0x09, 0x10, 0x22, 0x20, 0x44, 0x41, 0x0d, 0x82, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '%'

const tImage arial20_0x25 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x25, 15, 38};//character: '%' (charW,total bytes)

const _smCharType image_data_arial20_0x26[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x03, 0xc0, 0xcc, 0x10, 0x82, 0x10, 0x46, 0x07, 0x81, 0xc0, 0x68, 0x48, 0x99, 0x0e, 0x20, 0xc4, 0x10, 0x47, 0x87, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '&'

const tImage arial20_0x26 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x26, 11, 28};//character: '&' (charW,total bytes)

const _smCharType image_data_arial20_0x27[8] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x09, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '''

const tImage arial20_0x27 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x27, 3, 8};//character: ''' (charW,total bytes)

const _smCharType image_data_arial20_0x28[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x44, 0x21, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0xc2, 0x10, 0x82, 0x00 };//character: '('

const tImage arial20_0x28 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x28, 5, 13};//character: '(' (charW,total bytes)

const _smCharType image_data_arial20_0x29[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x04, 0x10, 0x84, 0x10, 0x84, 0x21, 0x08, 0x42, 0x11, 0x88, 0x42, 0x20, 0x00 };//character: ')'

const tImage arial20_0x29 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x29, 5, 13};//character: ')' (charW,total bytes)

const _smCharType image_data_arial20_0x2a[15] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x8f, 0x88, 0x51, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '*'

const tImage arial20_0x2a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2a, 6, 15};//character: '*' (charW,total bytes)

const _smCharType image_data_arial20_0x2b[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x04, 0x1f, 0xf0, 0x40, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '+'

const tImage arial20_0x2b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2b, 10, 25};//character: '+' (charW,total bytes)

const _smCharType image_data_arial20_0x2c[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x22, 0x00, 0x00 };//character: ','

const tImage arial20_0x2c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2c, 5, 13};//character: ',' (charW,total bytes)

const _smCharType image_data_arial20_0x2d[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '-'

const tImage arial20_0x2d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2d, 5, 13};//character: '-' (charW,total bytes)

const _smCharType image_data_arial20_0x2e[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 };//character: '.'

const tImage arial20_0x2e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2e, 5, 13};//character: '.' (charW,total bytes)

const _smCharType image_data_arial20_0x2f[15] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x20, 0x82, 0x10, 0x41, 0x08, 0x20, 0x82, 0x10, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00 };//character: '/'

const tImage arial20_0x2f 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x2f, 6, 15};//character: '/' (charW,total bytes)

const _smCharType image_data_arial20_0x30[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x19, 0x88, 0x48, 0x14, 0x0a, 0x05, 0x02, 0x81, 0x40, 0xa0, 0x50, 0x24, 0x23, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '0'

const tImage arial20_0x30 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x30, 9, 23};//character: '0' (charW,total bytes)

const _smCharType image_data_arial20_0x31[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x02, 0x01, 0x01, 0x81, 0x41, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '1'

const tImage arial20_0x31 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x31, 9, 23};//character: '1' (charW,total bytes)

const _smCharType image_data_arial20_0x32[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x10, 0x90, 0x28, 0x10, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '2'

const tImage arial20_0x32 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x32, 9, 23};//character: '2' (charW,total bytes)

const _smCharType image_data_arial20_0x33[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x10, 0x90, 0x28, 0x10, 0x08, 0x0c, 0x3c, 0x03, 0x00, 0x80, 0x50, 0x28, 0x12, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '3'

const tImage arial20_0x33 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x33, 9, 23};//character: '3' (charW,total bytes)

const _smCharType image_data_arial20_0x34[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x01, 0x00, 0x80, 0xc0, 0x60, 0x50, 0x28, 0x24, 0x22, 0x11, 0x10, 0x8f, 0xf0, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '4'

const tImage arial20_0x34 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x34, 9, 23};//character: '4' (charW,total bytes)

const _smCharType image_data_arial20_0x35[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x3f, 0x90, 0x08, 0x04, 0x04, 0x02, 0xf1, 0x84, 0x81, 0x00, 0x80, 0x50, 0x28, 0x32, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '5'

const tImage arial20_0x35 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x35, 9, 23};//character: '5' (charW,total bytes)

const _smCharType image_data_arial20_0x36[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x0e, 0x18, 0x88, 0x28, 0x14, 0x02, 0xf1, 0x84, 0x81, 0x40, 0xa0, 0x50, 0x24, 0x13, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '6'

const tImage arial20_0x36 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x36, 9, 23};//character: '6' (charW,total bytes)

const _smCharType image_data_arial20_0x37[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x7f, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x06, 0x02, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '7'

const tImage arial20_0x37 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x37, 9, 23};//character: '7' (charW,total bytes)

const _smCharType image_data_arial20_0x38[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x10, 0x90, 0x28, 0x14, 0x0b, 0x0c, 0xfc, 0xc3, 0x40, 0xa0, 0x50, 0x28, 0x12, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '8'

const tImage arial20_0x38 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x38, 9, 23};//character: '8' (charW,total bytes)

const _smCharType image_data_arial20_0x39[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x18, 0x98, 0x48, 0x14, 0x0a, 0x05, 0x02, 0x43, 0x1e, 0x80, 0x50, 0x28, 0x22, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '9'

const tImage arial20_0x39 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x39, 9, 23};//character: '9' (charW,total bytes)

const _smCharType image_data_arial20_0x3a[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 };//character: ':'

const tImage arial20_0x3a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3a, 5, 13};//character: ':' (charW,total bytes)

const _smCharType image_data_arial20_0x3b[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x22, 0x00, 0x00 };//character: ';'

const tImage arial20_0x3b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3b, 5, 13};//character: ';' (charW,total bytes)

const _smCharType image_data_arial20_0x3c[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0x40, 0x0c, 0x00, 0xc0, 0x0c, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '<'

const tImage arial20_0x3c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3c, 10, 25};//character: '<' (charW,total bytes)

const _smCharType image_data_arial20_0x3d[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '='

const tImage arial20_0x3d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3d, 10, 25};//character: '=' (charW,total bytes)

const _smCharType image_data_arial20_0x3e[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0c, 0x00, 0xc0, 0x0c, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '>'

const tImage arial20_0x3e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3e, 10, 25};//character: '>' (charW,total bytes)

const _smCharType image_data_arial20_0x3f[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1e, 0x10, 0x90, 0x28, 0x10, 0x08, 0x04, 0x04, 0x06, 0x02, 0x02, 0x01, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '?'

const tImage arial20_0x3f 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x3f, 9, 23};//character: '?' (charW,total bytes)

const _smCharType image_data_arial20_0x40[43] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x01, 0xf8, 0x03, 0x06, 0x03, 0x00, 0x81, 0x00, 0x21, 0x0e, 0x98, 0x99, 0x84, 0x88, 0x42, 0x48, 0x21, 0x24, 0x10, 0x92, 0x08, 0x49, 0x08, 0x44, 0x84, 0x62, 0x26, 0x60, 0x9c, 0xe0, 0x40, 0x02, 0x10, 0x02, 0x06, 0x06, 0x00, 0xfc, 0x00, 0x00, 0x00 };//character: '\x0040'

const tImage arial20_0x40 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x40, 17, 43};//character: '\x0040' (charW,total bytes)

const _smCharType image_data_arial20_0x41[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x80, 0x28, 0x05, 0x00, 0xa0, 0x22, 0x04, 0x40, 0x88, 0x20, 0x87, 0xf0, 0x82, 0x20, 0x24, 0x04, 0x80, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'A'

const tImage arial20_0x41 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x41, 11, 28};//character: 'A' (charW,total bytes)

const _smCharType image_data_arial20_0x42[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x0f, 0xe1, 0x02, 0x20, 0x24, 0x04, 0x80, 0x90, 0x33, 0xfc, 0x40, 0xc8, 0x09, 0x01, 0x20, 0x24, 0x04, 0x81, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'B'

const tImage arial20_0x42 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x42, 11, 28};//character: 'B' (charW,total bytes)

const _smCharType image_data_arial20_0x43[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0xf0, 0x10, 0x82, 0x04, 0x20, 0x24, 0x02, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x22, 0x02, 0x20, 0x41, 0x08, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'C'

const tImage arial20_0x43 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x43, 12, 30};//character: 'C' (charW,total bytes)

const _smCharType image_data_arial20_0x44[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x07, 0xf0, 0x40, 0x84, 0x04, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x04, 0x40, 0x44, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'D'

const tImage arial20_0x44 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x44, 12, 30};//character: 'D' (charW,total bytes)

const _smCharType image_data_arial20_0x45[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x0f, 0xf9, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x03, 0xfe, 0x40, 0x08, 0x01, 0x00, 0x20, 0x04, 0x00, 0x80, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'E'

const tImage arial20_0x45 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x45, 11, 28};//character: 'E' (charW,total bytes)

const _smCharType image_data_arial20_0x46[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x1f, 0xe4, 0x01, 0x00, 0x40, 0x10, 0x04, 0x01, 0xfc, 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'F'

const tImage arial20_0x46 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x46, 10, 25};//character: 'F' (charW,total bytes)

const _smCharType image_data_arial20_0x47[33] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x7c, 0x04, 0x10, 0x40, 0x42, 0x01, 0x20, 0x09, 0x00, 0x08, 0x00, 0x41, 0xf2, 0x00, 0x90, 0x04, 0x40, 0x22, 0x01, 0x0c, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'G'

const tImage arial20_0x47 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x47, 13, 33};//character: 'G' (charW,total bytes)

const _smCharType image_data_arial20_0x48[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x04, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x27, 0xfe, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'H'

const tImage arial20_0x48 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x48, 12, 30};//character: 'H' (charW,total bytes)

const _smCharType image_data_arial20_0x49[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x01, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x80, 0x00, 0x00, 0x00 };//character: 'I'

const tImage arial20_0x49 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x49, 5, 13};//character: 'I' (charW,total bytes)

const _smCharType image_data_arial20_0x4a[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'J'

const tImage arial20_0x4a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4a, 8, 20};//character: 'J' (charW,total bytes)

const _smCharType image_data_arial20_0x4b[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x08, 0x09, 0x02, 0x20, 0x84, 0x20, 0x88, 0x13, 0x02, 0x60, 0x52, 0x0c, 0x41, 0x04, 0x20, 0x44, 0x08, 0x80, 0x90, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'K'

const tImage arial20_0x4b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4b, 11, 28};//character: 'K' (charW,total bytes)

const _smCharType image_data_arial20_0x4c[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'L'

const tImage arial20_0x4c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4c, 9, 23};//character: 'L' (charW,total bytes)

const _smCharType image_data_arial20_0x4d[38] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x60, 0x30, 0xc0, 0x61, 0x40, 0xc2, 0x82, 0x85, 0x05, 0x09, 0x0a, 0x12, 0x24, 0x24, 0x48, 0x48, 0x90, 0x8a, 0x21, 0x14, 0x42, 0x28, 0x84, 0x21, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'M'

const tImage arial20_0x4d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4d, 15, 38};//character: 'M' (charW,total bytes)

const _smCharType image_data_arial20_0x4e[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x04, 0x02, 0x60, 0x25, 0x02, 0x50, 0x24, 0x82, 0x44, 0x24, 0x42, 0x42, 0x24, 0x22, 0x41, 0x24, 0x0a, 0x40, 0xa4, 0x06, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'N'

const tImage arial20_0x4e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4e, 12, 30};//character: 'N' (charW,total bytes)

const _smCharType image_data_arial20_0x4f[33] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x7c, 0x04, 0x10, 0x40, 0x42, 0x02, 0x20, 0x09, 0x00, 0x48, 0x02, 0x40, 0x12, 0x00, 0x90, 0x04, 0x40, 0x42, 0x02, 0x08, 0x20, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'O'

const tImage arial20_0x4f 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x4f, 13, 33};//character: 'O' (charW,total bytes)

const _smCharType image_data_arial20_0x50[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x0f, 0xe1, 0x02, 0x20, 0x24, 0x04, 0x80, 0x90, 0x12, 0x04, 0x7f, 0x08, 0x01, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'P'

const tImage arial20_0x50 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x50, 11, 28};//character: 'P' (charW,total bytes)

const _smCharType image_data_arial20_0x51[33] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x7c, 0x06, 0x30, 0x40, 0x42, 0x02, 0x20, 0x09, 0x00, 0x48, 0x02, 0x40, 0x12, 0x00, 0x90, 0x04, 0x40, 0x62, 0x1a, 0x0c, 0x70, 0x3e, 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'Q'

const tImage arial20_0x51 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x51, 13, 33};//character: 'Q' (charW,total bytes)

const _smCharType image_data_arial20_0x52[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x07, 0xf8, 0x40, 0x84, 0x04, 0x40, 0x44, 0x04, 0x40, 0x44, 0x08, 0x7f, 0x04, 0x10, 0x40, 0x84, 0x08, 0x40, 0x44, 0x04, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'R'

const tImage arial20_0x52 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x52, 12, 30};//character: 'R' (charW,total bytes)

const _smCharType image_data_arial20_0x53[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x03, 0xc0, 0x84, 0x20, 0x44, 0x08, 0x80, 0x10, 0x01, 0x80, 0x0e, 0x00, 0x30, 0x02, 0x20, 0x44, 0x08, 0x42, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'S'

const tImage arial20_0x53 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x53, 11, 28};//character: 'S' (charW,total bytes)

const _smCharType image_data_arial20_0x54[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x3f, 0xe0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'T'

const tImage arial20_0x54 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x54, 10, 25};//character: 'T' (charW,total bytes)

const _smCharType image_data_arial20_0x55[30] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x04, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x20, 0x42, 0x04, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'U'

const tImage arial20_0x55 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x55, 12, 30};//character: 'U' (charW,total bytes)

const _smCharType image_data_arial20_0x56[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x10, 0x05, 0x01, 0x20, 0x24, 0x04, 0x41, 0x08, 0x21, 0x04, 0x11, 0x02, 0x20, 0x6c, 0x05, 0x00, 0xa0, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'V'

const tImage arial20_0x56 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x56, 11, 28};//character: 'V' (charW,total bytes)

const _smCharType image_data_arial20_0x57[38] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x82, 0x09, 0x0e, 0x12, 0x14, 0x24, 0x28, 0x48, 0x50, 0x89, 0x12, 0x12, 0x24, 0x24, 0x48, 0x58, 0xd0, 0xa0, 0xa1, 0x41, 0x42, 0x82, 0x82, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'W'

const tImage arial20_0x57 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x57, 15, 38};//character: 'W' (charW,total bytes)

const _smCharType image_data_arial20_0x58[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x10, 0x05, 0x01, 0x10, 0x43, 0x18, 0x22, 0x02, 0x80, 0x20, 0x04, 0x01, 0x40, 0x44, 0x10, 0x42, 0x08, 0x80, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'X'

const tImage arial20_0x58 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x58, 11, 28};//character: 'X' (charW,total bytes)

const _smCharType image_data_arial20_0x59[28] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x10, 0x05, 0x01, 0x10, 0x42, 0x08, 0x22, 0x04, 0x40, 0x50, 0x04, 0x00, 0x80, 0x10, 0x02, 0x00, 0x40, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'Y'

const tImage arial20_0x59 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x59, 11, 28};//character: 'Y' (charW,total bytes)

const _smCharType image_data_arial20_0x5a[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x3f, 0xe0, 0x08, 0x04, 0x02, 0x00, 0x80, 0x40, 0x20, 0x08, 0x04, 0x02, 0x00, 0x80, 0x40, 0x20, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'Z'

const tImage arial20_0x5a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5a, 10, 25};//character: 'Z' (charW,total bytes)

const _smCharType image_data_arial20_0x5b[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x03, 0x90, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x1c, 0x00 };//character: '['

const tImage arial20_0x5b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5b, 5, 13};//character: '[' (charW,total bytes)

const _smCharType image_data_arial20_0x5c[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x04, 0x20, 0x84, 0x20, 0x84, 0x21, 0x04, 0x21, 0x04, 0x20, 0x00, 0x00, 0x00 };//character: '\'

const tImage arial20_0x5c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5c, 5, 13};//character: '\' (charW,total bytes)

const _smCharType image_data_arial20_0x5d[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x03, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x9c, 0x00 };//character: ']'

const tImage arial20_0x5d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5d, 5, 13};//character: ']' (charW,total bytes)

const _smCharType image_data_arial20_0x5e[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '^'

const tImage arial20_0x5e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5e, 8, 20};//character: '^' (charW,total bytes)

const _smCharType image_data_arial20_0x5f[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00 };//character: '_'

const tImage arial20_0x5f 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x5f, 9, 23};//character: '_' (charW,total bytes)

const _smCharType image_data_arial20_0x60[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '`'

const tImage arial20_0x60 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x60, 5, 13};//character: '`' (charW,total bytes)

const _smCharType image_data_arial20_0x61[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x84, 0x82, 0x03, 0x1e, 0x98, 0x48, 0x24, 0x33, 0x18, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'a'

const tImage arial20_0x61 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x61, 9, 23};//character: 'a' (charW,total bytes)

const _smCharType image_data_arial20_0x62[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0xe1, 0x88, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x13, 0x11, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'b'

const tImage arial20_0x62 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x62, 9, 23};//character: 'b' (charW,total bytes)

const _smCharType image_data_arial20_0x63[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x80, 0x80, 0x80, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'c'

const tImage arial20_0x63 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x63, 8, 20};//character: 'c' (charW,total bytes)

const _smCharType image_data_arial20_0x64[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0xe8, 0x8c, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x11, 0x18, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'd'

const tImage arial20_0x64 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x64, 9, 23};//character: 'd' (charW,total bytes)

const _smCharType image_data_arial20_0x65[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x88, 0x82, 0x41, 0x3f, 0x90, 0x08, 0x04, 0x11, 0x10, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'e'

const tImage arial20_0x65 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x65, 9, 23};//character: 'e' (charW,total bytes)

const _smCharType image_data_arial20_0x66[15] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x72, 0x08, 0x21, 0xe2, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x00, 0x00, 0x00, 0x00 };//character: 'f'

const tImage arial20_0x66 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x66, 6, 15};//character: 'f' (charW,total bytes)

const _smCharType image_data_arial20_0x67[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x8c, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x11, 0x18, 0x74, 0x02, 0x41, 0x21, 0x0f, 0x00, 0x00 };//character: 'g'

const tImage arial20_0x67 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x67, 9, 23};//character: 'g' (charW,total bytes)

const _smCharType image_data_arial20_0x68[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0xe1, 0x8c, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x12, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'h'

const tImage arial20_0x68 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x68, 9, 23};//character: 'h' (charW,total bytes)

const _smCharType image_data_arial20_0x69[8] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x08, 0x00, 0x92, 0x49, 0x24, 0x90, 0x00, 0x00 };//character: 'i'

const tImage arial20_0x69 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x69, 3, 8};//character: 'i' (charW,total bytes)

const _smCharType image_data_arial20_0x6a[8] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x08, 0x00, 0x92, 0x49, 0x24, 0x92, 0x4b, 0x00 };//character: 'j'

const tImage arial20_0x6a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6a, 3, 8};//character: 'j' (charW,total bytes)

const _smCharType image_data_arial20_0x6b[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x40, 0x40, 0x40, 0x40, 0x42, 0x44, 0x48, 0x50, 0x70, 0x48, 0x44, 0x44, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'k'

const tImage arial20_0x6b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6b, 8, 20};//character: 'k' (charW,total bytes)

const _smCharType image_data_arial20_0x6c[8] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x09, 0x24, 0x92, 0x49, 0x24, 0x90, 0x00, 0x00 };//character: 'l'

const tImage arial20_0x6c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6c, 3, 8};//character: 'l' (charW,total bytes)

const _smCharType image_data_arial20_0x6d[38] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xce, 0x0c, 0x62, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'm'

const tImage arial20_0x6d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6d, 15, 38};//character: 'm' (charW,total bytes)

const _smCharType image_data_arial20_0x6e[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x8c, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x12, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'n'

const tImage arial20_0x6e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6e, 9, 23};//character: 'n' (charW,total bytes)

const _smCharType image_data_arial20_0x6f[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x88, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x11, 0x10, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'o'

const tImage arial20_0x6f 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x6f, 9, 23};//character: 'o' (charW,total bytes)

const _smCharType image_data_arial20_0x70[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xe1, 0x88, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x13, 0x11, 0x70, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00 };//character: 'p'

const tImage arial20_0x70 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x70, 9, 23};//character: 'p' (charW,total bytes)

const _smCharType image_data_arial20_0x71[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x8c, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x11, 0x18, 0x74, 0x02, 0x01, 0x00, 0x80, 0x40, 0x00 };//character: 'q'

const tImage arial20_0x71 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x71, 9, 23};//character: 'q' (charW,total bytes)

const _smCharType image_data_arial20_0x72[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x2d, 0xa8, 0x42, 0x10, 0x84, 0x21, 0x00, 0x00, 0x00, 0x00 };//character: 'r'

const tImage arial20_0x72 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x72, 5, 13};//character: 'r' (charW,total bytes)

const _smCharType image_data_arial20_0x73[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x30, 0x0c, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 's'

const tImage arial20_0x73 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x73, 8, 20};//character: 's' (charW,total bytes)

const _smCharType image_data_arial20_0x74[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x01, 0x08, 0x42, 0x38, 0x84, 0x21, 0x08, 0x42, 0x10, 0xc0, 0x00, 0x00, 0x00 };//character: 't'

const tImage arial20_0x74 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x74, 5, 13};//character: 't' (charW,total bytes)

const _smCharType image_data_arial20_0x75[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x04, 0x82, 0x41, 0x20, 0x90, 0x48, 0x24, 0x13, 0x18, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'u'

const tImage arial20_0x75 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x75, 9, 23};//character: 'u' (charW,total bytes)

const _smCharType image_data_arial20_0x76[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x04, 0x44, 0x22, 0x11, 0x05, 0x02, 0x81, 0x40, 0xa0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'v'

const tImage arial20_0x76 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x76, 9, 23};//character: 'v' (charW,total bytes)

const _smCharType image_data_arial20_0x77[33] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x09, 0x08, 0x44, 0xa4, 0x25, 0x21, 0x29, 0x05, 0x50, 0x2a, 0x81, 0x54, 0x04, 0x40, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'w'

const tImage arial20_0x77 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x77, 13, 33};//character: 'w' (charW,total bytes)

const _smCharType image_data_arial20_0x78[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'x'

const tImage arial20_0x78 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x78, 8, 20};//character: 'x' (charW,total bytes)

const _smCharType image_data_arial20_0x79[23] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x04, 0x44, 0x22, 0x11, 0x05, 0x02, 0x81, 0x40, 0xa0, 0x20, 0x10, 0x08, 0x08, 0x18, 0x00, 0x00 };//character: 'y'

const tImage arial20_0x79 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x79, 9, 23};//character: 'y' (charW,total bytes)

const _smCharType image_data_arial20_0x7a[20] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x40, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: 'z'

const tImage arial20_0x7a 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x7a, 8, 20};//character: 'z' (charW,total bytes)

const _smCharType image_data_arial20_0x7b[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0xc8, 0x42, 0x10, 0x84, 0x23, 0x30, 0xc2, 0x10, 0x84, 0x21, 0x06, 0x00 };//character: '{'

const tImage arial20_0x7b 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x7b, 5, 13};//character: '{' (charW,total bytes)

const _smCharType image_data_arial20_0x7c[10] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 };//character: '|'

const tImage arial20_0x7c 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x7c, 4, 10};//character: '|' (charW,total bytes)

const _smCharType image_data_arial20_0x7d[13] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x06, 0x08, 0x42, 0x10, 0x84, 0x21, 0x86, 0x62, 0x10, 0x84, 0x21, 0x30, 0x00 };//character: '}'

const tImage arial20_0x7d 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x7d, 5, 13};//character: '}' (charW,total bytes)

const _smCharType image_data_arial20_0x7e[25] 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif  
= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x47, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//character: '~'

const tImage arial20_0x7e 
#if defined(_FORCE_PROGMEM__) 
PROGMEM 
#endif 
= { image_data_arial20_0x7e, 10, 25};//character: '~' (charW,total bytes)


const tChar arial20_array[] = {

  // character: ' '
  {0x20, &arial20_0x20},

  // character: '!'
  {0x21, &arial20_0x21},

  // character: '"'
  {0x22, &arial20_0x22},

  // character: '#'
  {0x23, &arial20_0x23},

  // character: '$'
  {0x24, &arial20_0x24},

  // character: '%'
  {0x25, &arial20_0x25},

  // character: '&'
  {0x26, &arial20_0x26},

  // character: '''
  {0x27, &arial20_0x27},

  // character: '('
  {0x28, &arial20_0x28},

  // character: ')'
  {0x29, &arial20_0x29},

  // character: '*'
  {0x2a, &arial20_0x2a},

  // character: '+'
  {0x2b, &arial20_0x2b},

  // character: ','
  {0x2c, &arial20_0x2c},

  // character: '-'
  {0x2d, &arial20_0x2d},

  // character: '.'
  {0x2e, &arial20_0x2e},

  // character: '/'
  {0x2f, &arial20_0x2f},

  // character: '0'
  {0x30, &arial20_0x30},

  // character: '1'
  {0x31, &arial20_0x31},

  // character: '2'
  {0x32, &arial20_0x32},

  // character: '3'
  {0x33, &arial20_0x33},

  // character: '4'
  {0x34, &arial20_0x34},

  // character: '5'
  {0x35, &arial20_0x35},

  // character: '6'
  {0x36, &arial20_0x36},

  // character: '7'
  {0x37, &arial20_0x37},

  // character: '8'
  {0x38, &arial20_0x38},

  // character: '9'
  {0x39, &arial20_0x39},

  // character: ':'
  {0x3a, &arial20_0x3a},

  // character: ';'
  {0x3b, &arial20_0x3b},

  // character: '<'
  {0x3c, &arial20_0x3c},

  // character: '='
  {0x3d, &arial20_0x3d},

  // character: '>'
  {0x3e, &arial20_0x3e},

  // character: '?'
  {0x3f, &arial20_0x3f},

  // character: '\x0040'
  {0x40, &arial20_0x40},

  // character: 'A'
  {0x41, &arial20_0x41},

  // character: 'B'
  {0x42, &arial20_0x42},

  // character: 'C'
  {0x43, &arial20_0x43},

  // character: 'D'
  {0x44, &arial20_0x44},

  // character: 'E'
  {0x45, &arial20_0x45},

  // character: 'F'
  {0x46, &arial20_0x46},

  // character: 'G'
  {0x47, &arial20_0x47},

  // character: 'H'
  {0x48, &arial20_0x48},

  // character: 'I'
  {0x49, &arial20_0x49},

  // character: 'J'
  {0x4a, &arial20_0x4a},

  // character: 'K'
  {0x4b, &arial20_0x4b},

  // character: 'L'
  {0x4c, &arial20_0x4c},

  // character: 'M'
  {0x4d, &arial20_0x4d},

  // character: 'N'
  {0x4e, &arial20_0x4e},

  // character: 'O'
  {0x4f, &arial20_0x4f},

  // character: 'P'
  {0x50, &arial20_0x50},

  // character: 'Q'
  {0x51, &arial20_0x51},

  // character: 'R'
  {0x52, &arial20_0x52},

  // character: 'S'
  {0x53, &arial20_0x53},

  // character: 'T'
  {0x54, &arial20_0x54},

  // character: 'U'
  {0x55, &arial20_0x55},

  // character: 'V'
  {0x56, &arial20_0x56},

  // character: 'W'
  {0x57, &arial20_0x57},

  // character: 'X'
  {0x58, &arial20_0x58},

  // character: 'Y'
  {0x59, &arial20_0x59},

  // character: 'Z'
  {0x5a, &arial20_0x5a},

  // character: '['
  {0x5b, &arial20_0x5b},

  // character: '\'
  {0x5c, &arial20_0x5c},

  // character: ']'
  {0x5d, &arial20_0x5d},

  // character: '^'
  {0x5e, &arial20_0x5e},

  // character: '_'
  {0x5f, &arial20_0x5f},

  // character: '`'
  {0x60, &arial20_0x60},

  // character: 'a'
  {0x61, &arial20_0x61},

  // character: 'b'
  {0x62, &arial20_0x62},

  // character: 'c'
  {0x63, &arial20_0x63},

  // character: 'd'
  {0x64, &arial20_0x64},

  // character: 'e'
  {0x65, &arial20_0x65},

  // character: 'f'
  {0x66, &arial20_0x66},

  // character: 'g'
  {0x67, &arial20_0x67},

  // character: 'h'
  {0x68, &arial20_0x68},

  // character: 'i'
  {0x69, &arial20_0x69},

  // character: 'j'
  {0x6a, &arial20_0x6a},

  // character: 'k'
  {0x6b, &arial20_0x6b},

  // character: 'l'
  {0x6c, &arial20_0x6c},

  // character: 'm'
  {0x6d, &arial20_0x6d},

  // character: 'n'
  {0x6e, &arial20_0x6e},

  // character: 'o'
  {0x6f, &arial20_0x6f},

  // character: 'p'
  {0x70, &arial20_0x70},

  // character: 'q'
  {0x71, &arial20_0x71},

  // character: 'r'
  {0x72, &arial20_0x72},

  // character: 's'
  {0x73, &arial20_0x73},

  // character: 't'
  {0x74, &arial20_0x74},

  // character: 'u'
  {0x75, &arial20_0x75},

  // character: 'v'
  {0x76, &arial20_0x76},

  // character: 'w'
  {0x77, &arial20_0x77},

  // character: 'x'
  {0x78, &arial20_0x78},

  // character: 'y'
  {0x79, &arial20_0x79},

  // character: 'z'
  {0x7a, &arial20_0x7a},

  // character: '{'
  {0x7b, &arial20_0x7b},

  // character: '|'
  {0x7c, &arial20_0x7c},

  // character: '}'
  {0x7d, &arial20_0x7d},

  // character: '~'
  {0x7e, &arial20_0x7e}

};

//num chars, array, width, height, descent, compression, char remap code
/*
	char remap code:
	0:no remap
	1:remap minus to CAPITAL
	2:remap CAPITAL to minus
*/

const tFont arial20 = { 95, arial20_array, RLE_proportional, 20, 5, RLE_no, 0 };


#endif

 

Dmitriy49
Offline
Зарегистрирован: 07.06.2016

Joiner пишет:

Как и обещал показываю работу дисплейчика https://www.youtube.com/watch?v=n7jPeFdNzbk&feature=youtu.be

А если можно, выложите переделанный скетч пжлста.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Joiner, по-хорошему нужно смотреть определения типов _smCharType и tImage.

Иначе - только пытаться догадываться.

Что можно предположить: что имеется пропорциональный (т.е. с различной шириной символов) шрифт высотой 20 пикселей. Кодирование, судя по всему, осуществляется именно так, как Вы и описали, т.е. разворачиваем массив в цепочку битов и нарезаем ее кусочками равными ширине символа. Кусочки (каждый размещаем горизонтально) складываем в стопку по вертикали.

Соответственно, чтобы заменить начертание символа, нужно решить, какая у него будет ширтна, вписать это число в соответствующее поле, посчитать длину массива, для чего умножить ширину символа на его высоту (20) и поделить на 8 (битов в байте), результат округлить в большую сторону. Заполнить соответствующее поле. Нарисовать символ по клеточкам, перегруппировать строчки в биты и записать полученный байтовый массив.

Можно ли добавить русские буквы, не знаю - нужно смотреть функцию вывода символа. Вполне вероятно, что она не может работать с кодами символов выше 127. В любом случае, Вам нужно хорошо понимать, что такое кодировка символов, какие бывают кодировки, какая кодировка используется в Aeduino IDE, чем однобайтовые кодировки отличаются от кодировок с переменной длиной символа и т.д.

Что нужно сделать, чтобы сделать отдельно цифры большего размера.

Во-первых, как-то надо сообщить функцйии вывода вертикальный размер. Могу предположить, что для этого служит элемент массива tFont с индексом 3 (4-й по счету). Но лучше справиться в тексте библиотеки.

Во-вторых, нужно сообщить, сколько у нас вообще символов (обычно от 10 до 13, учитывая "." и "-"). Вероятнее всего для этого служит 0-й элемент массива tFont.

В-третьих, нужно сообщить, с какого символа начинается отсчет. Как это сделать, я не знаю: среди элементов tFont подходящего кандидата не обнаружил. Нужно смотреть код библиотеки. По идее в приведенном фонте это должно быть число 32. Но не исключаю, что число 32 прибавляется по умолчанию. Тогда возможный кандидат на эту роль - последний элемент в массиве tFont. Но нельзя исключать и варианта, что разработчик библиотеки не предусмотрел такой возможности.

Ну и в-четвертых - готовить данные по указанному выше алгоритму.

Igor_Simanov
Offline
Зарегистрирован: 25.10.2016

Превосходные и функциональные часы получились! Плюсую тему! Вот один из моих эксперементов с дисплеем LCD TFT 2.8  https://youtu.be/Yx5-GhII6Hk . Сплогиатил игру, но сразу не заработала, черные полосы по всему дисплею были, пришлось применить другую библиотеку и изменить код.

Joiner
Offline
Зарегистрирован: 04.09.2014

Dmitriy49 пишет:

А если можно, выложите переделанный скетч пжлста.

Переделанный скетч практически такой же как и первоначальный. Не вижу смысла выкладывать недоделанную заготовку, тем более что при доработке столкнулся с, неразрешимой для меня проблемой, нехваткой памяти. В новом скетче добавил функцию аналоговой клавиатуры, мелодию, и первоначальный экран цифровых часиков....и все...памяти больше нет. :))))) Разочаровался, пока отложил в долгий ящик.

Первоначальный скетч - это скетч, который я нашел в интернете и даже рассказывал где нашел. Немного переделал на свой дисплейчик ILI9163. Его уже выкладывал http://arduino.ru/forum/apparatnye-voprosy/tft-lcd-ili9163c-128x128?page=1#comment-161694

Ну уж если очень нужен еще недоделанный-переделанный скетч, могу выложить и его.

Joiner
Offline
Зарегистрирован: 04.09.2014

Igor_Simanov пишет:

Превосходные и функциональные часы получились! ............

Сплогиатил игру,................ пришлось применить другую библиотеку и изменить код.

Первое утверждение несколько преувеличено :) Это пока просто стрелочные часики без всяких функций. Улучшить пока не удалось, память кончилась. Видимо, просится экранчик как у Вас и Mega 2560, чтобы добавить туда все, что мне хочется, или как-то извратиться и впихнуть все в Pro mini.

 

Dmitriy49
Offline
Зарегистрирован: 07.06.2016

Joiner пишет:

Dmitriy49 пишет:

А если можно, выложите переделанный скетч пжлста.

Ну уж если очень нужен еще недоделанный-переделанный скетч, могу выложить и его.

Меня заинтересовал принцип переключения на цифровые часы. в первоначальном скетсе этого не прописано,

поэтому хотелось бы увидеть скетч.