bin gerade am tüfteln wie man ab besen einen Impuls ausgeben kann, sagen wir mal 1 oder mehrere sec. lang ohne den ganzen Sketch mit einem delay aufzuhalten. Am liebsten hätte ich gerne eine Funktion die man kurz mal aufruft.
Das BlinkWithoutDelay-Beispiel zeigt Dir, wie Du eine solche Funktion realisieren kannst. Du musst natürlich Zustandsvariablen haben, damit Du weisst, in welchem State Du Dich gerade befindest, das kann im einfachsten Fall aber die gespeicherte millis()-Zeit sein.
Ist bei längeren Laufzeiten nicht so schön, weil theoretisch millis() zufällig gerade 0 sein könnte, aber das kannst Du mit einer zweiten Variable wenn nötig korrigieren.
ja, so geht das, Danke. Ist aber bei genauer Betrachtung auch nicht perfekt. Wenn die Hauptroutine (aus welchem Grund auch immer) mal einen kleinen Augenblick benötigt dann verzögert sich der Impuls entsprechend.
In vielen Fällen ist das sicher egal, aber präzise ist das nicht wirklich, vor allem wenn nicht jeder loop() Durchlauf gleich lange dauert. :~
Was ist schon perfekt? Genau damit keine Zyklen so viel länger brauchen vermeidet man ja das delay. Wenn Dein Arduino mit 16MHz läuft, dann kann er pro ms 16 000 Befehle abarbeiten. Das ist schonmal relativ viel an Code. Das heißt nur wenn Du darüber kommst wird es ungenau. Oder Du baust was mit delay oder while ein, dann dauert es auch. Da muss man dann schon vorsichtig sein. Wenn es genauer werden soll, dann muss man sich mit den Timern des ATMegas persönlich auseinandersetzen und evtl. was mit Interupts basteln. Aber für die meisten Anwendungen sollte millis() hinreichend genau sein.
Wenn die Hauptroutine (aus welchem Grund auch immer) mal einen kleinen Augenblick benötigt dann verzögert sich der Impuls entsprechend.
Wenn sie nur einen kleinen Augenblick benötigt, dann ist das kein Problem. Sollte der kleine Augenblick länger als eine Millisekunde sein, dann ist er nicht mehr klein und die Programmierung sollte überdacht werden. Wenn Du Impulse im Sub-Millisekunden-Bereich brauchst, dann solltest Du die mit der Hardware erzeugen und Dich dafür in die Programmierung der Timer- bzw. PWM-Module einlesen.