Einen Timeout als Kommando Ende einzusetzen finde ich irgendwie seltsam.
char d1;
if(d1 == "ON")
Ein Buchstabe kann niemals 2 Buchstaben plus die Null sein.
Nein, man kann keine Zeiger auf Zeichenketten mit Buchstaben vergleichen.
Zumindest macht es keinen Sinn.
Das sollte es dir auch sagen, wenn du die Warnungen aktivierst.
Auch das eine Semikolon sitzt das falsch.
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino: In function 'void setup()':
sketch_oct28b:12:11: error: 'class LiquidCrystal_I2C' has no member named 'init'
12 | lcd.init(); // initialize the lcd
| ^~~~
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino: In function 'void loop()':
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino:34:16: warning: comparison with string literal results in unspecified behavior [-Waddress]
34 | if(d1 == "ON")
| ~~~^~~~~~~
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino:34:16: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino:40:21: warning: comparison with string literal results in unspecified behavior [-Waddress]
40 | else if(d1 == "OFF");
| ~~~^~~~~~~~
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino:40:21: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]
E:\Programme\arduino\portable\sketchbook\sketch_oct28b\sketch_oct28b.ino:40:30: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
40 | else if(d1 == "OFF");
| ^
OK, der ": error: 'class LiquidCrystal_I2C' has no member named 'init'" geht auf mich.
Aber der Rest ist deins.