wie bekommt man einen delay in ein c Programm?
Hallo Ich habe mir ein Video über den arduino angesehen. In dem Video wurde eine LED mit einer Sekunde Verzögerung ein und aus geschaltet. Ich hab versucht das ganze in C nach zu bauen aber scheitere am delay. Ich hab keine lib gefunden in der das möglich ist. Kann jemand helfen ?
4 Antworten
Es gibt 4 grobe Wege, um zeitgesteuert Code abzuarbeiten:
a) Schleife mit festen Befehlen (siehe Vorschlag hibas123) mit 2 großen Nachteilen: 1. muss die Zeitmessung der Hardware angepasst werden und 2. zieht dieses "Warten auf CPU-Abarbeitung" genau 100% CPU-Last für 1 Kern
Vorteil: Abbruch-Stelle kann eingebaut werden
b) delay & sleep-Wege: http://ubuntuforums.org/showthread.php?t=1357606
https://msdn.microsoft.com/de-de/library/windows/desktop/ms686298(v=vs.85).aspx
Vorteil: während des Wartens 0% CPU-Last für diesen Thread; Hardware-unabhängig; kurzer Code
Nachteil: während des Wartens kein Abbruch möglich!! (höchstens wenn ein 2. Thread diesen ersten Thread hart beendet; oder 2 Schleifen mit mehreren kurzen sleep)
c) Timer: statt in einer Codezeile zu warten, definiert man einen Timer, der zu bestimmten Zeiten Ereignisse auslöst und die Zustände (Deine LED) definiert ändert -> auch 0% CPU-Last -> dafür erlaubt der Code jedoch während des Wartens andere Dinge (weitere Timer) oder einen vorzeitigen Abbruch!
d) Multitasking: noch mehr Freiheiten und noch genauer (bis zu µs), aber auch noch komplizierter
Die Library wäre:
util/delay.h
und die zugehörigen Funktionen:
_delay_ms() für Millisekunden
_delay_us() für Mikrosekunden
Also in etwa:
#include <util/delay.h>
while(1){
_delay_ms(1000);
}
der compiler meckert bei lib rum "no such file or directory"
Kommt drauf an welches C er verwendet. Meine lösung ist universell. Die benötigte Zeit kann man sich mithilfe der Tacktrate und der anzahl an befehlen ausrechnen
Fu brauchst nicht direkt eine delay funktion. Du musst deinem Prozessor in der zeit einfach irgendetwas zu machen geben. Ich würde ne einfache for funktion schreiben:
Funkt(int ticks){
For(;ticks <=0;ticks--){}
}
In die Bedingung gehört >=... Sonst muss man die Tick anzahl negativ angeben. Dies ist verwirrend
Die Funktion die du suchst heisst delay. Parameter: Zeit in Millisekunden.
Er benutzt ja nicht Arduino sondern C. Da gibt es von haus aus keine Delay funktion
int led = 0;
while (led<3) {
led = led+1;
printf("%i\n, led);
delay(3000);
led = led -1;
printf("%i\n, led);
}
das ist das wichtigste...ich kann den code nicht rein kopieren aus irgendwelchen gründen..