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...
Wenn die While-Schleife zu lange läuft, muss ich den MotorPin wieder auf low setzen. Aber irgendwie komm ich da nicht raus.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(); } }







Zitieren
Lesezeichen