как вывести русские буквы на LCD ST7920?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

 На восьмой меге модуль ИК пиёмника ))). А по коментам, да как то стремаюсь я показывать как всё это у меня туго выходило и как всем форумом наставляли на путь истинный. В ролике вроде как со стороны всё просто получается, а если по ссылкам ковырнуть так  нуб нубом получусь. 

Ага - я подозревал, что кому-то пригодится ИК на восьмой.

Нечего там стесняться - начал с нуля и довёл до реализации проекта в железе.

Бывает, увидишь на ютубе интересную реализацию - ни описания, что это, как это, не понятно, где концы искать.

Сделай - оно полезно всем будет, и новичкам, и тебе.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Отошли от темы!

Я решил поиграться с аналогичным дисплеем подключил по HW SPI - указывая только CS пин - все замечательно, но нет русского языка.

1. Ставим Fontforge (если некорретно отображаются строки - удалить русскую локаль - будет инглиш)

2. качаем шрифты BDF

3. Так как русский в юникоде кодируется 2 байтами а библиотека работает с однобайтовыми строками - юникод отпадает на глаза попалась кодировка ISO8859-5 где английские и руские буквы ограниченны одним байтом. Конвертим кодировку BDF c помощью fontforge, добавляем свои символы если надо.

4. используя команды типа "bdf2u8g font/6x10.bdf u8g_font_6x10 utility/u8g_font_6x10.c" конвертим обратно, попутно удаляя дубликаты из "utility/u8g_font_data.c" или добавляем как новый в "utility/u8g.h" и кидаем рядом ".с" файлик

5. записывать строки придется "\xb0\xb1\xb2\xb3" //АБВГ

В планах переписать препроцессор Arduino IDE добавив перекодировку UTF-8 -> ISO8859-5 - чтобы записывать как есть.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Переписал исходники IDE добавил настройку в какой кодировке выводить исходник. Вобщем теперь он UTF8 перекодирует в  то что я хочу во время препроцессинга исходника.

Выкладывать пока рано - не тестировал.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

NeiroN пишет:

Выкладывать пока рано - не тестировал.

Протестировал! Все работает как Запланировано

/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]

PROFFIT!!!

hugoboss317
Offline
Зарегистрирован: 21.03.2013

titovich пишет:
сделал простой шрифт 5x7

titovich, а можно на BDF этого шрифта взглянуть?

DAD
Offline
Зарегистрирован: 23.06.2014

Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))

hugoboss317
Offline
Зарегистрирован: 21.03.2013

DAD пишет:

Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))

А Вы о чём? Ну или о ком?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Коли уж зашёл в тему, как то рисовал для себя русский 10х14, тоже самое - может кому-нЬтЬ.....

 

DAD
Offline
Зарегистрирован: 23.06.2014

О вам) Или про вас. Про тебя, в общем. Законченная конструкция - это так редко бывает. Молодец. По ходу пьесы, кстати, быстренько разобрался с нокиевским экранчиком. Огромный респект титовичу и лешаку. Очень полезный и доступный материал получился.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

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

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

goodwind
Offline
Зарегистрирован: 11.09.2014

hugoboss317 пишет:

Коли уж зашёл в тему, как то рисовал для себя русский 10х14, тоже самое - может кому-нЬтЬ.....

а bdf-ки под него не сохранилось? Или, еще лучше, если есть 6х9 и 6х10... был бы благодарен

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

hugoboss317
Offline
Зарегистрирован: 21.03.2013

А чегож, остался. Я тоже когда завёлся с русским, нужен был исходник. Правда не докричался.

В других размерах руского нет. Как напишите, миласти просим выкласть тут.

 

goodwind
Offline
Зарегистрирован: 11.09.2014

Благодарю, как сделаю - обязательно заделюсь

goodwind
Offline
Зарегистрирован: 11.09.2014

странно, отрисовал шрифт 6х9, залил в ардуино и получил вот такое: буквы пишутся через пробел

Причем, английские выглядят нормально.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

значит не правильно в били шрифт. Насколько я знаю там в шрифтах у каждого символа задается его ширина - у вас она встала поумолчанию. Переделайте шрифт правильно.

goodwind
Offline
Зарегистрирован: 11.09.2014

Спасибо!

Вы были правы - проверил ширину символов, и у пустых она оказалась равна шести. Не знаю почему, но после того как я выставил им ширину 1, всё встало на свои места. Еще чуть причешу шрифт и выложу сюда

titovich
Offline
Зарегистрирован: 29.05.2013

Скорее всего процедура вывода строки не понимает юникод  и для нее строчка "Готов" выглядит как "*Г*о*т*о*в"

где * - первый байт двухбайтного символа в кодировке юникод.

Поэтому, когда ширина "непечатаемых" символов была равна ширине символа - эти * печатались как пробел. Когда Вы изменили их ширину на 1, они стали незаметными.

