Das solltest du aber aus performancetechnischen Gründen (auch wenn kaum messbar bis garnicht) ändern durch ein elsif oder switch. Hier wird die Variable mehrere Male abgefragt, auch wenn eines der Ereignisse bereits wahr war.
elsif bricht mit der Überprüfung ab, sobald eine wahr ist. Switch ruft auch nur die Zeile auf, die für die Variable zutrifft.
Edit: Speicherbedarf hat sogut wie michts mit Codezeilen zu tun.
Der AVR hat eine Harvard Architektur. Das heißt Flash und RAM haben getrennte Adress-Räume. Eine Funktion kann also nicht so einfach ins Flash greifen und dort Daten auslesen. Deshalb werden beim Start alle Strings aus dem Flash ins RAM kopiert.
Der Compiler hat aber eine ganze Reihe von Makros und Hilfs-Funktionen um auch Strings im Flash zu bearbeiten
F() ist ein zusätzliches Makro der Arduino IDE das mit print() funktioniert
Ich finde, Lesbarkeit und Kürze sind verschiedene Optimierungen.
Jurs' Lösung ist sicher kürzer, aber vorher war es eventuell lesbarer. Geschmackssache
Der F - Makro hat den großen Vorteil, dass alles noch fast genauso gut lesbar ist ....
In einer tief vergrabenen Library ist Kürze besser, in einem Sketch meist Lesbarkeit.
Ein Änderungsvorschlag vielleicht:
else if(!testpattern_LED_st[5])
ist das gleiche wie
else
da vorher if (testpattern_LED_st[5]) abgefragt wurde.