MenuSystem.h + lcd_1602_rus как вывести меню на русском?
- Войдите на сайт для отправки комментариев
Вс, 14/02/2016 - 13:36
использую библиотеки:
https://github.com/ssilver2007/LCD_1602_RUS
https://github.com/jonblack/arduino-menusystem
для вывода русскаго используется конструкция lsd.print(L"Текст на русском");
не получается вывести русское название меню.
проблема в том, что перед русским идет литера L
но как добавить ее если текст(стринг) получаем путем вызова функции, возвращается из вызванной функции.
Для начала узнать что эта "литера L" означает. Тогда станет понятнее что нужно сделать.
спасибо за разъяснения. все решил. теперь меню на русском.
Может кто подскажет почему при компиляции примера выдает ошибки
Может кто подскажет почему при компиляции примера выдает ошибки
Потому, что написано с ошибками. Конкретно у Вас тут 4 сообщения про три разные ошибки. Читайте сообщения, переводите и исправляйте.
Так этож вроде библиотека которая у всех работает.Вот и интересно почему у меня выдает ошибки... Пример тоже вроде без ошибок. Подозреваю что проблема в версии IDE либо в несовместимости с STM32.
Если Вам говорят " error: 'memcpy_PF' was not declared in this scope", значит он "not declared in this scope" будь там хоть STM, хоть MTS
Да проблема в несовместимости кода под разные платформы, изменив опцию компиляции на Arduino Nano, все прошло без ошибок. Из чего следуте что под STM32 она не подходит. Жаль - аесть еще подобного рода библиотеки?
Вопрос всетаки остается актуальным - как исправить библиотку под STM 32. версию ЕвгенийП мы услышали - не пойдет ни для МТS ни для SТМ, может будут другие мнения?
К примеру заменить функцию memcpy_PF чем либо другим.
Вопрос всетаки остается актуальным - как исправить библиотку под STM 32. версию ЕвгенийП мы услышали - не пойдет ни для МТS ни для SТМ, может будут другие мнения?
К примеру заменить функцию memcpy_PF чем либо другим.
memcpy
Перейти к навигацииПерейти к поиску
memcpy (от англ. memory copy — копирование памяти) — функция стандартной библиотеки языка программирования Си, копирующая содержимое одной области памяти в другую.
Функция определена в заголовочном файле string.h (а также в mem.h), описывается в стандартах ANSI C и POSIX.
Содержание
memcpy_s[править | править код]
Чтобы не выполнять лишних действий, функция memcpy() не проверяет соответствие размера выходного буфера количеству копируемых байт, возлагая эту обязанность на программиста. В результате совершается достаточно много ошибок, способных привести к переполнению буфера.
Поэтому ближе к концу 2009 г. компания Microsoft добавила memcpy(), CopyMemory() и RtlCopyMemory() в список функций, запрещённых в соответствии с методикой разработки безопасных программ Secure Development Lifecycle (SDL). Те разработчики, которые хотят создавать совместимые с SDL приложения, должны будут использовать вместо memcpy() функцию memcpy_s, позволяющую указывать размер буфера. Функция memcpy_s() непереносима и не включена в стандарт Си.
Определение[править | править код]
где:
Функция копирует n байт из области памяти, на которую указывает src, в область памяти, на которую указывает dst. Функция возвращает адрес назначения dst.
Области памяти не должны перекрываться {\displaystyle (\|src-dst\|\geq n)}
, иначе данные могут быть скопированы неправильно, например таким образом:
__src___ | | 1234567890xxxxx |__ ___| dstпосле копирования буфер dst содержит данные отличные от исходных, так как они были разрушены в процессе копирования:
__dst___ | | 121212121212xxxЧто получится на самом деле, зависит от реализации функции (пример относится к одной из реализации приведенных ниже).
Для правильного копирования перекрывающихся областей нужно использовать функцию memmove(). Некоторые реализации memcpy() (например в libc FreeBSD и OpenBSD) делают то же что и memmove(), принуждая работать правильно даже неправильно написанную программу, однако при написании переносимой программы на это надеяться нельзя.
Алгоритм работы и реализации[править | править код]
memcpy() копирует содержимое src в буфер dst, например, так:
Но данный пример будет работать медленнее, чем любые практические реализации, так как они оптимизированы:
Пример частично оптимизированной версии:
Данная версия копирует 4 или 8 байт (размер типа long равен 32 битам на 32-битной платформе и 64 на 64-битной) за цикл, но не проверяет выровненность данных.
Пример использования[править | править код]
С
поняли?
поняли?
а сам ?
to andriano
https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__avr__pgmspace_1ga13cc6cd0692aeccaac2789350a16412b.html
В общем автор ответил что - Это возможно. Чтобы решить вопрос работоспособности необходимо убрать все ссылки на дальнюю память (_PF) и во всех функциях убрать обращения к этой памяти, заменив их на работу с обычной памятью.
Вот боюсь что ума у меня на переписывания библиотеки не хватит....
попробовал заменить на memcpy но высыпало еще больше ошибок...
#include <Arduino.h> #include <avr/pgmspace.h> #include "LCD_1602_RUS.h" wchar_t char_utf8[] = L" "; //user_custom_symbols - количество символов, доступное пользователю для использования в своих целях (не более 8) //Всего переопределяемых символов в LCD - 8. //Символы с индексом от 0 до (7 - user_custom_symbols) используются библиотекой //Символы с индексом от (8 - user_custom_symbols) до 7 - можно переопределять пользователю //По умолчанию количество переопределяемых символов равно 0 LCD_1602_RUS :: LCD_1602_RUS(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t user_custom_symbols) : LiquidCrystal_I2C (lcd_Addr, lcd_cols, lcd_rows) { max_symbol_count = 8 - user_custom_symbols; symbol_index = 0; cursor_col = 0; cursor_row = 0; ResetAllIndex();//Сброс значений индексов (неинициализированы = 255) } void LCD_1602_RUS::clear() { LiquidCrystal_I2C::clear(); ResetAllIndex(); } void LCD_1602_RUS::setCursor(uint8_t col, uint8_t row) { cursor_col = col; cursor_row = row; LiquidCrystal_I2C::setCursor(cursor_col, cursor_row); } uint8_t LCD_1602_RUS::getCursorCol() { return cursor_col; } uint8_t LCD_1602_RUS::getCursorRow() { return cursor_row; } uint8_t LCD_1602_RUS::mbtowc(wchar_t *_chr, char *_str, uint8_t mb_num) { if (mb_num != 2) return 0; if ((_str[0] & 0xC0) == 0xC0 && (_str[1] & 0x80) == 0x80) { *_chr = ((_str[0] & 0x1F) << 6) + (_str[1] & 0x3F); return 2; } else { *_chr = _str[0]; return 1; } } void LCD_1602_RUS::print(const char *c_str) { wchar_t _str; int current_char = 0; int size = strlen(c_str); while (current_char < size) { current_char += mbtowc(&_str, (char *)c_str + current_char, 2); printwc(_str); cursor_col++; } } void LCD_1602_RUS::print(int val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(unsigned int val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(long val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(unsigned long val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(char val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(unsigned char val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(const String &str) { wchar_t _str; const char *c_str = str.c_str(); int current_char = 0; int size = str.length(); while (current_char < size) { current_char += mbtowc(&_str, (char*)c_str + current_char, 2); printwc(_str); cursor_col++; } } void LCD_1602_RUS::print(double val, int base) { cursor_col += LiquidCrystal_I2C::print(val, base); } void LCD_1602_RUS::print(const wchar_t *_str) { int current_char = 0; int size = 0; //Определяем длину строки (количество символов) while (_str[size] != 0) { size++; } while (current_char < size) { printwc(_str[current_char]); current_char++; cursor_col++; } } void LCD_1602_RUS::CharSetToLCD(uint8_t *array, uint8_t *index) { uint8_t x, y; if (*index == 255) // Если символ еще не создан, то создаем { x = getCursorCol(); y = getCursorRow(); createChar(symbol_index, (uint8_t *)array);// Создаем символ на текущем (по очереди) месте в знакогенераторе (от 0 до MAX_SYMBOL_COUNT) setCursor(x, y); write(symbol_index);// Выводим символ на экран //Запомианем, что букве соответствует определенный индекс *index = symbol_index; symbol_index++; if (symbol_index >= max_symbol_count) { symbol_index = 0; ResetAllIndex(); } } else //Иначе печатаем уже существующий write(*index); } void LCD_1602_RUS::ResetAllIndex() { symbol_index = 0; index_rus_B = 255; index_rus_G = 255; index_rus_D = 255; index_rus_ZH = 255; index_rus_Z = 255; index_rus_I = 255; index_rus_II = 255; index_rus_L = 255; index_rus_P = 255; index_rus_U = 255; index_rus_F = 255; index_rus_TS = 255; index_rus_CH = 255; index_rus_SH = 255; index_rus_SCH = 255; index_rus_tverd = 255; index_rus_Y = 255; index_rus_myagk = 255; index_rus_EE = 255; index_rus_YU = 255; index_rus_YA = 255; index_rus_b = 255; index_rus_v = 255; index_rus_g = 255; index_rus_d = 255; index_rus_yo = 255; index_rus_zh = 255; index_rus_z = 255; index_rus_i = 255; index_rus_ii = 255; index_rus_k = 255; index_rus_l = 255; index_rus_m = 255; index_rus_n = 255; index_rus_p = 255; index_rus_t = 255; index_rus_u = 255; index_rus_f = 255; index_rus_ts = 255; index_rus_ch = 255; index_rus_sh = 255; index_rus_sch = 255; index_rus_tverd_mal = 255; index_rus_y = 255; index_rus_myagk_mal = 255; index_rus_ee = 255; index_rus_yu = 255; index_rus_ya = 255; } void LCD_1602_RUS::printwc(const wchar_t _chr) { uint8_t rus_[8]; switch (_chr) { //Русский алфавит, требующий новых символов //Единовременно может быть заменено только 8 символов case 1041: //Б memcpy(rus_, (uint32_t)rus_B, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_B); break; case 1043: //Г memcpy(rus_, (uint32_t)rus_G, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_G); break; case 1044: //Д memcpy(rus_, (uint32_t)rus_D, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_D); break; case 1046: //Ж memcpy(rus_, (uint32_t)rus_ZH, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ZH); break; case 1047: //З memcpy(rus_, (uint32_t)rus_Z, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_Z); break; case 1048: //И memcpy(rus_, (uint32_t)rus_I, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_I); break; case 1049: //Й memcpy(rus_, (uint32_t)rus_II, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_II); break; case 1051: //Л memcpy(rus_, (uint32_t)rus_L, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_L); break; case 1055: //П memcpy(rus_, (uint32_t)rus_P, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_P); break; case 1059: //У memcpy(rus_, (uint32_t)rus_U, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_U); break; case 1060: //Ф memcpy(rus_, (uint32_t)rus_F, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_F); break; case 1062: //Ц memcpy(rus_, (uint32_t)rus_TS, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_TS); break; case 1063: //Ч memcpy(rus_, (uint32_t)rus_CH, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_CH); break; case 1064: //Ш memcpy(rus_, (uint32_t)rus_SH, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_SH); break; case 1065: //Щ memcpy(rus_, (uint32_t)rus_SCH, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_SCH); break; case 1066: //Ъ memcpy(rus_, (uint32_t)rus_tverd, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_tverd); break; case 1067: //Ы memcpy(rus_, (uint32_t)rus_Y, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_Y); break; case 1068: //Ь memcpy(rus_, (uint32_t)rus_myagk, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_myagk); break; case 1069: //Э memcpy(rus_, (uint32_t)rus_EE, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_EE); break; case 1070: //Ю memcpy(rus_, (uint32_t)rus_YU, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_YU); break; case 1071: //Я memcpy(rus_, (uint32_t)rus_YA, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_YA); break; case 1073: //б memcpy(rus_, (uint32_t)rus_b, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_b); break; case 1074: //в memcpy(rus_, (uint32_t)rus_v, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_v); break; case 1075: //г memcpy(rus_, (uint32_t)rus_g, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_g); break; case 1076: //д memcpy(rus_, (uint32_t)rus_d, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_d); break; case 1105: //ё memcpy(rus_, (uint32_t)rus_yo, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_yo); break; case 1078: //ж memcpy(rus_, (uint32_t)rus_zh, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_zh); break; case 1079: //з memcpy(rus_, (uint32_t)rus_z, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_z); break; case 1080: //и memcpy(rus_, (uint32_t)rus_i, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_i); break; case 1081: //й memcpy(rus_, (uint32_t)rus_ii, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ii); break; case 1082: //к memcpy(rus_, (uint32_t)rus_k, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_k); break; case 1083: //л memcpy(rus_, (uint32_t)rus_l, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_l); break; case 1084: //м memcpy(rus_, (uint32_t)rus_m, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_m); break; case 1085: //н memcpy(rus_, (uint32_t)rus_n, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_n); break; case 1087: //п memcpy(rus_, (uint32_t)rus_p, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_p); break; case 1090: //т memcpy(rus_, (uint32_t)rus_t, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_t); break; case 1092: //ф memcpy(rus_, (uint32_t)rus_f, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_f); break; case 1094: //ц memcpy(rus_, (uint32_t)rus_ts, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ts); break; case 1095: //ч memcpy(rus_, (uint32_t)rus_ch, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ch); break; case 1096: //ш memcpy(rus_, (uint32_t)rus_sh, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_sh); break; case 1097: //щ memcpy(rus_, (uint32_t)rus_sch, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_sch); break; case 1098: //ъ memcpy(rus_, (uint32_t)rus_tverd_mal, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_tverd_mal); break; case 1099: //ы memcpy(rus_, (uint32_t)rus_y, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_y); break; case 1100: //ь memcpy(rus_, (uint32_t)rus_myagk_mal, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_myagk_mal); break; case 1101: //э memcpy(rus_, (uint32_t)rus_ee, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ee); break; case 1102: //ю memcpy(rus_, (uint32_t)rus_yu, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_yu); break; case 1103: //я memcpy(rus_, (uint32_t)rus_ya, 8); CharSetToLCD((uint8_t *)rus_, &index_rus_ya); break; //Русский алфавит, использующий одинаковые с английским алфавитом символы case 1040: //А LiquidCrystal_I2C::print("A"); break; case 1042: //В LiquidCrystal_I2C::print("B"); break; case 1045: //Е LiquidCrystal_I2C::print("E"); break; case 1025: //Ё LiquidCrystal_I2C::print("E"); break; case 1050: //К LiquidCrystal_I2C::print("K"); break; case 1052: //M LiquidCrystal_I2C::print("M"); break; case 1053: //H LiquidCrystal_I2C::print("H"); break; case 1054: //O LiquidCrystal_I2C::print("O"); break; case 1056: //P LiquidCrystal_I2C::print("P"); break; case 1057: //C LiquidCrystal_I2C::print("C"); break; case 1058: //T LiquidCrystal_I2C::print("T"); break; case 1061: //X LiquidCrystal_I2C::print("X"); break; case 1072: //а LiquidCrystal_I2C::print("a"); break; case 1077: //е LiquidCrystal_I2C::print("e"); break; case 1086: //o LiquidCrystal_I2C::print("o"); break; case 1088: //p LiquidCrystal_I2C::print("p"); break; case 1089: //c LiquidCrystal_I2C::print("c"); break; case 1091: //y LiquidCrystal_I2C::print("y"); break; case 1093: //x LiquidCrystal_I2C::print("x"); break; case 0x00B0: //Знак градуса LiquidCrystal_I2C::write(223); break; //Английский алфавит без изменения default: LiquidCrystal_I2C::print((char)_chr); break; } } //Перевод символа из кодировки ASCII в UTF-8 (для печати расширенных русских символов на LCD) wchar_t *LCD_1602_RUS::asciiutf8(unsigned char ascii) { if (ascii == 168) *char_utf8 = 0x401; //код ASCII буквы Ё else if (ascii == 184) *char_utf8 = 0x451; //код ASCII буквы ё else if ((ascii >= 192) && (ascii <= 255)) //остальные буквы русского алфавита { *char_utf8 = ascii + 848; } else *char_utf8 = ascii; return char_utf8; } //Б const byte rus_B[8] PROGMEM = { 0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000 }; //Г const byte rus_G[8] PROGMEM = { 0b11111, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b00000 }; //Д const byte rus_D[8] PROGMEM = { 0b00110, 0b01010, 0b01010, 0b01010, 0b01010, 0b01010, 0b11111, 0b10001 }; //Ж const byte rus_ZH[8] PROGMEM = { 0b10101, 0b10101, 0b10101, 0b01110, 0b10101, 0b10101, 0b10101, 0b00000 }; //З const byte rus_Z[8] PROGMEM = { 0b01110, 0b10001, 0b00001, 0b00110, 0b00001, 0b10001, 0b01110, 0b00000 }; //И const byte rus_I[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b00000 }; //Й const byte rus_II[8] PROGMEM = { 0b10101, 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b00000 }; //Л const byte rus_L[8] PROGMEM = { 0b00111, 0b01001, 0b01001, 0b01001, 0b01001, 0b01001, 0b10001, 0b00000 }; //П const byte rus_P[8] PROGMEM = { 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b00000 }; //У const byte rus_U[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b01111, 0b00001, 0b10001, 0b01110, 0b00000 }; //Ф const byte rus_F[8] PROGMEM = { 0b00100, 0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00000 }; //Ц const byte rus_TS[8] PROGMEM = { 0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b10010, 0b11111, 0b00001 }; //Ч const byte rus_CH[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b01111, 0b00001, 0b00001, 0b00001, 0b00000 }; //Ш const byte rus_SH[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b10101, 0b10101, 0b10101, 0b11111, 0b00000 }; //Щ const byte rus_SCH[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b10101, 0b10101, 0b10101, 0b11111, 0b00001 }; //Ъ const byte rus_tverd[8] PROGMEM = { 0b11000, 0b01000, 0b01000, 0b01110, 0b01001, 0b01001, 0b01110, 0b00000 }; //Ы const byte rus_Y[8] PROGMEM = { 0b10001, 0b10001, 0b10001, 0b11101, 0b10011, 0b10011, 0b11101, 0b00000 }; //Ь const byte rus_myagk[8] PROGMEM = { 0b10000, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000 }; //Э const byte rus_EE[8] PROGMEM = { 0b01110, 0b10001, 0b00001, 0b00111, 0b00001, 0b10001, 0b01110, 0b00000 }; //Ю const byte rus_YU[8] PROGMEM = { 0b10010, 0b10101, 0b10101, 0b11101, 0b10101, 0b10101, 0b10010, 0b00000 }; //Я const byte rus_YA[8] PROGMEM = { 0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000 }; const byte rus_b[8] PROGMEM = { 0b00011, 0b01100, 0b10000, 0b11110, 0b10001, 0b10001, 0b01110, 0b00000 };//б const byte rus_v[8] PROGMEM = { 0b00000, 0b00000, 0b11110, 0b10001, 0b11110, 0b10001, 0b11110, 0b00000 };//в const byte rus_g[8] PROGMEM = { 0b00000, 0b00000, 0b11110, 0b10000, 0b10000, 0b10000, 0b10000, 0b00000 };//г const byte rus_d[8] PROGMEM = { 0b00000, 0b00000, 0b00110, 0b01010, 0b01010, 0b01010, 0b11111, 0b10001 };//д const byte rus_yo[8] PROGMEM = { 0b01010, 0b00000, 0b01110, 0b10001, 0b11111, 0b10000, 0b01111, 0b00000 };//ё const byte rus_zh[8] PROGMEM = { 0b00000, 0b00000, 0b10101, 0b10101, 0b01110, 0b10101, 0b10101, 0b00000 };//ж const byte rus_z[8] PROGMEM = { 0b00000, 0b00000, 0b01110, 0b10001, 0b00110, 0b10001, 0b01110, 0b00000 };//з const byte rus_i[8] PROGMEM = { 0b00000, 0b00000, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b00000 };//и const byte rus_ii[8] PROGMEM = { 0b01010, 0b00100, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b00000 };//й const byte rus_k[8] PROGMEM = { 0b00000, 0b00000, 0b10010, 0b10100, 0b11000, 0b10100, 0b10010, 0b00000 };//к const byte rus_l[8] PROGMEM = { 0b00000, 0b00000, 0b00111, 0b01001, 0b01001, 0b01001, 0b10001, 0b00000 };//л const byte rus_m[8] PROGMEM = { 0b00000, 0b00000, 0b10001, 0b11011, 0b10101, 0b10001, 0b10001, 0b00000 };//м const byte rus_n[8] PROGMEM = { 0b00000, 0b00000, 0b10001, 0b10001, 0b11111, 0b10001, 0b10001, 0b00000 };//н const byte rus_p[8] PROGMEM = { 0b00000, 0b00000, 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b00000 };//п const byte rus_t[8] PROGMEM = { 0b00000, 0b00000, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00000 };//т const byte rus_f[8] PROGMEM = { 0b00000, 0b00000, 0b00100, 0b01110, 0b10101, 0b01110, 0b00100, 0b00000 };//ф const byte rus_ts[8] PROGMEM = { 0b00000, 0b00000, 0b10010, 0b10010, 0b10010, 0b10010, 0b11111, 0b00001 };//ц const byte rus_ch[8] PROGMEM = { 0b00000, 0b00000, 0b10001, 0b10001, 0b01111, 0b00001, 0b00001, 0b00000 };//ч const byte rus_sh[8] PROGMEM = { 0b00000, 0b00000, 0b10101, 0b10101, 0b10101, 0b10101, 0b11111, 0b00000 };//ш const byte rus_sch[8] PROGMEM = { 0b00000, 0b00000, 0b10101, 0b10101, 0b10101, 0b10101, 0b11111, 0b00001 };//щ const byte rus_tverd_mal[8] PROGMEM = { 0b00000, 0b00000, 0b11000, 0b01000, 0b01110, 0b01001, 0b01110, 0b00000 };//ъ const byte rus_y[8] PROGMEM = { 0b00000, 0b00000, 0b10001, 0b10001, 0b11101, 0b10011, 0b11101, 0b00000 };//ы const byte rus_myagk_mal[8] PROGMEM = { 0b00000, 0b00000, 0b10000, 0b10000, 0b11110, 0b10001, 0b11110, 0b00000 };//ь const byte rus_ee[8] PROGMEM = { 0b00000, 0b00000, 0b01110, 0b10001, 0b00111, 0b10001, 0b01110, 0b00000 };//э const byte rus_yu[8] PROGMEM = { 0b00000, 0b00000, 0b10010, 0b10101, 0b11101, 0b10101, 0b10010, 0b00000 };//ю const byte rus_ya[8] PROGMEM = { 0b00000, 0b00000, 0b01111, 0b10001, 0b01111, 0b00101, 0b01001, 0b00000 };//яприводит к таким ошибкам
C:\Users\Вячеслав\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp: In member function 'void LCD_1602_RUS::printwc(wchar_t)': C:\Users\Вячеслав\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:201:38: error: invalid conversion from 'uint32_t {aka long unsigned int}' to 'const void*' [-fpermissive] memcpy(rus_, (uint32_t)rus_B, 8);поняли?
Надеюсь, по ссылочке, указанной xDriver сходили?
Поняли?
Если "да" - то этого достаточно, чтобы внести нужную правку.
Не - тут не заработает, ИМХО.
Почему
voidLCD_1602_RUS::printwc(constwchar_t _chr) ? Почему тамconst?Вопрос остается открытым.
Не - тут не заработает, ИМХО.
Почему
voidLCD_1602_RUS::printwc(constwchar_t _chr) ? Почему тамconst?wchar_t это вроде как перведенные символы
wchar_t *LCD_1602_RUS::asciiutf8(unsigned char ascii)
а вот интересно, чем ссылка то от xDriver так не понравилась? -абсолютно по делу ссылка ... или тем что готового кода не дали, а предложили самому подумать?
Есть такие люди - отсылку в гугль считают оскорблением.... дикари
И что там понтового - в альтернативной команде - уже пробовали не раз - не работает. Я тоже отправил по ссылке - обиделись, хотя тоже содержательная.
И что там понтового - в альтернативной команде - уже пробовали не раз - не работает.
альтернативно-одренной команде? - работу с флешем на другую плату переписать не можете?
Читай текс, а не сранье что твой друг написал... От меня не убудет что забаните, жаль что вопрос топик стартера так никто и не решил, звиздатых развелось больше мыслимого...
раз с 2015г никто не озаботился - значит не особо и нужно. Самое простое - не использовать русские буквы в программах
И что там понтового - в альтернативной команде - уже пробовали не раз - не работает.
альтернативно-одренной команде? - работу с флешем на другую плату переписать не можете?
"повелитель" z80, рам от флеш не отличает, ну это и понятно, не было тогда флеш, был магнитоФон.
Читай текс, а не сранье что твой друг написал... От меня не убудет что забаните, жаль что вопрос топик стартера так никто и не решил, звиздатых развелось больше мыслимого...
раз с 2015г никто не озаботился - значит не особо и нужно. Самое простое - не использовать русские буквы в программах
Будь по вашему - самое оригинальное решение.... Дальше обсуждать не стоит.
mvn77 - это вы свои сообщения плюсуете? - не тратьте зря время, на нашем форуме эти баллы нигде не учитываются :)
я завтра буду добрый и трезвый. тему почистят. если тебе, мвн77, будет интересно, я объясню, почему русификация китайского 1602 никому не нужна. Какие есть варианты, если кириллица необходима. Ты только спрашивай нормально, без требований и аппеляций к морали.
ребят, да оставте вы его в покое, сам исчезнет.
я думал ни кто не будет отвечать, но он свои посты начал плюсовать, да и править каждые 10 мин..
я решил зафиксить, и тут опять опять понеслось.
MVN - ну неужели вы не понимаете, что ведете себя глупо? Пришли на форум и ТРЕБУЕТЕ, чтобы вам кто-то библиотеку переписал? - попробуйте в автосервис придти и потребовать, чтоб вам КПП перебрали... забесплатно... из человеколюбия. А для начала всех слесарей обложите матом покрепче...
Бесплатно я занимаюсь тем кодом, который мне интересен. Чужим кодом забесплатно никакого интреса заниматься нет.
ребят, да оставте вы его в покое, сам исчезнет.
да фиг бы с ним, почему б не подискутировать... будет еще выеживаться - выключу форум, пойду телевизор смотреть
Требований небыло - да и апеляций... Просьба была - в ответ куча говна.... Складывается впечатление что попал на барахолку... Завтра админы почитсят, меня забанят, и правильно сделают - не место таки как я "совкам" среди таких интелектуалов... но ведь вопрос никто не решил - только от "гуру" понты от чайников вопросы... и самое главное завтра - расскажут почему не нужна кирилица - вот оно мне надо....
Требований небыло - да и апеляций... Просьба была - в ответ куча говна....
ну врать-то зачем? - до твоей "ссылки" никакого говна не было. Тебе отвечали вполне по делу. А что ты их не понял - так это же не проблемы тех, кто отвечал. Если пятилетняя девочка попросит обьяснить устройство телевизора - сможешь?
нее .. тут по другому надо - 50 летняя бабушка устройство смартфона и принципы програмирования на андроид.
Требований небыло - да и апеляций... Просьба была - в ответ куча говна....
ну врать-то зачем? - до твоей "ссылки" никакого говна не было. Тебе отвечали вполне по делу. А что ты их не понял - так это же не проблемы тех, кто отвечал. Если пятилетняя девочка попросит обьяснить устройство телевизора - сможешь?
ДруХ - ты пойми проблема не в ссылка не в функциях а втом что надо изменить библиотеку под другую платфоруму - ну напишите что у вас ума не зхватит и закроем тему, так вы же тут разщвели, один ссылки другой 10 тыр...Я понимаю что и как вопрос в другом у меня не хватит заний переписать ее и ваши ссылки я уже давно прошел. Открою вам дикую тайну - проблема не в одном операторе, а в целой платформе...
ДруХ - ты пойми проблема не в ссылка не в функциях а втом что надо изменить библиотеку под другую платфоруму - ну напишите что у вас ума не зхватит и закроем тему,
ну почему не хватит то? я знаю STM32, пишу для нее. Без вского хвастовства - я мог бы переписать эту библиотеку. Но нафига?
Это, понимаешь, точно такой же вопрос, как "Мог бы ты подняться на 32 этаж без лифта?" - да, могу. Но не пойду.
Ты сам год как увлекаешся - хорошо время есть - видно сразу гуру проснулся год назад. не забудь соловьева посмотреть....
не стесняюсь глупости писать и не обижаюсь, когда на них указывают.
А что касается времени - его всегда нет. Меньше на диване лежи...
не поверишь - работаю на трех работах... мы савки такие… Лежать некогда. Сегодня, замело дороги, никуда не выехал, ради развлечения поставил новое ардуино, что бы попробовать программу написанную для прибора который несколько лет мне шлет данные в автономном режиме, а она не откомпилилась, и вот стал проверять библиотеки, и наткнулся на эту которая не запустилась у меня и в прошлый раз... Хоть и никто никогда нt видел PRIVET находящийся далеко в металлическом ящике но для души все равно хочется на родном языке… А столкнулся с кучей говна от «!совков»
Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.
Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.
ну а кто ж тебя знает, до какого ты этажа? может и дошел бы, если б не тратил время на пустую болтовню.
А на что ты рассчитывал, что тебя на 32 этаж кто-то понесет? - не, идти придется самому, мы только направление можем показать.
господа! я нажрался валокордина и спать. ещё и кислородный аппарат включу. стар я стал мудаков терпеть. сердце заходиться начинает.
..........
финальная попытка: кириллица нужна, если ты что-то делаешь под заказ. и тогда бери МЭЛТ с кириллицей или графический дисплей. в остальных случаях это баловство. эта библиотека - страх и ужос.
2. переписать библиотеку это не помощь. но про это тебе написали уже.
По поводу wdrakula я неготвино отношусь что людей постоянно обижает - его коронная фраза Я тут сегодня в филосовском настроении, когда нужно много чего делать, но конкретно ничего не хочется. ;) Все об нем говорит, трындит много но никому еще не помог, но ждет поклонение за кол-во постов не в тему - вот такие и гробят форумы и желание людей к новому.
Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.
ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.
Так какого хрена ты об этом написал через 50 постов - сразу с этого иначинать надо было а не ссылки давать - для меня это баловство, уровень проблемы я заню сам и когда мне начинают ссылки давать получают ссылки в ответ. Если бы мне для комерции я бы поставил 328ю, которых валом валяется без дела, но я не комерс а любитель, ковыряю потихоньку STMку... Спросил - меня послали - я послал в ответ - обиделись...
Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.
ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.
Так в том и фишка - мне помгать незачем... Оно мне не надо - я поддержал топик... То что я разробатывал давно работает, и доступа даже к нему нет. А код который писал тогда сегодня и сам не везде понять могу, потому что с тех пор нинаписал ни строчки. Но всетаки хочется что бы в РУНЕТЕ была своя библиотека под вывод русских символов для блю пилюль на китайских дисплеях))) Да и для комерции я бы написал через постоянное перепрошивание запасных символов.
хорошо, давай конструктивно.
я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy ?
Ладно !совки - спокойной ночи....
хорошо, давай конструктивно.
я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy ?
тем что работает с основной памятью....
ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.
да не, неправильно ты пишешь. Причина-то не в гоноре. А то сейчас подумает, что мы тут сидим его воспитываем.
Нет, даже если б он пришел и очень вежливо попросил - все равно никто б библиотеку переписывать не стал бы. Просто потому что это серьезная работа и ненормально просить ее бесплатно. Пример - Какие бы у вас не были замечательные отношения с соседом, но если это не ближайший друг - вряд ли вы согласитесь перекапывать ему огород бесплатно. Почему-то очень многие из тех, кто все понимает с огородом - уверены, что программу написать - это не работа, просто по клавишам постучать и все :)
ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.
да не, неправильно ты пишешь. Причина-то не в гоноре. А то сейчас подумает, что мы тут сидим его воспитываем.
Нет, даже если б он пришел и очень вежливо попросил - все равно никто б библиотеку переписывать не стал бы. Просто потому что это серьезная работа и ненормально просить ее бесплатно. Пример - Какие бы у вас не были замечательные отношения с соседом, но если это не ближайший друг - вряд ли вы согласитесь перекапывать ему огород бесплатно. Почему-то очень многие из тех, кто все понимает с огородом - уверены, что программу написать - это не работа, просто по клавишам постучать и все :)
Так о том и речь - я с высоты своих 10 этажей не вижу всего обьема проблемы - вы же видели, но начали за место того что бы обьяснить насколько это проблемотично для новичка тыкать меня в ссылки. А это явный признак того что оппонент не желает помгогать либо просто издевается...
Так в том и фишка - мне помгать незачем... Оно мне не надо - я поддержал топик... То что я разробатывал давно работает, и доступа даже к нему нет.
ну вот... пошло хвастанье старыми заслугами. Ту уж определись - ты до десятого этажа дойти не можешь, или все можешь, но гордый как орел...
старый, уж не бреши. Ты пришел клянчить программу и не надо теперь вилять.
хорошо, давай конструктивно.
я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy ?
тем что работает с основной памятью....
тогда действительно, спокойной ночи, "повелитель" z80.
в атомобильных терминах - я тебя спрашиваю - где находится фильтр? логичный ответ - какой ?
ты мне овечаешь - взади...
тыкать меня в ссылки. А это явный признак того что оппонент не желает помгогать либо просто издевается...
тыкать в ссылки - признак издевательства? - так может думать только полный идиот.
А умным ссылки помогают. Даже если с твоего уровня они пока не понятны - сохрани на будущее, может когда поймешь.