PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motor laufen lassen so lange ein Button auf Webseite gedrückt wird



jcrypter
12.05.2021, 09:14
Guten Morgen Forum,

ich arbeite seit einer Weile mit ESP8266, in diesem Fall in der Bauform des Wemos D1 Mini.
Einen Schrittmotor steuern, eine Webseite aufbauen, das alles klappt.
Jetzt habe ich das Problem, dass ich den Motor über eine Webseite steuern möchte. Soweit nicht so schwierig, jedoch will ich den Motor solange drehen lassen wie ein Button gedrückt wird.

Wie kann ich es realisieren, dass so lange ein Signal übertragen wird wie der Button gedrückt gehalten wird?
Ich habe keine Endschalter also würde es zu Kollisionen kommen wenn der Motor nicht stoppt wenn man lös lässt.

Eine Idee die ich hatte ist, dass ich auf "onmousedown" und "onmouseup" reagiere.
Onmouseup würde per Ajax ein Signal schicken, dass gestoppt werden soll.
Was passiert jedoch wenn die Verbindung unterbrochen wird? Dann kommt das Signal nicht an.
Ein Verbindungsverlust sollte ja das selbe auslösen wie ein "Mouseup".

Sind Sockets eine Lösung? Kann man dann irgendwie "so lange wie" realisieren?

Ich freue mich auf eure Ideen!

Crypi

Moppi
12.05.2021, 18:58
Hallo Crypti!

Anfragen an Webbrowser erfolgen immer mit Verzögerung. Bei normalen HTML-Anfragen (GET oder POST) etwa 0.5 bis 1s. Weil Daten müssen hingeschickt werden und dann antwortet der Server auch noch. Würdest Du in einer Schleife immer wider Anfragen zum Server schicken, würde eben zwischen den Anfragen etwa die oben genannte Zeit vergehen.

Noch mal drüber nachdenken, ob Du das anders lösen möchtest.

Defiant
13.05.2021, 12:02
Ich habe sowas mit einem Kreis am laufen, wo ich Klicke und dann den Mauszeiger in die Richtung bewege, in die ich fahren will (Siehe Screenshot im Anhang). Dafür werte ich genau die mousedown/mouseup-Events aus (https://defiant.homedns.org/gitweb/?p=ros_wild_thumper.git;a=blob;f=www/assets/javascripts/application.js), die du schon angesprochen hast. Als Unterbau natürlich ROS mit Robot Web Tools (http://robotwebtools.org/), welches Websockets verwendet.
Eine Fehlerbehandlung habe ich dafür nicht extra gemacht. Aber mein Roboter stoppt sowieso, wenn es nach einer Sekunde oder so keinen neuen Befehl bekommt.

jcrypter
17.05.2021, 10:09
Vielen Dank für eure Antworten!

Ich habe es jetzt einfach mal ausprobiert und lasse ein start/stop Signal per Ajax vom Browser an den ESP8266 übertragen.
Ich nutze onmousedown für den Startbefehl und onmouseup für den Stopbefehl.
Zur Verzögerung: es geht "ohne Verzögerung". Zumindest merke ich keine.
Die Idee einen Timer mitlaufen zu lassen um ein Endloslaufen nach Verbindungsverlust zu verhindern habe ich eingebaut und es funktioniert sehr gut.
Sockets brauchte ich nicht und da ich keine Erfahrung damit habe, hab sie weggelassen.
Wenn jemand Interesse am Quellcode hat stelle ich den gern zur Verfügung.

Crypi