Hallo zusammen, ich habe mein Arduino (Mega2560) über USB am PC verbunden und möchte testweise eine LED ansteuern. Das ganze funktioniert mehr schlecht als recht. Es geht nur wenn ich im Processing Scetch jeweils eine Pause von mindestens 0,9 Sekunden einbaue. Bei einer kleineren Pause bleibt die LED immer aus, auf den Arduino Board werden aber immer Daten empfangen, da RX blinkt/an ist, je nach delay-Zeit. Ich habe testweise mal die bitrate variiert, was aber keine Verbesserung brachte. Über einen Tipp wäre ich dankbar.
900ms ist doch schon relativ gut. Vermutlich werden mehrere Bytes am Ende zusammen übertragen, so dass er die 200 nur eine einzige loop() Iteration lang setzt. Und das draw() in Processing wird vermutlich auch "nur" mit 60fps oder sowas aufgerufen. Dh. es liegt immer länger 0 an den Pin an als 200. Ich würde vorschlagen, dass du gleich mehrere Bytes überträgst, inklusive dem angestrebten Timing (also die delays auch). Dann lässt du den Controller das Timing mit delays/timern erledigen. Das auf PC-Seite zu machen kann zu langsam sein, alleine ein Schreibzugriff auf den COM-Port kann ein paar ms verbraten. Und dann wird draw() vermutlich wirklich rate-limited aufgerufen, also alle 16ms. Ambesten du guckst die mal an, was da auf der Seriellen-Schnittstelle raus kommt (einfach mal 2 USB<->RS232 verbinden). Noch besser wäre es, wenn du mit einem Oszilloskop mal den Pin vom Arduino/Controller ansiehst.
Robin R. schrieb: > 900ms ist doch schon relativ gut. Vermutlich werden mehrere > Bytes am Ende zusammen übertragen, so dass er die 200 nur eine > einzige loop() Iteration lang setzt. Und das draw() in Processing > wird vermutlich auch "nur" mit 60fps oder sowas aufgerufen. > Dh. es liegt immer länger 0 an den Pin an als 200. > > Ich würde vorschlagen, dass du gleich mehrere Bytes überträgst, > inklusive dem angestrebten Timing (also die delays auch). > Dann lässt du den Controller das Timing mit delays/timern > erledigen. > > Das auf PC-Seite zu machen kann zu langsam sein, alleine ein > Schreibzugriff auf den COM-Port kann ein paar ms verbraten. > Und dann wird draw() vermutlich wirklich rate-limited aufgerufen, > also alle 16ms. > > Ambesten du guckst die mal an, was da auf der Seriellen-Schnittstelle > raus kommt (einfach mal 2 USB<->RS232 verbinden). Noch besser wäre es, > wenn du mit einem Oszilloskop mal den Pin vom Arduino/Controller > ansiehst. Vielen Dank für die Antwort.Wenn ich erlich bin, verstehe ich das aber nicht ganz. Die LED wird ja nur geschaltet, wenn der PC sendet, ansonsten wird das ganze ja übersprungen. Bei den Programm handelt es sich übrigens um ein Beispielcode aus der Processing Entwicklungsumgebung. Ursprünglich ganz ohne delays. "mouseX" gibt hier einfach einen Wert von 0-255 zurück. Im Internet gibt es auch ein Video, dort geht es auch ohne delays in weicher Echtzeit. <c> void draw() { for (int i = 0; i < 256; i++) { stroke(i); line(i, 0, i, 150); } port.write(mouseX); } </c> https://www.youtube.com/watch?v=a8ZB1fnEi_4
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
