HELP по старой библиотеке LCD I2C
- Войдите на сайт для отправки комментариев
Вс, 12/11/2017 - 20:45
Всем привет. Собрал года три назад девайс, компилировал в IDE 1.0.5, все работало, но настало время причесать, что то поправить, что то убрать, да хотя бы изменить черезжопную работу с EEPROM. Попытался скомпилировать в 1.6.4, а не тут то было. Для русифицированного дисплея стояла библиотека: LiquidCrystalCyr_I2C и послала она меня нах вот такими словами:
Используем библиотеку Wire в папке: C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire Используем библиотеку LiquidCrystalCyr_I2C в папке: C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C (legacy) C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\variants\standard -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire -IC:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C C:\Users\7C77~1\AppData\Local\Temp\build357544709499426123.tmp\HelloWorldRu.cpp -o C:\Users\7C77~1\AppData\Local\Temp\build357544709499426123.tmp\HelloWorldRu.cpp.o C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\variants\standard -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire -IC:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire\utility C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire\Wire.cpp -o C:\Users\7C77~1\AppData\Local\Temp\build357544709499426123.tmp\Wire\Wire.cpp.o C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\variants\standard -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire -IC:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire\utility C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire\utility\twi.c -o C:\Users\7C77~1\AppData\Local\Temp\build357544709499426123.tmp\Wire\utility\twi.c.o C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\variants\standard -IC:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\Wire -IC:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C -IC:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\utility C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp -o C:\Users\7C77~1\AppData\Local\Temp\build357544709499426123.tmp\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp.o C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp:15:9: error: 'prog_uchar' does not name a type PROGMEM prog_uchar utf_recode[] = ^ In file included from C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino/WString.h:29:0, from C:\Users\Вадим\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino/Print.h:26, from C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.h:6, from C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp:10: C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp: In member function 'virtual size_t LiquidCrystalCyr_I2C::write(uint8_t)': C:\Users\Вадим\Desktop\arduino-1.6.4\libraries\LiquidCrystalCyr_I2C\LiquidCrystalCyr_I2C.cpp:41:33: error: 'utf_recode' was not declared in this scope send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), Rs); ^ Ошибка компиляции.
Собственно вопрос, реанимировать малой кровью ее реально или искать другую?
Файл CPP:
//www.DFRobot.com //last updated on 21/12/2011 //Tim Starling Fix the reset bug (Thanks Tim) //wiki doc http://www.dfrobot.com/wiki/index.php?title=I2C/TWI_LCD1602_Module_(SKU:_DFR0063) //Support Forum: http://www.dfrobot.com/forum/ //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include "LiquidCrystalCyr_I2C.h" #include <inttypes.h> #include <avr/pgmspace.h> // it is a russian alphabet translation // except 0401 --> 0xa2 = в•—, 0451 --> 0xb5 PROGMEM prog_uchar utf_recode[] = { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f, 0xa8,0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f, 0xbe,0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 }; #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #define printIIC(args) Wire.write(args) inline size_t LiquidCrystalCyr_I2C::write(uint8_t value) { uint8_t out_char=value; if (value>=0x80) { // UTF-8 handling if (value >= 0xc0) { utf_hi_char = value - 0xd0; } else { value &= 0x3f; if (!utf_hi_char && (value == 1)) send(0xa2,Rs); // ¬ else if ((utf_hi_char == 1) && (value == 0x11)) send(0xb5,Rs); // T else send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), Rs); } } else send(out_char, Rs); return 0; } #else #include "WProgram.h" #define printIIC(args) Wire.send(args) inline void LiquidCrystalCyr_I2C::write(uint8_t value) { //send(value, Rs); uint8_t out_char=value; if (value>=0x80) { // UTF-8 handling if (value >= 0xc0) { utf_hi_char = value - 0xd0; } else { value &= 0x3f; if (!utf_hi_char && (value == 1)) send(0xa2,Rs); // ¬ else if ((utf_hi_char == 1) && (value == 0x11)) send(0xb5,Rs); // T else send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), Rs); } } else send(out_char, Rs); } #endif #include "Wire.h" // When the display powers up, it is configured as follows: // // 1. Display clear // 2. Function set: // DL = 1; 8-bit interface data // N = 0; 1-line display // F = 0; 5x8 dot character font // 3. Display on/off control: // D = 0; Display off // C = 0; Cursor off // B = 0; Blinking off // 4. Entry mode set: // I/D = 1; Increment by 1 // S = 0; No shift // // Note, however, that resetting the Arduino doesn't reset the LCD, so we // can't assume that its in that state when a sketch starts (and the // LiquidCrystal constructor is called). LiquidCrystalCyr_I2C::LiquidCrystalCyr_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows) { _Addr = lcd_Addr; _cols = lcd_cols; _rows = lcd_rows; _backlightval = LCD_NOBACKLIGHT; } void LiquidCrystalCyr_I2C::init(){ init_priv(); } void LiquidCrystalCyr_I2C::init_priv() { Wire.begin(); _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; begin(_cols, _rows); } void LiquidCrystalCyr_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { if (lines > 1) { _displayfunction |= LCD_2LINE; } _numlines = lines; // for some 1 line displays you can select a 10 pixel high font if ((dotsize != 0) && (lines == 1)) { _displayfunction |= LCD_5x10DOTS; } // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // according to datasheet, we need at least 40ms after power rises above 2.7V // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 delay(50); // Now we pull both RS and R/W low to begin commands expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) delay(1000); //put the LCD into 4 bit mode // this is according to the hitachi HD44780 datasheet // figure 24, pg 46 // we start in 8bit mode, try to set 4 bit mode write4bits(0x03 << 4); delayMicroseconds(4500); // wait min 4.1ms // second try write4bits(0x03 << 4); delayMicroseconds(4500); // wait min 4.1ms // third go! write4bits(0x03 << 4); delayMicroseconds(150); // finally, set to 4-bit interface write4bits(0x02 << 4); // set # lines, font size, etc. command(LCD_FUNCTIONSET | _displayfunction); // turn the display on with no cursor or blinking default _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; display(); // clear it off clear(); // Initialize to default text direction (for roman languages) _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; // set the entry mode command(LCD_ENTRYMODESET | _displaymode); home(); } /********** high level commands, for the user! */ void LiquidCrystalCyr_I2C::clear(){ command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero delayMicroseconds(2000); // this command takes a long time! } void LiquidCrystalCyr_I2C::home(){ command(LCD_RETURNHOME); // set cursor position to zero delayMicroseconds(2000); // this command takes a long time! } void LiquidCrystalCyr_I2C::setCursor(uint8_t col, uint8_t row){ int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; if ( row > _numlines ) { row = _numlines-1; // we count rows starting w/0 } command(LCD_SETDDRAMADDR | (col + row_offsets[row])); } // Turn the display on/off (quickly) void LiquidCrystalCyr_I2C::noDisplay() { _displaycontrol &= ~LCD_DISPLAYON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void LiquidCrystalCyr_I2C::display() { _displaycontrol |= LCD_DISPLAYON; command(LCD_DISPLAYCONTROL | _displaycontrol); } // Turns the underline cursor on/off void LiquidCrystalCyr_I2C::noCursor() { _displaycontrol &= ~LCD_CURSORON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void LiquidCrystalCyr_I2C::cursor() { _displaycontrol |= LCD_CURSORON; command(LCD_DISPLAYCONTROL | _displaycontrol); } // Turn on and off the blinking cursor void LiquidCrystalCyr_I2C::noBlink() { _displaycontrol &= ~LCD_BLINKON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void LiquidCrystalCyr_I2C::blink() { _displaycontrol |= LCD_BLINKON; command(LCD_DISPLAYCONTROL | _displaycontrol); } // These commands scroll the display without changing the RAM void LiquidCrystalCyr_I2C::scrollDisplayLeft(void) { command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); } void LiquidCrystalCyr_I2C::scrollDisplayRight(void) { command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); } // This is for text that flows Left to Right void LiquidCrystalCyr_I2C::leftToRight(void) { _displaymode |= LCD_ENTRYLEFT; command(LCD_ENTRYMODESET | _displaymode); } // This is for text that flows Right to Left void LiquidCrystalCyr_I2C::rightToLeft(void) { _displaymode &= ~LCD_ENTRYLEFT; command(LCD_ENTRYMODESET | _displaymode); } // This will 'right justify' text from the cursor void LiquidCrystalCyr_I2C::autoscroll(void) { _displaymode |= LCD_ENTRYSHIFTINCREMENT; command(LCD_ENTRYMODESET | _displaymode); } // This will 'left justify' text from the cursor void LiquidCrystalCyr_I2C::noAutoscroll(void) { _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; command(LCD_ENTRYMODESET | _displaymode); } // Allows us to fill the first 8 CGRAM locations // with custom characters void LiquidCrystalCyr_I2C::createChar(uint8_t location, uint8_t charmap[]) { location &= 0x7; // we only have 8 locations 0-7 command(LCD_SETCGRAMADDR | (location << 3)); for (int i=0; i<8; i++) { write(charmap[i]); } } // Turn the (optional) backlight off/on void LiquidCrystalCyr_I2C::noBacklight(void) { _backlightval=LCD_NOBACKLIGHT; expanderWrite(0); } void LiquidCrystalCyr_I2C::backlight(void) { _backlightval=LCD_BACKLIGHT; expanderWrite(0); } /*********** mid level commands, for sending data/cmds */ inline void LiquidCrystalCyr_I2C::command(uint8_t value) { send(value, 0); } /************ low level data pushing commands **********/ // write either command or data void LiquidCrystalCyr_I2C::send(uint8_t value, uint8_t mode) { uint8_t highnib=value&0xf0; uint8_t lownib=(value<<4)&0xf0; write4bits((highnib)|mode); write4bits((lownib)|mode); } void LiquidCrystalCyr_I2C::write4bits(uint8_t value) { expanderWrite(value); pulseEnable(value); } void LiquidCrystalCyr_I2C::expanderWrite(uint8_t _data){ Wire.beginTransmission(_Addr); // for old hardware version uncomment: // int bit0 = bitRead(_data,4); // int bit1 = bitRead(_data,5); // int bit2 = bitRead(_data,6); // int bit3 = bitRead(_data,7); // bitWrite(_data,7,bit0); // bitWrite(_data,6,bit1); // bitWrite(_data,5,bit2); // bitWrite(_data,4,bit3); printIIC((int)(_data) | _backlightval); Wire.endTransmission(); } void LiquidCrystalCyr_I2C::pulseEnable(uint8_t _data){ expanderWrite(_data | En); // En high delayMicroseconds(1); // enable pulse must be >450ns expanderWrite(_data & ~En); // En low delayMicroseconds(50); // commands need > 37us to settle } // Alias functions void LiquidCrystalCyr_I2C::cursor_on(){ cursor(); } void LiquidCrystalCyr_I2C::cursor_off(){ noCursor(); } void LiquidCrystalCyr_I2C::blink_on(){ blink(); } void LiquidCrystalCyr_I2C::blink_off(){ noBlink(); } void LiquidCrystalCyr_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){ createChar(char_num, rows); } void LiquidCrystalCyr_I2C::setBacklight(uint8_t new_val){ if(new_val){ backlight(); // turn backlight on }else{ noBacklight(); // turn backlight off } } void LiquidCrystalCyr_I2C::printstr(const char c[]){ //This function is not identical to the function used for "real" I2C displays //it's here so the user sketch doesn't have to be changed print(c); } // unsupported API functions void LiquidCrystalCyr_I2C::off(){} void LiquidCrystalCyr_I2C::on(){} void LiquidCrystalCyr_I2C::setDelay (int cmdDelay,int charDelay) {} uint8_t LiquidCrystalCyr_I2C::status(){return 0;} uint8_t LiquidCrystalCyr_I2C::keypad (){return 0;} uint8_t LiquidCrystalCyr_I2C::init_bargraph(uint8_t graphtype){return 0;} void LiquidCrystalCyr_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){} void LiquidCrystalCyr_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){} void LiquidCrystalCyr_I2C::setContrast(uint8_t new_val){}
Файл .h
//DFRobot.com #ifndef LiquidCrystalCyr_I2C_h #define LiquidCrystalCyr_I2C_h #include <inttypes.h> #include "Print.h" #include <Wire.h> // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 // flags for backlight control #define LCD_BACKLIGHT 0x08 #define LCD_NOBACKLIGHT 0x00 #define En B00000100 // Enable bit #define Rw B00000010 // Read/Write bit #define Rs B00000001 // Register select bit class LiquidCrystalCyr_I2C : public Print { public: LiquidCrystalCyr_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); void clear(); void home(); void noDisplay(); void display(); void noBlink(); void blink(); void noCursor(); void cursor(); void scrollDisplayLeft(); void scrollDisplayRight(); void printLeft(); void printRight(); void leftToRight(); void rightToLeft(); void shiftIncrement(); void shiftDecrement(); void noBacklight(); void backlight(); void autoscroll(); void noAutoscroll(); void createChar(uint8_t, uint8_t[]); void setCursor(uint8_t, uint8_t); #if defined(ARDUINO) && ARDUINO >= 100 virtual size_t write(uint8_t); #else virtual void write(uint8_t); #endif void command(uint8_t); void init(); ////compatibility API function aliases void blink_on(); // alias for blink() void blink_off(); // alias for noBlink() void cursor_on(); // alias for cursor() void cursor_off(); // alias for noCursor() void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() void printstr(const char[]); ////Unsupported API functions (not implemented in this library) uint8_t status(); void setContrast(uint8_t new_val); uint8_t keypad(); void setDelay(int,int); void on(); void off(); uint8_t init_bargraph(uint8_t graphtype); void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); private: void init_priv(); void send(uint8_t, uint8_t); void write4bits(uint8_t); void expanderWrite(uint8_t); void pulseEnable(uint8_t); uint8_t _Addr; uint8_t _displayfunction; uint8_t _displaycontrol; uint8_t _displaymode; uint8_t _numlines; uint8_t _cols; uint8_t _rows; uint8_t _backlightval; uint8_t utf_hi_char; // UTF-8 high part }; #endif
Ну и собственно "Здравствуй мир":
//DFRobot.com //Compatible with the Arduino IDE 1.0 //Library version:1.1 // //Vasyl Yudin //BlockDuino.org //With support Cyrillic #include <Wire.h> #include <LiquidCrystalCyr_I2C.h> LiquidCrystalCyr_I2C lcd(0x27,8,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Миру"); lcd.setCursor(0, 1); lcd.print(" МИР"); delay(5000); lcd.home(); } void loop() { lcd.print("АБВГДЕЁЖ"); lcd.setCursor(0, 1); lcd.print("ЗИЙКЛМНО"); delay(3000); lcd.clear(); lcd.print("ПРСТУФХЦ"); lcd.setCursor(0, 1); lcd.print("ЧШЩЪЫЬЭЮ"); delay(3000); lcd.clear(); lcd.print("абвгдеёж"); lcd.setCursor(0, 1); lcd.print("зийклмно"); delay(3000); lcd.clear(); lcd.print("прстуфхц"); lcd.setCursor(0, 1); lcd.print("чшщъыьэю"); delay(3000); lcd.clear(); lcd.print("ЯЯЯЯЯЯЯЯ"); lcd.setCursor(0, 1); lcd.print("яяяяяяяя"); delay(3000); lcd.clear(); }
Программисты, гляньте если не влом, заранее благодарю.
Вс типы вроде Вашего prog_uchar объявлены устаревшими и больше не поддерживаются. Замените их на современные и, Бог даст, остальное заработает.
Как заменять, можно посмотреть в файле pgmspace.h - там есть typedef'ы. Например, Ваш любимый prog_uchar там определяется как:
Благодарю, все завертухалось.
P/S ЕвгенийП, спасибо, вроде все решилось.
sadman41, поделитесь обновленной библиотекой LiquidCrystalCyr_I2C ? мой адрес chernisheevka@mail.ru
Я столкнулся с такой же бедой. Тоже пользовался 1.0.5 и проблем не знал, но прогресс идет вперед. Надо догонять.
У меня её нет и не было, я пользуюсь русифицированными дисплеями там, где нужна кириллица.
bwn для себя правил и, видимо, продолжает использовать.
Самый первый проект, давно было, не помню уже.(((( Дисплеев с кириллицей больше не брал, так что, не использую.
P/S Порылся, в IDE осталась, пример в 1.6.4 скомпилировался без ошибок. Отправил, попробуйте.
Благодарю! Но не заработала она на IDE 1.8.9 :(
Заработала другая библиотека: liquidcrystalrus_i2c-master . буду переписывать программу под неё.