P.S. IMHO )))

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Может вобще не то скажу, но IMHO ))).... Когдат подгонял вывод русских для экрана от нокиа 1280 (кодировка та же), также выводились с пробелом только не перед, а после русской буквы. На солько потом понял, после символа читаются и выводятся данные за пределами массива символов (шрифта) с шириной символа т.к. при загрузке в разные контроллеры или даже другой код с такой же функцией могли не пробелы выводится а "краказюки".  Указал номер последнего символа в массиве шрифта и если номер выводимого символа больше последнего, он игнорируется. Крайний "п" это 191. Всё что больше, return. И пошло всё поехало...

goodwind
Offline
Зарегистрирован: 11.09.2014

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

Залил fon файлы на дропбокс, может кому полезны будут. В архиве 6х9 и 6х10. Там пара символов еще добавлена служебных для интерфейса 3D-принтера, не стал их удалять.

 

 

m3xx
Offline
Зарегистрирован: 03.10.2014

NeiroN пишет:

/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]

Товарищ NeiroN, меня заинтересовал ваш пост. Не смотря на то, что в описанной вами инструкции количество действий около 0, у меня не получилось повторить ваш подвиг.

Я занимаюсь тем же что и goodwind - руссификация LCD для 3D-принтера. И так же как у него возникла проблема с кодировкой. Путём небольших доработок кода получилось отобразить русские буквы без этих громадных пробелов между ними (коими являются спец символы русских букв в UTF-8), а так же верно выщитывать длины этих строк, что влияет на табуляцию в отображении. Но все же хотелось бы сделать красиво - иметь исходные строки в однобайтовой кодировке, чтобы можно было запутсить тот же самый механизм как и для латиницы.

Использую версию Arduino IDE 1.0.5 (тобишь как и у вас), скачал ваш pde.jar и заменил им одноименный в папке lib, в настройках появилось поле "Кодировка строк". Какие я только не ставил кодирвоки: и MS-DOS и KOI8-R и ASCII. Результат один и тот же - конечная строка так и остается в UTF-8.

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

goodwind
Offline
Зарегистрирован: 11.09.2014

Поделитесь решением проблемы с табуляцией, пожалуйста.. Все руки не дойдут разобраться

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Может я не писал - оно не меняет кодировку скетча при его сохранениее, оно меняет его кодировку преред компиляцией. Шрифт тоже должен быть в этой кодировке. Скачайте лучше целиком мою версию иде, где все библиотеки http://yadi.sk/d/B-IHNu6QJdiCX

я использовал этот шрифт и думаю что он оптимален u8g.setFont(u8g_font_6x10e);  он уже скомпилирован и нет никаких пробелов, кодировка шрифта ISO-8859-5(вы спросите отчего же не CP-1251 - программа редактирования не поддерживала его)

 

m3xx
Offline
Зарегистрирован: 03.10.2014

По просьбе goodwind:

1. Первое наперво нужно изменить шрифты 6x9 и 6x10, которые сделал goodwind. А именно нужно сделать ширину всех символов 6 точек (будь то "точка", "пробел" или буква). Это объясняется тем, что длина любой отображаемой строки на дисплее должна быть одинаковой в независимости от содержимого. У вас, например, "восклицательный знак" занимает 2 или 3 точки. Спецсимволы, которые вы сделали шириной в 1 точку а на дисплее они отображались в самом начале пробелами, можно сделать как угодно, так как в итоге нашей целью является исключение этих кодов при выводе информации на LCD. Это умозаключение я сделал, когда распечатал всю латиницу, знаки и символы стандартным марлиновским шрифтом и своим акуляром оценил занимаемое пространство на дисплее каждым символом.

2. Далее делаем уже не раз обмусоленную операцию конвертирования bdf2u8g отредактированных шрифтов и идём в конец файла dogm_font_data_marlin.h и вставляем что-то типа токого текста:

01#include "language.h"
02 
03#if LANGUAGE_CHOICE == 6
04# include "u8g_font_6x9_cyrillic.h"
05# define u8g_font_6x9       u8g_font_6x9_cyrillic
06 
07# include "u8g_font_6x10_cyrillic.h"
08# define u8g_font_6x10_marlin   u8g_font_6x10_cyrillic
09# define u8g_font_9x18      u8g_font_6x10_cyrillic
10#endif // LANGUAGE_CHOICE

где u8g_font_6x9_cyrillic.h и u8g_font_6x10_cyrillic.h это заголовочные файлы где лежат массивы соответсвующих шрифтов. Я сделал подмену имён массивов с помощью макроопределений лишь с той и только с той целью, чтобы не бегать по скетчу и не искать где нужно поменять шрифты. А так в "language.h" поменял дефайн LANGUAGE_CHOICE и не паришься.

3. Самый ёмкий пункт. Тут пришлось переделать код в файле dogm_lcd_implementation.h. В нём очень часто встречается следующий код:

1while( (c = pgm_read_byte(pstr)) != '\0' )
2{
3    u8g.print(c);
4    pstr++;
5    n--;
6}

Очевидно, что этот код выводит посимвольно строку на LCD дисплей. Имеено сдесь находится причина вывода пустых спецсимволов (пробелов), так как в кодировке UTF-8 русские буквы кодируются двумя байтами, где 1ый - это код страницы (кстати он никогда, вроде, не совпадает по значению с литинскими буквами) и 2ой - это сам код символа. Понятно, что программа не должна выводить спецсимволы. Так же нужно будет в этом файле переделать функцию расчета длины строки с учетом вышесказанного, т.к. действующая считает число однобайтовых символов в строке. Не буду вас утомлять теорией и кину листинг этого файла:

