Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO Timer
ASURO1995
25.10.2009, 11:56
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.
#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
KingTobi
25.10.2009, 12:06
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)
radbruch
25.10.2009, 12:17
Hallo
Man könnte z.B. die Schleifendurchgänge zählen:
...
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
ASURO1995
25.10.2009, 17:55
danke :)
wird mir sicher weiterhelfen
ASURO1995
25.10.2009, 18:06
Jipiii...
hat funktioniert!!!!
danke \:D/
KingTobi
25.10.2009, 18:09
Ist zwar eine sehr einfache Variante, aber mit anderer Controllerfrequenz bekommst du auch ein anderes Ergebnis
radbruch
25.10.2009, 18:47
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?
KingTobi
25.10.2009, 18:49
Naja... Sagen wir einfach viele Wege führen nach Rom ;)
Hi,
Du kannst auch Gettime(..) verwenden
.
.
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.
radbruch
26.10.2009, 11:32
Gettime() ist nicht bei der orginalen CD-Lib dabei, das kam erst mit Msleep() und dem 36kHz-Timer, Wenn ich mich nicht irre...
Hi radbruch,
hab das nochmal nachgeschaut was Du sagst.
[glow=red:2c88b5904f]Du hast Recht![/glow:2c88b5904f] :-b
Der Timer selbst war aber schon enthalten.
Das geht dann also wohl nicht ohne eine neue LIB.
Gruss,
Olli
ASURO1995
29.10.2009, 12:19
Hallo...
also welche AsuroLib bräuchte ich für diesen timer???
radbruch
29.10.2009, 12:52
Hallo
Wie immer empfehle ich die Version 2.3 (http://downloads.sourceforge.net/project/asuro/AsuroLib/asuro%20lib%20V2.3/asurolib_v23.zip?use_mirror=surfnet) der erweiterten asuro-Library:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=462281#462281
btw: Gibt es eigentlich jemanden der die schon in dieser Version zusätzlich enthaltenen Encoder- und Tasterfunktionen nutzt?
Gruß
mic
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.