Помогите подправить шрифт для LCD L2F50 от Siemens S65
- Войдите на сайт для отправки комментариев
Друзья, уперся в проблему и не знаю куда дальше копать.
Нашол на сайте http://compcar.ru/forum/showthread.php?t=7237 подключение и библиотеку для LCD L2F50 от Siemens S65.
Библиотеку я подправил под Arduino IDE версии 1.0.6.
Подправил кусок кода для правельного расположения текста.
Как на сайте http://forum.arduino.cc/index.php?topic=51440.15
В файле S65Display.cpp
uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color) { uint8_t ret, h, w; // h,w sind Laufvariablen für Höhe und Weite #if FONT_WIDTH <= 8 uint8_t data; #elif FONT_WIDTH <= 16 uint16_t data; #elif FONT_WIDTH <= 32 uint32_t data; #endif uint8_t i, j, width, height; const prog_uint8_t *ptr, *ptr_tmp; i = (uint8_t)c; #if FONT_WIDTH <= 8 ptr = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)]; #elif FONT_WIDTH <= 16 ptr = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)]; #elif FONT_WIDTH <= 32 ptr = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)]; #endif width = FONT_WIDTH; height = FONT_HEIGHT; if(size <= 1) { ret = x+width; if(ret > S65_WIDTH) { return S65_WIDTH+1; } setArea(x, y, (x+width-1), (y+height-1)); s65_drawStart(); ptr_tmp = ptr; for(w=width; w!=0; w--) // { ptr = ptr_tmp; //Serial.print("w="); Serial.println(w); delay(50); for(h= height; h!=0; h--) { #if FONT_WIDTH <= 8 data = pgm_read_byte(ptr); ptr+=1; #elif FONT_WIDTH <= 16 data = pgm_read_word(ptr); ptr+=2; #elif FONT_WIDTH <= 32 data = pgm_read_dword(ptr); ptr+=4; #endif if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos) // die ist in S6%Dislay.h angelegt // und sieht so aus: // #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos)) { s65_draw(color); } else { s65_draw(bg_color); } } } s65_drawStop(); } else { ret = x+(width*size); if(ret > S65_WIDTH) { return S65_WIDTH+1; } s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1)); s65_drawStart(); ptr_tmp = ptr; for(w=width; w!=0; w--) // { ptr = ptr_tmp; //Serial.print("w="); Serial.println(w); delay(50); for(h= height; h!=0; h--) { #if FONT_WIDTH <= 8 data = pgm_read_byte(ptr); ptr+=1; #elif FONT_WIDTH <= 16 data = pgm_read_word(ptr); ptr+=2; #elif FONT_WIDTH <= 32 data = pgm_read_dword(ptr); ptr+=4; #endif if(CHECK_BIT(data,w)) { for(j=size; j!=0; j--) { s65_draw(color); } } else { for(j=size; j!=0; j--) { s65_draw(bg_color); } } } } s65_drawStop(); } return ret; }
И добавил в файле S65Display.h
#define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))
Все работает.
Но захотелось мне вывести русский язык и здесть начались проблеммы.
Шрифты все работают, меняются в fonts.h.
Нашел чужой шрифт, выводит слова на русском, но через букву добавляет мусор.
На англ. все в порядке.
Отключил #define FONT_END7F в fonts.h чтобы от 0x80 до 0xbf были русские буквы.
В шрифте англ. и русские буквы ни чего лишнего но и знаки и цифры конечно. Все стандартно.
Пока не разобрался как, и какой программой под этот дисплей шрифт сделать.
Но шрифт нормальный может в uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color) проблема.
Подскажите где копать.
Как это можно исправить.
В шрифте 8х8 выводит / палочку перед русской буквой.
Это 12х15 выводит мусор перед русской буквой.
Вот быблиотека S65Display_V2_rus http://yadi.sk/d/ovGNZY4apsB39
Поключение экрана в моей библиотеке S65Display_V2_rus :
А я разобрался
Функции тут ни при чем. Это сама IDE кидает мусор перед русскими буквами
Функции тут ни при чем. Это сама IDE кидает мусор перед русскими буквами
Разве дисплей подключен к IDE? IDE не работает на ардуине и, соответсвенно, никакой мусор никуда бросать не в состоянии.
Функции тут ни при чем. Это сама IDE кидает мусор перед русскими буквами
Разве дисплей подключен к IDE? IDE не работает на ардуине и, соответсвенно, никакой мусор никуда бросать не в состоянии.
Только когда в IDE пишешь русскими буквами, она компилит с мусором. Я игрался с кодировками, так и не подобрал нужную. Поэтому просто ловил этот мусор по кодам символов
когда в IDE пишешь русскими буквами, она компилит с мусором. Я игрался с кодировками, так и не подобрал нужную. Поэтому просто ловил этот мусор по кодам символов
Ну, опять же IDE сама ничего не компилит. Она вызывает gcc для этого. А, проблемы, насколько я понимаю, из-за юникода.
Про IDE это я образно. Понятно что проблемы из-за кодировки. Ведь если записать русские буквы через IDE в контроллер, то в сериал отображаться корректно они не будут. И дисплей поэтому мусор показывает. Но вот как по другому отправить в функцию без мусора
Кстати мусор этот идет кодом 208 и 209
C "а" по "о" идет код 208, а с "у" и далее код 209
C "а" по "о" идет код 208, а с "у" и далее код 209
Родное сердце! Открой для себя кодировку UTF-8 Узнаешь много нового ;)))))))))