001/**
002 *dogm_lcd_implementation.h
003 *
004 *Graphics LCD implementation for 128x64 pixel LCDs by STB for ErikZalm/Marlin
007 *
008 *With the use of:
009 *u8glib by Oliver Kraus
012 */
013 
014 
015#ifndef ULTRA_LCD_IMPLEMENTATION_DOGM_H
016#define ULTRA_LCD_IMPLEMENTATION_DOGM_H
017 
018/**
019* Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays.
020**/
021 
022#ifdef ULTIPANEL
023#define BLEN_A 0
024#define BLEN_B 1
025#define BLEN_C 2
026#define EN_A (1<<BLEN_A)
027#define EN_B (1<<BLEN_B)
028#define EN_C (1<<BLEN_C)
029#define encrot0 0
030#define encrot1 2
031#define encrot2 3
032#define encrot3 1
033#define LCD_CLICKED (buttons&EN_C)
034#endif
035 
036#include <U8glib.h>
037#include "DOGMbitmaps.h"
038#include "dogm_font_data_marlin.h"
039#include "ultralcd.h"
040#include "ultralcd_st7920_u8glib_rrd.h"
041 
042 
043/* Russian language not supported yet, needs custom font
044 
045#if LANGUAGE_CHOICE == 6
046#include "LiquidCrystalRus.h"
047#define LCD_CLASS LiquidCrystalRus
048#else
049#include <LiquidCrystal.h>
050#define LCD_CLASS LiquidCrystal
051#endif
052*/
053 
054// DOGM parameters (size in pixels)
055#define DOG_CHAR_WIDTH          6
056#define DOG_CHAR_HEIGHT         12
057#define DOG_CHAR_WIDTH_LARGE    9
058#define DOG_CHAR_HEIGHT_LARGE   18
059 
060 
061#define START_ROW               0
062 
063 
064/* Custom characters defined in font font_6x10_marlin.c */
065#if LANGUAGE_CHOICE == 6
066# define LCD_STR_DEGREE     "\xC1"
067#else
068# define LCD_STR_DEGREE     "\xB0"
069#endif
070#define LCD_STR_REFRESH     "\xF8"
071#define LCD_STR_FOLDER      "\xF9"
072 
073 
074#define LCD_STR_ARROW_RIGHT "\xFA"
075#define LCD_STR_UPLEVEL     "\xFB"
076#define LCD_STR_CLOCK       "\xFC"
077#define LCD_STR_FEEDRATE    "\xFD"
078#define LCD_STR_BEDTEMP     "\xFE"
079#define LCD_STR_THERMOMETER "\xFF"
080 
081#define FONT_STATUSMENU u8g_font_6x9
082 
083int lcd_contrast;
084 
085// LCD selection
086#ifdef U8GLIB_ST7920
087//U8GLIB_ST7920_128X64_RRD u8g(0,0,0);
088U8GLIB_ST7920_128X64_RRD u8g(0);
089#elif defined(MAKRPANEL)
090// The MaKrPanel display, ST7565 controller as well
091U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0);
092#else
093// for regular DOGM128 display with HW-SPI
094U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0);   // HW-SPI Com: CS, A0
095#endif
096 
097static void lcd_implementation_init()
098{
099#ifdef LCD_PIN_BL
100    pinMode(LCD_PIN_BL, OUTPUT);    // Enable LCD backlight
101    digitalWrite(LCD_PIN_BL, HIGH);
102#endif
103 
104        u8g.setContrast(lcd_contrast); 
105    //  Uncomment this if you have the first generation (V1.10) of STBs board
106    //  pinMode(17, OUTPUT);    // Enable LCD backlight
107    //  digitalWrite(17, HIGH);
108     
109    u8g.firstPage();
110    do {
111        u8g.setFont(u8g_font_6x10_marlin);
112        u8g.setColorIndex(1);
113        u8g.drawBox (0, 0, u8g.getWidth(), u8g.getHeight());
114        u8g.setColorIndex(1);
115       } while( u8g.nextPage() );
116 
117#ifdef LCD_SCREEN_ROT_90
118    u8g.setRot90(); // Rotate screen by 90°
119#endif
120 
121#ifdef LCD_SCREEN_ROT_180
122    u8g.setRot180();    // Rotate screen by 180°
123#endif
124 
125#ifdef LCD_SCREEN_ROT_270
126    u8g.setRot270();    // Rotate screen by 270°
127#endif
128 
129    
130    u8g.firstPage();
131    do {
132            // RepRap init bmp
133            u8g.drawBitmapP(0,0,START_BMPBYTEWIDTH,START_BMPHEIGHT,start_bmp);
134            // Welcome message
135            u8g.setFont(u8g_font_6x10_marlin);
136            u8g.drawStr(62,10,"MARLIN");
137            u8g.setFont(u8g_font_5x8);
138            u8g.drawStr(62,19,"V1.0.0 RC2-mm");
139            u8g.setFont(u8g_font_6x10_marlin);
140            u8g.drawStr(62,28,"by 3DArt");
141            u8g.drawStr(62,41,"DOGM128 LCD");
142            u8g.setFont(u8g_font_5x8);
143            u8g.drawStr(62,48,"enhancements");
144            u8g.setFont(u8g_font_5x8);
145            u8g.drawStr(62,55,"by STB, MM");
146            u8g.drawStr(62,61,"uses u");
147            u8g.drawStr90(92,57,"8");
148            u8g.drawStr(100,61,"glib");
149       } while( u8g.nextPage() );
150}
151 
152static void lcd_implementation_clear()
153{
154// NO NEED TO IMPLEMENT LIKE SO. Picture loop automatically clears the display.
155//
157//
158//  u8g.firstPage();
159//  do {   
160//          u8g.setColorIndex(0);
161//          u8g.drawBox (0, 0, u8g.getWidth(), u8g.getHeight());
162//          u8g.setColorIndex(1);
163//      } while( u8g.nextPage() );
164}
165 
166/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
167static void lcd_printPGM(const char* str)
168{
169    char c;
170    while((c = pgm_read_byte(str++)) != '\0')
171    {
172            u8g.print(c);
173    }
174}
175 
176#define DISPLAY_SYMBOL(ch) (((ch) >= 0x20 && (ch) <= 0xC1) || (ch) >= 0xF8)
177 
178static char lcd_print_string(const char* str)
179{
180    char c, count = 0;
181     
182    while((c = pgm_read_byte(str++)) != '\0')
183      if (DISPLAY_SYMBOL((unsigned char)c))
184      {
185        u8g.print(c);
186        count++;
187      }
188     
189    return count;
190}
191 
192static char strlen_(const char* str)
193{
194    char c, count = 0;
195     
196    while((c = pgm_read_byte(str++)) != '\0')
197      if (DISPLAY_SYMBOL((unsigned char)c))
198        count++;
199     
200    return count;
201}
202 
203static void lcd_implementation_status_screen()
204{
205 
206 static unsigned char fan_rot = 0;
207  
208 u8g.setColorIndex(1);  // black on white
209  
210 // Symbols menu graphics, animated fan
211 if ((blink % 2) &&  fanSpeed ) u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT,status_screen0_bmp);
212    else u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT,status_screen1_bmp);
213  
214 #ifdef SDSUPPORT
215 //SD Card Symbol
216 u8g.drawBox(42,42,8,7);
217 u8g.drawBox(50,44,2,5);
218 u8g.drawFrame(42,49,10,4);
219 u8g.drawPixel(50,43);
220 // Progress bar
221 u8g.drawFrame(54,49,73,4);
222  
223 // SD Card Progress bar and clock
224 u8g.setFont(FONT_STATUSMENU);
225  
226 if (IS_SD_PRINTING)
227   {
228    // Progress bar
229    u8g.drawBox(55,50, (unsigned int)( (71 * card.percentDone())/100) ,2);
230   }
231    else {
232            // do nothing
233         }
234  
235 u8g.setPrintPos(80,47);
236 if(starttime != 0)
237    {
238        uint16_t time = millis()/60000 - starttime/60000;
239 
240        u8g.print(itostr2(time/60));
241        u8g.print(':');
242        u8g.print(itostr2(time%60));
243    }else{
244            lcd_printPGM(PSTR("--:--"));
245         }
246 #endif
247  
248 // Extruder 1
249 u8g.setFont(FONT_STATUSMENU);
250 u8g.setPrintPos(6,6);
251 u8g.print(itostr3(int(degTargetHotend(0) + 0.5)));
252 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
253 u8g.setPrintPos(6,27);
254 u8g.print(itostr3(int(degHotend(0) + 0.5)));
255 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
256 if (!isHeatingHotend(0)) u8g.drawBox(13,17,2,2);
257    else
258        {
259         u8g.setColorIndex(0);  // white on black
260         u8g.drawBox(13,17,2,2);
261         u8g.setColorIndex(1);  // black on white
262        }
263  
264 // Extruder 2
265 u8g.setFont(FONT_STATUSMENU);
266 #if EXTRUDERS > 1
267 u8g.setPrintPos(31,6);
268 u8g.print(itostr3(int(degTargetHotend(1) + 0.5)));
269 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
270 u8g.setPrintPos(31,27);
271 u8g.print(itostr3(int(degHotend(1) + 0.5)));
272 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
273 if (!isHeatingHotend(1)) u8g.drawBox(38,17,2,2);
274    else
275        {
276         u8g.setColorIndex(0);  // white on black
277         u8g.drawBox(38,17,2,2);
278         u8g.setColorIndex(1);  // black on white
279        }
280 #else
281 u8g.setPrintPos(31,27);
282 u8g.print("---");
283 #endif
284  
285 // Extruder 3
286 u8g.setFont(FONT_STATUSMENU);
287 # if EXTRUDERS > 2
288 u8g.setPrintPos(55,6);
289 u8g.print(itostr3(int(degTargetHotend(2) + 0.5)));
290 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
291 u8g.setPrintPos(55,27);
292 u8g.print(itostr3(int(degHotend(2) + 0.5)));
293 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
294 if (!isHeatingHotend(2)) u8g.drawBox(62,17,2,2);
295    else
296        {
297         u8g.setColorIndex(0);  // white on black
298         u8g.drawBox(62,17,2,2);
299         u8g.setColorIndex(1);  // black on white
300        }
301 #else
302 u8g.setPrintPos(55,27);
303 u8g.print("---");
304 #endif
305  
306 // Heatbed
307 u8g.setFont(FONT_STATUSMENU);
308 u8g.setPrintPos(81,6);
309 u8g.print(itostr3(int(degTargetBed() + 0.5)));
310 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
311 u8g.setPrintPos(81,27);
312 u8g.print(itostr3(int(degBed() + 0.5)));
313 lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
314 if (!isHeatingBed()) u8g.drawBox(88,18,2,2);
315    else
316        {
317         u8g.setColorIndex(0);  // white on black
318         u8g.drawBox(88,18,2,2);
319         u8g.setColorIndex(1);  // black on white
320        }
321  
322 // Fan
323 u8g.setFont(FONT_STATUSMENU);
324 u8g.setPrintPos(104,27);
325 #if defined(FAN_PIN) && FAN_PIN > -1
326 u8g.print(itostr3(int((fanSpeed*100)/256 + 1)));
327 u8g.print("%");
328 #else
329 u8g.print("---");
330 #endif
331  
332  
333 // X, Y, Z-Coordinates
334 u8g.setFont(FONT_STATUSMENU);
335 u8g.drawBox(0,29,128,10);
336 u8g.setColorIndex(0);  // white on black
337 u8g.setPrintPos(2,37);
338 u8g.print("X");
339 u8g.drawPixel(8,33);
340 u8g.drawPixel(8,35);
341 u8g.setPrintPos(10,37);
342 u8g.print(ftostr31ns(current_position[X_AXIS]));
343 u8g.setPrintPos(43,37);
344 lcd_printPGM(PSTR("Y"));
345 u8g.drawPixel(49,33);
346 u8g.drawPixel(49,35);
347 u8g.setPrintPos(51,37);
348 u8g.print(ftostr31ns(current_position[Y_AXIS]));
349 u8g.setPrintPos(83,37);
350 u8g.print("Z");
351 u8g.drawPixel(89,33);
352 u8g.drawPixel(89,35);
353 u8g.setPrintPos(91,37);
354 u8g.print(ftostr31(current_position[Z_AXIS]));
355 u8g.setColorIndex(1);  // black on white
356  
357 // Feedrate
358 u8g.setFont(u8g_font_6x10_marlin);
359 u8g.setPrintPos(3,49);
360 u8g.print(LCD_STR_FEEDRATE[0]);
361 u8g.setFont(FONT_STATUSMENU);
362 u8g.setPrintPos(12,48);
363 u8g.print(itostr3(feedmultiply));
364 u8g.print('%');
365 
366 // Status line
367 u8g.setFont(FONT_STATUSMENU);
368 u8g.setPrintPos(0,61);
369 u8g.print(lcd_status_message);
370 
371}
372 
373static void lcd_implementation_drawmenu_generic(uint8_t row, const char* pstr, char pre_char, char post_char)
374{
375 
376 
377  uint8_t n = LCD_WIDTH - 1 - 2;
378 
379  if ((pre_char == '>') || (pre_char == LCD_STR_UPLEVEL[0] ))
380  {
381    u8g.setColorIndex(1);       // black on white
382    u8g.drawBox (0, row*DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT);
383    u8g.setColorIndex(0);       // following text must be white on black
384  } else u8g.setColorIndex(1); // unmarked text is black on white
385 
386  u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
387  if (pre_char != '>') u8g.print(pre_char); else u8g.print(' '); // Row selector is obsolete
388 
389  n -= lcd_print_string(pstr);
390  while (n--) u8g.print(' ');
391 
392 
393 
394 
395 
396 
397 
398 
399 
400  u8g.print(post_char);
401  u8g.print(' ');
402   
403  u8g.setColorIndex(1);     // restore settings to black on white
404   
405  return;
406}
407 
408static void lcd_implementation_drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char pre_char, char* data)
409{
410  static unsigned int fkt_cnt = 0;
411 
412  uint8_t n = LCD_WIDTH - 1 - 2 - strlen(data);
413         
414  u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
415  u8g.print(pre_char);
416 
417  n -= lcd_print_string(pstr);
418  u8g.print(':');
419   
420  while(n--) u8g.print(' ');
421 
422 
423 
424 
425 
426 
427 
428 
429 
430 
431  u8g.print(data);
432   
433  return;
434}
435 
436static void lcd_implementation_drawmenu_setting_edit_generic_P(uint8_t row, const char* pstr, char pre_char, const char* data)
437{
438  uint8_t n = LCD_WIDTH - 1 - 2 - strlen_(data);
439 
440 
441  u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
442  u8g.print(pre_char);
443   
444  n -= lcd_print_string(pstr);
445  u8g.print(':');
446 
447  while(n--) u8g.print(' ');
448  lcd_print_string(data);
449   
450  return;
451 
452 
453 
454 
455 
456 
457 
458 
459}
460 
461#define lcd_implementation_drawmenu_setting_edit_int3_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', itostr3(*(data)))
462#define lcd_implementation_drawmenu_setting_edit_int3(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', itostr3(*(data)))
463#define lcd_implementation_drawmenu_setting_edit_float3_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr3(*(data)))
464#define lcd_implementation_drawmenu_setting_edit_float3(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data)))
465#define lcd_implementation_drawmenu_setting_edit_float32_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data)))
466#define lcd_implementation_drawmenu_setting_edit_float32(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data)))
467#define lcd_implementation_drawmenu_setting_edit_float5_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data)))
468#define lcd_implementation_drawmenu_setting_edit_float5(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data)))
469#define lcd_implementation_drawmenu_setting_edit_float52_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data)))
470#define lcd_implementation_drawmenu_setting_edit_float52(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr52(*(data)))
471#define lcd_implementation_drawmenu_setting_edit_float51_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr51(*(data)))
472#define lcd_implementation_drawmenu_setting_edit_float51(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr51(*(data)))
473#define lcd_implementation_drawmenu_setting_edit_long5_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data)))
474#define lcd_implementation_drawmenu_setting_edit_long5(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data)))
475#define lcd_implementation_drawmenu_setting_edit_bool_selected(row, pstr, pstr2, data) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, '>', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF))
476#define lcd_implementation_drawmenu_setting_edit_bool(row, pstr, pstr2, data) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, ' ', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF))
477 
478//Add version for callback functions
479#define lcd_implementation_drawmenu_setting_edit_callback_int3_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', itostr3(*(data)))
480#define lcd_implementation_drawmenu_setting_edit_callback_int3(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', itostr3(*(data)))
481#define lcd_implementation_drawmenu_setting_edit_callback_float3_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr3(*(data)))
482#define lcd_implementation_drawmenu_setting_edit_callback_float3(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data)))
483#define lcd_implementation_drawmenu_setting_edit_callback_float32_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data)))
484#define lcd_implementation_drawmenu_setting_edit_callback_float32(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data)))
485#define lcd_implementation_drawmenu_setting_edit_callback_float5_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data)))
486#define lcd_implementation_drawmenu_setting_edit_callback_float5(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data)))
487#define lcd_implementation_drawmenu_setting_edit_callback_float52_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data)))
488#define lcd_implementation_drawmenu_setting_edit_callback_float52(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr52(*(data)))
489#define lcd_implementation_drawmenu_setting_edit_callback_float51_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr51(*(data)))
490#define lcd_implementation_drawmenu_setting_edit_callback_float51(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr51(*(data)))
491#define lcd_implementation_drawmenu_setting_edit_callback_long5_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data)))
492#define lcd_implementation_drawmenu_setting_edit_callback_long5(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data)))
493#define lcd_implementation_drawmenu_setting_edit_callback_bool_selected(row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, '>', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF))
494#define lcd_implementation_drawmenu_setting_edit_callback_bool(row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, ' ', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF))
495 
496void lcd_implementation_drawedit(const char* pstr, char* value)
497{
498        u8g.setPrintPos(0 * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW );
499        u8g.setFont(u8g_font_9x18);
500        lcd_printPGM(pstr);
501        u8g.print(':');
502        u8g.setPrintPos((14 - strlen(value)) * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW );
503        u8g.print(value);
504}
505 
506static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* pstr, const char* filename, char* longFilename)
507{
508    char c;
509    uint8_t n = LCD_WIDTH - 1;
510 
511    if (longFilename[0] != '\0')
512    {
513        filename = longFilename;
514        longFilename[LCD_WIDTH-1] = '\0';
515    }
516 
517        u8g.setColorIndex(1);       // black on white
518        u8g.drawBox (0, row*DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT);
519        u8g.setColorIndex(0);       // following text must be white on black
520        u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
521        u8g.print(' '); // Indent by 1 char
522        
523    while((c = *filename) != '\0')
524    {
525        u8g.print(c);
526        filename++;
527        n--;
528    }
529    while(n--){
530                    u8g.print(' ');
531               }
532    u8g.setColorIndex(1);       // black on white
533}
534 
535static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* pstr, const char* filename, char* longFilename)
536{
537    char c;
538    uint8_t n = LCD_WIDTH - 1;
539 
540    if (longFilename[0] != '\0')
541    {
542        filename = longFilename;
543        longFilename[LCD_WIDTH-1] = '\0';
544    }
545 
546        u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
547        u8g.print(' ');
548         
549while((c = *filename) != '\0')
550    {
551            u8g.print(c);
552         
553        filename++;
554        n--;
555    }
556    while(n--){
557                    u8g.print(' ');
558               }
559 
560}
561 
562static void lcd_implementation_drawmenu_sddirectory_selected(uint8_t row, const char* pstr, const char* filename, char* longFilename)
563{
564    char c;
565    uint8_t n = LCD_WIDTH - 2;
566         
567    if (longFilename[0] != '\0')
568    {
569        filename = longFilename;
570        longFilename[LCD_WIDTH-2] = '\0';
571    }
572        u8g.setColorIndex(1);       // black on white
573        u8g.drawBox (0, row*DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT);
574        u8g.setColorIndex(0);       // following text must be white on black
575        u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
576        u8g.print(' '); // Indent by 1 char
577        u8g.print(LCD_STR_FOLDER[0]);      
578        
579    while((c = *filename) != '\0')
580    {
581            u8g.print(c);
582         
583        filename++;
584        n--;
585    }
586    while(n--){
587                    u8g.print(' ');
588               }
589    u8g.setColorIndex(1);       // black on white
590}
591 
592static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* pstr, const char* filename, char* longFilename)
593{
594    char c;
595    uint8_t n = LCD_WIDTH - 2;
596 
597    if (longFilename[0] != '\0')
598    {
599        filename = longFilename;
600        longFilename[LCD_WIDTH-2] = '\0';
601    }
602 
603        u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
604        u8g.print(' ');
605        u8g.print(LCD_STR_FOLDER[0]);
606 
607    while((c = *filename) != '\0')
608    {
609            u8g.print(c);
610         
611        filename++;
612        n--;
613    }
614    while(n--){
615                    u8g.print(' ');
616               }
617}
618 
619#define lcd_implementation_drawmenu_back_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
620#define lcd_implementation_drawmenu_back(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', LCD_STR_UPLEVEL[0])
621#define lcd_implementation_drawmenu_submenu_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
622#define lcd_implementation_drawmenu_submenu(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', LCD_STR_ARROW_RIGHT[0])
623#define lcd_implementation_drawmenu_gcode_selected(row, pstr, gcode) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ')
624#define lcd_implementation_drawmenu_gcode(row, pstr, gcode) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ')
625#define lcd_implementation_drawmenu_function_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ')
626#define lcd_implementation_drawmenu_function(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ')
627 
628static void lcd_implementation_quick_feedback()
629{
630 
631#if BEEPER > -1
632    SET_OUTPUT(BEEPER);
633    for(int8_t i=0;i<10;i++)
634    {
635        WRITE(BEEPER,HIGH);
636        delay(3);
637        WRITE(BEEPER,LOW);
638        delay(3);
639    }
640#endif
641}
642#endif//ULTRA_LCD_IMPLEMENTATION_DOGM_H

