#include <LCDI2C_Multilingual.h>
LCDI2C_Katakana_Vietnamese lcd(0x27, 20, 4);
char LineText[] = "kachnicka a slepicka9899987";
char CurTime[] = "26-01-05,21:12:35";
uint32_t timestamp;
typedef const __FlashStringHelper * FStringPtr;
// FStringPtr txtP;
class Disp {
public:
void LcdLine2(uint8_t line, FStringPtr txt) {
char Tline[21] = {};
lcd.setCursor(0, line);
lcd.print(F(" "));
strncpy_PF(Tline, txt, 20);
Serial.println("Fstring overload used");
lcd.setCursor(0, line);
lcd.print(Tline);
}
void LcdLine2(uint8_t line, char *txt) {
char Tline[21] = {};
lcd.setCursor(0, line);
lcd.print(F(" "));
strncpy(Tline, txt, 20);
Serial.println("pointer overload used");
lcd.setCursor(0, line);
lcd.print(Tline);
}
};
Disp DisplayP;
void setup() {
// typedef const __FlashStringHelper * FStringPtr;
// void LcdLineP(uint8_t line, const __FlashStringHelper * txt);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.println("____________________");
lcd.println("____________________");
lcd.println("____________________");
lcd.println("____________________");
timestamp = micros();
LcdLine(0, "kachnicka a s");
timestamp = micros() - timestamp;
Serial.print("Function new time: ");
Serial.println(timestamp);
timestamp = micros();
LcdLine3(1, LineText);
timestamp = micros() - timestamp;
Serial.print("Function old time: ");
Serial.println(timestamp);
// Serial.print("Printing affected array: ");
// Serial.println(LineText);
lcd.print("X");
// LcdLine(1, "Slepicka");
timestamp = micros();
// LcdLineP(2, PSTR("kokrhacek a kdakalka kokodak"));
LcdLineP(2, PSTR("kokrhacek P k"));
// LcdLineP(2, F("kokrhacek a kdakalka"));
// LcdLineP(2, "kokrhacek a kdakalka");
timestamp = micros() - timestamp;
Serial.print("Function PROGMEM time: ");
Serial.println(timestamp);
lcd.print("X");
// DisplayP.LcdLine2(1, F("kokrhacek Fstr kdakalka kokodak"));
// DisplayP.LcdLine2(3, "kokrhacek point kdakalka kokodak");
// strcpy(CurTime, CurTime + 9);
// Serial.println("Test of copying inplace:");
// Serial.println(CurTime);
}
void loop() {
// put your main code here, to run repeatedly:
}
// Print on empty line of LC display memory based char array.
void LcdLine(uint8_t line, char *txt) {
uint8_t ArrLen = min(strlen(txt), 20);
lcd.setCursor(0, line);
for (uint8_t i = 0; i < ArrLen; i++) {
lcd.write(txt[i]);
}
for (uint8_t i = ArrLen; i < 20; i++) {
lcd.write(' ');
}
lcd.setCursor(ArrLen, line);
}
void LcdLine3(uint8_t line, char txt[]) {
lcd.setCursor(0, line);
lcd.print(F(" "));
// strncpy(txt, txt, 20);
if (strlen(txt) > 20) {
txt[20] = '\0';
}
// Serial.println(txt);
lcd.setCursor(0, line);
lcd.print(txt);
}
/* // Print on empty line of LC display Progmem based char array.
void LcdLineP(uint8_t line, const __FlashStringHelper *txt) {
char buffer[21];
strncpy_PF(buffer, (const char*)txt, 20);
size_t ArrLen = strlen(buffer);
lcd.setCursor(0, line);
buffer[ArrLen] = '\0';
// if (ArrLen > 20) {
// lcd.print(txt);
// return;
// }
lcd.print(buffer);
for (uint8_t i = ArrLen; i < 20; i++) {
lcd.write(' ');
}
lcd.setCursor(ArrLen, line);
} */
void LcdLineP(uint8_t line, char txt[]) {
size_t ArrLen = strlen(txt);
lcd.setCursor(0, line);
strncpy_PF(txt, txt, 20);
// txt[ArrLen] = '\0';
lcd.print(txt);
for (uint8_t i = ArrLen; i < 20; i++) {
lcd.write(' ');
}
lcd.setCursor(ArrLen, line);
}
/*
void LcdLineP(uint8_t line, char *txt) {
size_t ArrLen = strlen(txt);
lcd.setCursor(0, line);
strncpy(txt, txt, 20);
if (ArrLen > 20) {
// DEBUG_PRINTLN("Shorting the P array");
txt[20] = '\0';
lcd.print(txt);
return;
}
// Serial.println(txt);
txt[ArrLen] = '\0';
lcd.print(txt);
for (uint8_t i = ArrLen; i < 20; i++) {
lcd.write(' ');
}
lcd.setCursor(ArrLen, line);
} */
// strcpy(text, CurTime + 9);