Ich weiss nicht ob der Asuro da schon was mitbringt, aber sowas geht mit einem Timer.
http://www.rn-wissen.de/index.php/Timer/Counter_(Avr)
hallo
möchte einen timer einbinden der beim start zu zählen anfängt. sobald ein gewünschter wert erreicht ist soll eine funktion ausgelöst werden.
z.b. mit diesem program soll der asuro 5" einer linie folgen, danach anhalten.
hat jemand einen fertigen programmteil den man einfügen könnte.Code:#include "asuro.h" int main(void){ unsigned int data[2]; Init(); FrontLED(ON); MotorDir(FWD,FWD); MotorSpeed(255,255); BackLED(ON,ON); while(1){ LineData(data); if (data[1] < 35 && data[0] < 35) {MotorSpeed(255,255); BackLED(ON,ON); MotorDir(FWD,FWD);} if (data[0] < 35 && data[1] > 35) {MotorSpeed(150,255); BackLED(OFF,ON); MotorDir(FWD,FWD);} if (data[0] > 35 && data[1] < 35) {MotorSpeed(255,150); BackLED(ON,OFF); MotorDir(FWD,FWD);} if (data[0] > 35 && data[1] > 35) {MotorSpeed(155,155); MotorDir(FWD,RWD);} } return 0; }
besten dank
ASURO1995
Ich weiss nicht ob der Asuro da schon was mitbringt, aber sowas geht mit einem Timer.
http://www.rn-wissen.de/index.php/Timer/Counter_(Avr)
Hallo
Man könnte z.B. die Schleifendurchgänge zählen:
Das ist zwar nicht sehr genau, allerdings ist auch der Aufwand sehr gering.Code:... int main(void){ unsigned int data[2]; unsigned long loopcounter=0; // zählt die Schleifendurchgänge Init(); FrontLED(ON); MotorDir(FWD,FWD); MotorSpeed(255,255); BackLED(ON,ON); while(1){ if(loopcounter++ > 8000) // 8000 sind ca. 5 Sekunden { StatusLED(YELLOW); MotorSpeed(0,0); loopcounter=0; while(!PollSwitch()); // Warten auf Taste StatusLED(GREEN); } LineData(data); ...
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
danke
wird mir sicher weiterhelfen
Jipiii...
hat funktioniert!!!!
danke \/
Ist zwar eine sehr einfache Variante, aber mit anderer Controllerfrequenz bekommst du auch ein anderes Ergebnis
Der asuro läuft zwingend mit 8MHz;) Natürlich schwankt die Zykluszeit mit der Länge des Programms in der Hauptscheife, aber wenn es funktioniert ist es doch gut, oder?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Naja... Sagen wir einfach viele Wege führen nach Rom
Hi,
Du kannst auch Gettime(..) verwenden
Code:. . int main(void) { uint16_t timeInMS; uint16_t timeDelta; Init(); timeInMS = Gettime(); while (1) { timeDelta = Gettime() - timeInMS; // Wird alle 1000ms==1sec ausgeführt if (timeDelta >= 1000) { timeInMS = Gettime(); // hier dein code } } . . }
Gruss,
O.
Gettime() ist nicht bei der orginalen CD-Lib dabei, das kam erst mit Msleep() und dem 36kHz-Timer, Wenn ich mich nicht irre...
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen