Hallo zusammen,
ich habe ein Problem mit einem Sketch, bei dem mir hoffentlich jemand weiterhelfen kann.
Der Aufbau - eine kleine Seilbahn:
Eine Gondel ist in der Bergstation, die andere in der Talstation. Wenn nun der Auslösetaster gedrückt wird, dreht sich ein Unipolarer Stepper und bewegt die Gondeln mittels Zugseils.
Wenn nun die bergauf fahrende Gondel eine Lichtschranke vor der Bergstation überfährt,
wird der Motor mit der eingestellten Rampenlänge langsam abgebremst und die Gondel kommt in der Bergstation zu stehen.
In der Bergstation ist eine zweite Lichtschanke und gibt an, dass beim erneuten Tastendruck diese Gondel wieder "abwärts" fahren muss - dann bremst die andere Gondel mit ihrer Lichtschranke die Bewegung wieder ab und alles beginnt wieder von vorne. Die Rampenlänge habe ich im Setup so eingestellt, dass die Gondeln ganz in die Stationen einfahren - das klappt bestens.
Jetzt würde ich diese Rampenlänge gerne mit einem Justagetaster "variabel" machen, dass im Nachhinein diese korrigiert werden kann.
Es reicht, wenn das z.B. die rechte Gondel das erledigt, da ja beide genau die gleiche Strecke fahren müssen.
Ich habe mir das so vorgestellt:
Wenn also die rechte Gondel unten ist und der Justage-Taster gedrückt wird, soll sich der Stepper langsam bergauf drehen.
Beim Überfahren der Lichtschranke VOR der Bergstation (diese Lichtschranke wird auch zum abbremsen genutzt), soll der der set.Zero(); gesetzt werden und der Motor dreht sich langsam weiter.
Sobald ich nun den Justagetaster loslasse, soll die Strecke (bzw. Stepperanzahl) vom set.Zero bis zum Loslassen die neue Rampenlänge = Abbremsen sein.
Ich habe nun schon mehrere Versuche gemacht, die Gondel fährt jedoch immer über das Ziel hinaus .....
Wäre super, wenn mir hier jemand helfen könnte!
Hier der Teil vom Sketch, in dem ich die Justage geschrieben habe:
if (digitalRead(Justage) == LOW) { // wenn der Justagetaster gedrückt ist
while (digitalRead(Justage) == LOW) {
Stepper.setSpeed(StepperTempo); // Antriebsgeschwindigkeit wir herunter gesetzt
Stepper.setRampLen(10); // Abbremsgeschwindigkeit ist kleiner
Stepper.doSteps(5);
}
Abbremsen = Stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.put(0, Abbremsen); // Speichern der neuen Position im EEPROM Nummer "0"
Status_Justage = 0;
}
if (digitalRead(LS_rechts) == LOW); // Warten bis erste Lichtschranke überfahren wird
Status_Justage++;
if (Status_Justage == 1) {
Stepper.stop(); // anhalten
delay(500);
Stepper.setZero(); // Momentane Position als Nullpunkt einrichten
Status_Justage++;
}
Was mache ich falsch bzw. kann so nicht gemacht werden?
Vorab besten Dank für eure Rückmeldungen!
Gruß Matthias