FlexyStepper.h mit OneButton.h nutzen
|
09.02.2020, 14:51
Beitrag #1
|
|||
|
|||
FlexyStepper.h mit OneButton.h nutzen
Hallo,
unter Verwendung des BeispielSketch der FlexyStepper.h: Example7_MovingWhileDoingOtherThingsToo habe ich probiert diesen mit button.attachClick zu starten, und mit button.attachDoubleClick zu beenden, also den STOP_BUTTON_PIN auszulösen. Letzteres funktioniert nicht. Die FlexyStepper.h soll ja weitestgehend nicht blockierende Funktionen beinhalten, so auch die im Example7. Unten noch der Sketch ohne OneButton.h, der funktioniert. Woran liegt das bitte, kann man das Problem beheben? Code: // https://github.com/Stan-Reifel/FlexyStepper Ohne Onebutton.h funktioniert es: Code: #include <FlexyStepper.h> |
|||
09.02.2020, 17:58
Beitrag #2
|
|||
|
|||
RE: FlexyStepper.h mit OneButton.h nutzen
Funktioniert nicht, ist eine sehr aussagekräftige Beschreibung eines Fehlers, den nur du kennst bzw. nachvollziehen kannst.
Also geht das etwas genauer ? Z.B. was funktioniert noch und was funktioniert nicht mehr. Hast du in deinen Sketch mal ein paar serielle Ausgaben eingebaut, um zu sehen wo der Sketch nicht mehr funktioniert ? Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
09.02.2020, 23:30
Beitrag #3
|
|||
|
|||
RE: FlexyStepper.h mit OneButton.h nutzen
Was funktioniert: Mit button.attachClick zu startender Schrittmotor macht das was er entsprechend
stepper.setSpeedInStepsPerSecond(1600); stepper.setAccelerationInStepsPerSecondPerSecond(1600); stepper.setTargetPositionInSteps(120000); machen soll. Er macht seine 120000 Steps. Es wird zweimal "Anfang" ausgegeben, einmal entsprechend void Anfang() und einmal entsprechend dem void loop() - soweit also in Ordnung. Diese vollständige Bewegung kann laut Sketch jederzeit beendet werden, wenn entsprechend if ((ButtonState == LOW) && (stopFlag == false)) die Bedingungen erfüllt sind. Wozu (stopFlag == false) in dem Beispielsketch enthalten ist weiß ich nicht, jedenfalls ist stopFlag == false. Was nicht funktioniert: Die andere Bedingung, dass ButtonState == LOW) ist, tritt nicht ein weil ein Doppelklick, den OneButton.h erkennen sollte keine Wirkung hat. Die Ausgabe "E N D E " erfolgt nicht. Überraschend ist, weil ein fast identischer Sketch dies nicht tut, die Bewegung des Schrittmotors startet selbständig neu - läuft also endlos. Der andere unterscheidet sich von dem hier dadurch, das statt: Taster.attachClick(Anfang); Taster.attachDoubleClick(Ende); Taster.attachLongPressStart(Anfang); Taster.attachLongPressStop(Ende); enthalten ist. Weiterhin wird hier "E N D E" ausgegeben, aber nicht wenn der Taster losgelassen, sondern erst wenn der Schrittmotor gestoppt hat. Der FlexyStepper.h Code also beendet, und die, wie ich vermute, Blockierung der OneButton.h beendet ist. Diese erkennt vermeintlich dass die Aktion, die void(Ende) auslöst, gerade passiert ist. Um das zu testen habe ich den Sketch mit Click und DoubleClick probiert. Eventuell ist der UNO defekt? Ich glaube mich zu erinnern, dass die LEDs bei den ersten Übungen grün leuchteten, aktuell leuchten sie rot. Ich habe dazu im Internet nichts gefunden. 'Blink' funktioniert; auch sonst ist mir nichts aufgefallen, nur halt die Probleme hier. |
|||
11.02.2020, 15:30
Beitrag #4
|
|||
|
|||
RE: FlexyStepper.h mit OneButton.h nutzen
Ich habe es gerade mit mit einem neu geliefertem UNO probiert, die Probleme sind die gleichen.
Und, dass der eine Sketch endlos läuft ist nicht verwunderlich, da attachClick(Ende) nicht erkannt wird bleibt buttonState = HIGH. Nutz jemand beide Librarys zusammen? |
|||
11.02.2020, 15:46
(Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2020 15:47 von MicroBahner.)
Beitrag #5
|
|||
|
|||
RE: FlexyStepper.h mit OneButton.h nutzen
Du musst die 'tick' Methode regelmäßig aufrufen, damit die OneButton Lib funktioniert. Deine Callbacks werden aus der tick-Nethode heraus aufgerufen.
Deine Schleife während der Motor läuft ist aber blockierend, da wird tick während der Laufzeit des Motors nicht mehr aufgerufen. Wie sollen da deine Callbacks 'Anfang' bzw. 'Ende' aufgerufen werden? Gruß, Franz-Peter |
|||
20.02.2020, 17:16
Beitrag #6
|
|||
|
|||
RE: FlexyStepper.h mit OneButton.h nutzen
Ja danke, prima, einmal Taster.tick in der while-Schleife hat geholfen. Ist ja auch logisch und bei einem anderen Sketch hatte ich das aus diesem Grund auch probiert, da half es aber nicht. Vermutlich kam ich deshalb hier nicht auf die Idee. Es haben sich weitere Probleme mit der OneButton.h ergeben - die werde ich bald hier posten.
|
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste