Da er prinzipiell bei etlichen Testläufen kein Problem mit den 7V hatte, habe ich vorhin mal versucht, eine Einschalttauerüberwachung in meinen Code zu implementieren. Simples C-Gefrickel, aber die While-Schleife, welche die Positionen abruft und wartet, dass der Stop-Sensor sein Auslösesignal abgibt, mag meine Ideen zur Zeitbegrenzung nicht.
Sobald die Bewegung einsetzt, speichere ich den aktuellen Zeitwert. Wenn dieser nun um 5 Sekunden überschritten wird, würde ich gerne eine Zwangspause einlegen und einen reneuten Versuch nach einer kurzen Abkühlphase starten. Aber genau da liegt das Problem.
Theoretisch sollte ich mir mit der Funktion millis() die aktuellen Millisekunden auf meinem Diyplay ausgeben können. Aber das funktioniert genau einmal, kurz nach dem Aufruf der Funktion.
Also habe ich ohne zeitliche Konstante eine Zahl inkrementiert. Das klappt super, ich kann sie mir auch auf meinem Display anzeigen lassen, rasselt schön sauber hoch.
Sobald ich das jedoch als if-Abfrage in meine While-Schleife (kopfgesteuert) einbinde, zählt da nichts mehr. Irgendwie muss es in While-Schleifen mit Abfragen geben. Auch n kurzes Delay hat keine Abhilfe geschafft...

Code:
void turn()
{
    if (karusellInAction == 0)
        {
        karusellInAction = 1;
        karusellPosition = 0;
        digitalWrite(relayVoltagePin, HIGH);
        digitalWrite(motorPin, HIGH);
        delay(leadTime);                        // adjust for each model
        relay1 = 0;
        relay2 = 0;
        relay4 = 0;
        relay8 = 0;


        while (analogRead(relayStop) <= 20)                         // A0 default: 40 active: 340
        {
            if (analogRead(relayeins) >= 50) { relay1 = 1; }        // A1 default: 42 active: 342
            if (analogRead(relayzwei) >= 50) { relay2 = 1; }        // A2 default: 41 active: 341
            if (analogRead(relayvier) >= 50) { relay4 = 1; }        // A3 default: 40 active: 340
            if (analogRead(relayacht) >= 50) { relay8 = 1; }        // A4 default: 41 active: 340/341
        }

        writePosition();
        delay(overTravelTimings[(karusellPosition-1)]);                  // adjust for each model
        digitalWrite(motorPin, LOW);
        digitalWrite(relayVoltagePin, LOW);
        previousTurn = lastTurn;
        buttonTime = millis();
        if (jumpedOver <= 1)
        {
            jumpedOver++;
        }
        lastTurn = millis();                    // moved before stop-sensing
        karusellInAction = 0;
        //lcd.clear();
        }
}
Wenn die While-Schleife zu lange läuft, muss ich den MotorPin wieder auf low setzen. Aber irgendwie komm ich da nicht raus.