Итог: Все это конечно не плохо, но сам подход ведёт к большому количеству доработок кода (как уже существующего так и добавляемого). Так, например, изменения которые мы сделали они каснулись только меню. А отображение строк на стартовой странице экрана также остается с "пробелами" между буквами ("*Г*о*т*о*в"). Можно и тут что-нибудь придумать. Но надо мыслить универсально! Именно поэтому я не считаю этот способ хорошим решением проблемы руссификации. А склоняюсь к методу, который предложил "NeiroN".

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Кстати поковырявшись в редакторе FontForge нашол как добавить(Encoding->Add encoding Name ...) кодировки мелкомягких называются "windows-1251" и "cp866" - теперь можно запилить шрифты русские и в этих кодировках. Кстати строки выводимые в сериал(веб интерфейс, запись в файлы) будут в них же(потому что скетч перед заливкой конвертится в них), вот только "Монитор порта" их не съест, ну можно любым другим терминалом.

Mephistt
Offline
Зарегистрирован: 15.10.2014

NeiroN пишет:

NeiroN пишет:

Выкладывать пока рано - не тестировал.

Протестировал! Все работает как Запланировано

/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]

PROFFIT!!!

Специально зарегистрировался, чтобы сказать спасибо.

Спасибо.

m3xx
Offline
Зарегистрирован: 03.10.2014

