Sicher nicht das schlechteste
. Da bist Du sicher, dass er nie über den Schalter hinausfährt.
Was mit bei einem ersten Überfliegen des Sketches aufgefallen ist, dass noch häufig das Warten auf Bewegungsende fehlt. Eigentlich immer, wenn Du eine Bewegung startest, und deine Schrittkette weiterschaltest, must Du im neuen Schritt erstmal warten, bis die Bewegung zu Ende ist, bevor Du wieder eine Aktion startest ( an manchen Stellen ist es schon drin, aber vielfach fehlt es noch - gerade auch beim Servo ).
Nur hier:
case Schritt::REF_LIFT_GEFUNDEN:
if (!stepLift.moving()) {
if (Taster.state(refLift)) { // Bewegung Lift starten
musst Du zuerst den Schalter abfragen, um die Bewegung stoppen zu können ( Variante 2
). Die vorher gestartete Bewegung muss auf jeden Fall so weit gehen, dass der Schalter sicher erreicht wird, und wird dann beim Betätigen des Schalters vorzeitig gestoppt.