Hi
Mit millis() prüfst Du, ob genug Zeit vergangen ist, um den nächsten Schritt zu machen.
Natürlich kannst Du weiterhin while-Schleifen benutzen, nur nicht für's Warten!
Wenn Du millis wie folgt benutzt:
millis()-letzte_Startzeit>=Wartezeit
Passiert auch in 47,batsch Tagen Nichts Außergewöhnliches!
Die Werte sollten alle unsigned (vorzeichenlos) long (32bit) sein, damit der Compiler nicht meckert.
Wenn Dir eine Wartezeit von 255ms reicht, könnte Wartezeit (bzw. klein geschrieben, da man Variablennamen klein beginnt, KONSTANTEN komplett groß und noch ein/zwei Besonderheiten, auf Die man sich Mal geeinigt hat, damit man den Code besser lesen kann) auch den Typ byte bekommen (ist 'von Haus aus' vorzeichenlos) ist 8bit breit und kann Werte von 0...255 annehmen.
Hierbei könnte aber der Compiler meckern, da die Differenz zweier 32-bit-Zahlen mit einer 8-bit-Zahl verglichen werden soll.
Mit Deinem 'A' || 'B' bekommst Du IMMER true, da beide Werte != Null sind und true oder true ist true.
'A' müsste 65 sein (@ ist 64

), Du kannst also 'A'-'E' mit 65...69 gleich setzen.
Bei den Zahlen, '0' ist 0x30 (hexadezimal, die letzte Ziffer entspricht der Wertigkeit unseres Zahlensystem, nebenbei) oder 48 in Dezimal.
'0'...'9' wäre dann 48...57.
Oder Du benutzt switch case:
switch (variable){
case 'A':
case 'B':
...
case '7':
//deinen Code, Der ausgeführt werden soll, wenn die Taste A, B, ..., oder 7 war.
}
WICHTIG hierbei: nach dem Einsprung (dem passendem case) werden ALLE folgenden Befehle abgearbeitet, bis break; gefunden wird, oder die switch-Abfrage zu ende ist.
Wenn also bei 'A' was Anderes als bei 'B' gemacht werden soll, muß am Ende vom 'A'-Bereich ein break; stehen.
MfG