Так и не получилось по NeiroN'овски сделать. Вот взять, например, такой код:

1char lcd_status_message[20] = "АБВГДЕЖЗИКЛМН";

Объявлен однобайтовый массив размером в 20 символов и тутже проинициализировали его 13 символами. С учетом применения либы pde.jar by NeiroN, которая должна перед компиляцией текст "АБВГДЕЖЗИКЛМН" из UTF-8 перевести в указанную мною однобайтовую кодировку, компилятор выдает ошибку вида: инициализируемая строка слишком велика для объявленного массива.

Я решил не тратить время на поиск особенностей своей стреды, а решил на корню решить проблему - сохранять текст сразу в нужной мне кодировке. Я месяц как уже хотел перейти с Arduino IDE на Eclipse c плагином для работы с AVR микроконтроллерами. А тут ещё один лишний повод сделать это. Надо сказать пришлось немного подза***ться, но результат стоил стараний - удобство, быстрота, комфорт при работе с разными кодировками. В итоге взял за основу Windows-1251, налобал шрифт для неё в *.bdf формате, сконвертил, скомпилил, зашил и вот результат:

Full Graphic Smart ControllerFull Graphic Smart Controller

JerryLutor
Offline
Зарегистрирован: 13.11.2014

Не поделетесь файликами для русскикации прошивки?

