Sketch läuft zu langsam - wer kann helfen?

Ich habe zwei Sketche in den Tiefen des Netzes gefunden und an meine Hardware angepasst. Mein Problem ist, dass ich nicht programmieren kann. Daher haber ich die vorhandenen Sketche größtenteils übernommen, wie sie waren.

Der eine Sketch misst über einen Sensor die Drehzahl einer Welle und zeigt diese in einem LCD Display an. Die Ausgabe erfolgt in absoluter Drehzahl, in Prozent von der Maximaldrehzahl und als Balkendiagramm.

Der andere Sketch ermöglicht es, einen Schrittmotor über einen Drehimpulsgeber in beide Richtungen zu steuern. Der Motor dreht sich also so, wie der Drehimpulsgeber gedreht wird.

Jeder Sketch für sich läuft mit der angeschlossenen Hardare (Arduino Pro Mini mit Sensor, etc.) einwandfrei und schnell.

Nun habe ich beide Sketche zusammen kopiert. Leider reagiert der Motor nun nur noch mit etwa einer halben Sekunde Verzögerung. So ist das natürlich nicht zu gebrauchen.

Könnte jemand konkrete Änderungen vorschlagen, oder besser vornehmen, damit der Motor wieder (fast) in Echtzeit auf den Drehimpulsgeber reagiert?

P. S. Wie kann ich den Sketch als Code darstellen??

(Use Code Tags please! Moderator)


Das Problem ist, daß getRPM das Lesen des Encoders blockiert.

Man kann 2 Sketche nicht auf diese Weise zusammenkopieren. Der Code darf nicht "blockieren." Wie man sowas hinbekommen kann kannst Du hier schauen: https://github.com/udoklein/dcf77/blob/master/examples/Time_Switch/Time_Switch.ino Schau Dir mal "static_parse" und insbesondere das yield macro an.

Am 1.3. gibt's einen neuen Blogeintrag in dem ich dick und fett breit trete wie das genau funktioniert. Meiner Meinung nach eine der bequemsten Methoden für einen AVR kooperatives Multitasking zu etablieren. Nachahmung auf anderne Prozessoren (mit Pipelines) nicht notwendig empfehlenswert. Aber wir sind ja beim Arduino ;)

Einfacher wäre es den Encoder per Timer Interrupt auszulesen:

Grundlagen: http://www.meinduino.de/arduino-grundlagen/2014/09/20/drehencoder1.html Mit Timer: http://www.meinduino.de/arduino-grundlagen/2014/09/21/drehencoder2.html

Mit “while (currentTime<=sampleTime)” wobei “const unsigned long sampleTime=1000;” ist wird 1 Sekunde lang gemessen und blockiert den Rest des Sketches.

Gleiches gilt für die Ansteuerung des Schrittmotors.

Lerne programmieren und programmiere von Grund auf einen Sketch der beide Dinge gleichzeitig (nacheinander) macht ohne den anderen zu blockieren.
Grüße Uwe

Oder kauf dir einen zweiten Arduino und sei dankbar, dass du zwei Sachen gefunden hast die du brauchen kannst und die beide funktionieren.