-
ASURO Timer
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.
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;
}
hat jemand einen fertigen programmteil den man einfügen könnte.
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:
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);
...
Das ist zwar nicht sehr genau, allerdings ist auch der Aufwand sehr gering.
Gruß
mic
-
danke :)
wird mir sicher weiterhelfen
-
Jipiii...
hat funktioniert!!!!
danke \:D/
-
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?
-
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...