temperator
Offline
Зарегистрирован: 13.11.2014

И мне, пожалуйста =)

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Что значит "для руссификации прошивки"? Просмотрите тему сначала. Уже всё выложили.

temperator
Offline
Зарегистрирован: 13.11.2014

Сорри. Но просто мои познания далеки от топик стартера.

А свой Мендель русифицировать хочеться. (заводской дисплей 12864)

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

Так что мне если можно, мне именно "файликом". Пиво или шоколадку в качестве благодарности гарантирую ;)

 
faraddin
Offline
Зарегистрирован: 11.08.2013

Офтоп! Вот интересно, осенне - весеннее увеличение числа девушек, резко увлекшихся ардуоной как то связано с приближающейся сессией?

Kлапаyций 99.99
Offline
Зарегистрирован: 11.10.2014

faraddin пишет:

Офтоп! Вот интересно, осенне - весеннее увеличение числа девушек, резко увлекшихся ардуоной как то связано с приближающейся сессией?

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

hugoboss317
Offline
Зарегистрирован: 21.03.2013

temperator пишет:

Сорри. Но просто мои познания далеки от топик стартера.

А свой Мендель русифицировать хочеться. (заводской дисплей 12864)

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

Так что мне если можно, мне именно "файликом". Пиво или шоколадку в качестве благодарности гарантирую ;)

 

