Delay sollte man wenn möglich vermeiden. Für einfache Dinge reicht es aber. Besser wäre es mit Interrupts zu arbeiten.
MfG Hannes
Delay sollte man wenn möglich vermeiden. Für einfache Dinge reicht es aber. Besser wäre es mit Interrupts zu arbeiten.
MfG Hannes
Hallo Hannes,
vielen Dank nochmal für Deine Nachricht.
Delay sollte man wenn möglich vermeiden.
Warum wird dann sehr oft Delay verwendet???
Also ich habe jetzt einige Sketche im Netz angeschaut und fast in jeden wird der Befehl Delay verwendet, wenn es um Zeitvariablen geht. Da sind auch sehr lange Programme bei. Z.B. wenn es um Windgeschwindigkeiten geht.
Selbst im Arduino-Buch "Grundlagen zur Programmierung" von U.S findest du fast keinen Sketch ohne Delay. z.B. Taster entprellen; Ein-und Ausschaltverzögerung usw.
Viele Grüße
Mexico 67
Das mit den Grundlagen war keineswegs als Angriff sondern vollkommen ernst gemeint. Wer sich in der Zukunft nur halbwegs intentsiv mit Digisparks / Arduinos beschäftigen will, kommt da einfach nicht drum rum. Und das Anlegen von Variablen oder die Verwendung von If/Then Entscheidungen gehört zur absoluten Grundlage jeder Programmiersprache.
Delay sollte man deshalb nicht verwenden, weil es die Ausführung des gesamten Programm-Codes blockiert. So kann man zum Beispiel nicht mehr auf Tasten-Eingaben oder andere Signale reagieren. In den Beispielen wird es deshalb immer verwendet, weil es einfach ist und man in der Regel ja gerade etwas anderes demonstrieren will. In einem Beispiel einen sog. endlichen Zustandautomaten zu zeigen nur um zu veranschaulichen, wie man einen Pin umschaltet ist nicht besonders lehrreich!
Ein Sketch, wie man eine LED ohne Verwendung von Delay zum Blinken bringt, ist übrigens sogar in den Beispielen der IDE enthalten (BlinkyWithoutDelay) ... deshalb muss hier keiner zeigen, wie es geht! Wie gesagt: wenn die Software nie was anderes machen soll als beschrieben und klar ist, dass sie nie erweitert wird, dann kann man das auch so machen. Meist "wächst" Software aber mit der Zeit ... und dann macht es Sinn, es gleich von Anfang an "richtig" zu machen.
redround
Ich will keine LED zum Blinken bringen, denn dann hätte ich auch den angegebenen Sketch für das Relais nehmen können und eine LED daran anschließen.Die hätte dann auch geblinkt.
Man sollte halt den Text richtig durchlesen um zu wissen um was es geht.
- - - Aktualisiert - - -
Hallo Hannes,
Ich verwende auch delays wenn es ein einfaches Testprogramm ist
genau, das sollte ein Testprogramm sein.
1. ob der Digispark und das Relais überhaupt funktionieren.
2. ob ich mein Projekt (TV-Box automatisch einschalten) überhaupt mit dem Digispark durchführen kann.
Und wenn man dann als blutiger Anfänger ( wie mehrmals geschrieben) auf solche Leute (redrount) trifft, die dann nur tadeln können aber keinen Sketch zusammen bringen (oder nicht helfen wollen) wie es richtig und einfacher funktioniert. Dann möchte man sich nicht mehr mit dem Programmieren auseinandersetzen.
Aber gottseidank gibt es noch andere Foren die einem Anfänger gerne helfen wollen.
Hannes ich bedanke mich für Deine Hilfe und schließ hiermit das Thema.
Freundliche Grüße
mexico67
Du darfst dich nur nicht entmutigen lassen. Jeder hat einmal damit anfangen müssen, es ist noch kein Meister vom Himmel gefallen.
Und das man delays vermeiden sollte war nur ein Hinweis.
MfG Hannes
Wenn ich mich nicht irre, habe ich auch den Code für die Lösung Deines Problems gepostet. Mir also vorzuwerfen, ich würde nur tadeln ist also echt daneben! Auch habe ich erklärt, warum man delay() in vielen Beispielen findet und warum man es trotzdem vermeiden sollte. Auch das hat in meinen Augen nichts mit tadeln zu tun. Und ich habe auch gesagt, wo Du ein erstes Beispiel dafür findest. Auch da sehe ich keinen Tadel!
Delay ist einfach zu verwenden. Der Nachteil von Delay ist, das nur dieser Befehl abgearbeitet wird (außer Interrupts). Ein weiterer Nachteil ist das es relativ ungenau ist, da die verschiedenen Interrupts das Delay unterbrechen. Wenn genaue Zeiten benötigt werden (als Beispiel Geschwindigkeit messen) muss man, damit es genau wird, Interrupts verwenden.
Ein weiterer Vorteil von Interrupts ist das man den uC "schlafen legen" kann (Sleepmodes), das geht bei Delay nicht.
Ich verwende auch delays wenn es ein einfaches Testprogramm ist oder bei Initialisierungen,....
Die delay Funktion ist ein einfacher Zähler.
MfG Hannes
Lesezeichen