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.
Lesezeichen