Парни, ну вы реально как здрасте среди ночи. Какой дисплей? Синий с белыми квадратиками или всёж на вышеобсуждаемом контроллере?

В какой Вы прошивке и что собрались менять и в чём именно Вы слабы?

Наверное Вы думаете что существует некий файл, который можно просто загрузить в экранчик как то подключив его к компьютеру и он сразу скажет - " О-о-о-о, ПРИВЕТ МИР!" ну и в таком духе? Нет.

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

hugoboss317
Offline
Зарегистрирован: 21.03.2013

P.S. Извиняюсь за "Парни",окончание глагола "былА" не сразу увидел.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Я уже где-то кидал ссылку на "свою" среду целиком, со всеми нужными и ненужными библиотеками, тем что я пишу для развлечения тренировки мозгов

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Да, так и есть. В этой же теме выше. Я ж не просто так посылаю в начало...

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

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

temperator
Offline
Зарегистрирован: 13.11.2014

Сорри, если кого задела или обидела ;(

Экран вот такой: http://www.elecrow.com/12864-smart-lcd-controller-with-adapter-for-reprap-ramps-14-p-1095.html

Прошивка: Marlin

Принтер: Prusa I2 Mendel 

 

Ссылку на среду видела. Спасибо. Просто файлов Марлина там не нашла. Поэтому и спросила.

Да. реально полагала, что есть какой-то файлик вроде Configuration.h или language.h в котором хранится русский шрифт. И считала что кому-то не жалко ими поделиться.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Так с этого надо было начинать. Тогда стучите к m3xx.

И я тоже оффтоп. Не пойму, вы все что 3Д принтер почастям собираете чтоли? 

Kлапаyций 99.99
Offline
Зарегистрирован: 11.10.2014

стУдентЫ, колитесь - в каком универе лаба с принтером и "рускими буквами"?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Меня давно терзает вопрос  - "в каком универе работает пухлявый?" - полюбому это он задал детишкам)))

