EEPROM != Flash
Du meinst wahrscheinlich Flash.
Wenn du print() verwendest, brauchst du da gar nichts groß zu machen. Einfach so:
lcd.print(F("String im Flash"));
Dann belegt der String kein RAM mehr.
Ich würde da auch nicht lange rummachen und einfach zwei Strings nehmen. Einmal "Wasser OK" und "Wasser Störung". Dann muss man sich nichts überlegen wie man die aneinanderfügt.
Ansonsten braucht man ein Puffer im RAM, der Platz für den größten String + 1 hat. Kann man z.B. so machen:
const int STRING_BUFFER_SIZE = 21;
char stringBuffer[STRING_BUFFER_SIZE];
#define P(str) strcpy_P(stringBuffer, PSTR(str))
Dann kann man das P() Makro ähnlich wie F() verwenden. Das kopiert den String aus dem Flash ins RAM und strcpy_P() liefert einen Zeiger auf das Array zurück.
Das hat den Nachteil, dass Strings die man eventuell mehrmals verwendet auch mehrmals im Flash gespeichert werden. Was man so umgehen kann:
#define ProgmemCopy(str) strcpy_P(stringBuffer, str)
const char str1[] PROGMEM = "string1";
const char str2[] PROGMEM = "string2";
Dann kann man mit ProgmemCopy(str1) den String aus dem Flash ins RAM kopieren und so z.B. an eine Funktion übergeben, die einen char* erwartet
Wenn man wirklich eine Liste von Strings im Flash speichern will, geht das so:
const char dayString0[] PROGMEM = " Montag ";
const char dayString1[] PROGMEM = " Dienstag ";
const char dayString2[] PROGMEM = " Mittwoch ";
const char dayString3[] PROGMEM = "Donnerstag";
const char dayString4[] PROGMEM = " Freitag ";
const char dayString5[] PROGMEM = " Samstag ";
const char dayString6[] PROGMEM = " Sonntag ";
const char* dayStrings[] PROGMEM = { dayString0, dayString1, dayString2, dayString3, dayString4, dayString5, dayString6 };
Also erst die Strings speichern und dann ein Array auf die Strings. Dann kann man die Strings so auslesen:
char* getDayStr(byte day)
{
return strcpy_P(stringBuffer, (char*)pgm_read_word(&dayStrings[day]));
}
Man greift also auf dem Index im String Array zu, kopiert mit pgm_read_word() die entsprechende Adresse aus dem Flash und übergibt dann die Adresse an strcpy_P() um den String aus dem Flash ins RAM zu kopieren