HELP по старой библиотеке LCD I2C

bwn
Offline
Зарегистрирован: 25.08.2014

Всем привет. Собрал года три назад девайс, компилировал в 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();
}

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

sadman41
Offline
Зарегистрирован: 19.10.2016
"PROGMEM prog_uchar utf_recode[] = " нужно сделать так для новых IDE  -  "const unsigned char utf_recode[] PROGMEM = "
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вс типы вроде Вашего prog_uchar объявлены устаревшими и больше не поддерживаются. Замените их на современные и, Бог даст, остальное заработает.

Как заменять, можно посмотреть в файле pgmspace.h - там есть typedef'ы. Например, Ваш любимый prog_uchar там определяется как:

typedef unsigned char PROGMEM prog_uchar;
 
bwn
Offline
Зарегистрирован: 25.08.2014

sadman41 пишет:

Благодарю, все завертухалось.

P/S ЕвгенийП, спасибо, вроде все решилось.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

sadman41, поделитесь обновленной библиотекой LiquidCrystalCyr_I2C ?  мой адрес chernisheevka@mail.ru

Я столкнулся с такой же бедой. Тоже пользовался 1.0.5 и проблем не знал, но прогресс идет вперед. Надо догонять.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

bwn для себя правил и, видимо, продолжает использовать.

bwn
Offline
Зарегистрирован: 25.08.2014

Самый первый проект, давно было, не помню уже.(((( Дисплеев с кириллицей больше не брал, так что, не использую.

P/S Порылся, в IDE осталась, пример в 1.6.4 скомпилировался без ошибок. Отправил, попробуйте.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

Благодарю! Но не заработала она на IDE 1.8.9 :( 

Заработала другая библиотека: liquidcrystalrus_i2c-master . буду переписывать  программу под неё.