temperator
Offline
Зарегистрирован: 13.11.2014

hugoboss317 пишет:

Так с этого надо было начинать. Тогда стучите к m3xx.

И я тоже оффтоп. Не пойму, вы все что 3Д принтер почастям собираете чтоли? 

1) В теме не отвечает. А как в личку ему стукнуть?

2) нет. Покупаем в сборе в Китае, а после получения хочеться чтобы принтер заговорил на великом и могучем...

temperator
Offline
Зарегистрирован: 13.11.2014

m3xx пишет:

 скомпилил, зашил и вот результат:

Full Graphic Smart ControllerFull Graphic Smart Controller

Куда тащить шоколадку? =)

m3xx
Offline
Зарегистрирован: 03.10.2014

temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:

0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)

1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).

2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.

По какому пути вам пойти - выбирайте сами.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Разрешите предугадать реаакцию temperator. я непоняла не единого слова...

По всей видимости предсавление следующее:

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

temperator
Offline
Зарегистрирован: 13.11.2014

hugoboss317 пишет:

Разрешите предугадать реаакцию temperator. я непоняла не единого слова...

По всей видимости предсавление следующее:

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

Примерно так и есть =)

m3xx пишет:

temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:

0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)

1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).

2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.

По какому пути вам пойти - выбирайте сами.

Есть и 3й путь. Выпросить у Вас готовую прошивку, а уже потом подправить под себя конфиг =)

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

Можно с Вами по такому пути договориться? Сколько коврижек для меня такое удовольствие будет стоить? =)

 

P.S. А как на форуме писать в личку?

m3xx
Offline
Зарегистрирован: 03.10.2014

К сожалению, из-за отличия кодировки файла с русским переводом от UTF-8, Arduino IDE не сможет скомпилировать код, который успешно компилируется в Eclipse IDE. Если вы установите среду, то я без особых усилий выслал бы вам инструкцию и необходимые файлы для вашего принтера на указанную вами электронную почту.

temperator
Offline
Зарегистрирован: 13.11.2014

Большущие спасибо. Начну освоение ;)

mariya_gadaeva(тяф-тяф)mail.ru

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Готовьте коврижки :)