PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie: s-w-Wechsel über eine bestimmte Zeit addieren



asuro_oli
21.02.2007, 20:56
Hallo zusammen!

Ich bin noch ein ASURO-Neuling. Zur Zeit befasse ich mich mit der Odometrie. Mir gelingt es auch bereits ganz gut, schwarz-weiß-wechsel zu erkennen und aufzuaddieren. Das benötigt man ja auch zum Beispiel für eine Geschwindigkeitsregelung. Mein kleines Programm dazu sieht wie folgt aus:




#include "asuro.h"
#define mittelwert 550


int main (void)
{
unsigned int daten[2];
unsigned int odometrie_li;
unsigned int odometrie_re;
unsigned int letzter_wert_li = 550;
unsigned int letzter_wert_re = 550;
unsigned int zaehler_li = 0;
unsigned int zaehler_re = 0;
unsigned int i = 0;
unsigned int j = 0;

Init();

MotorDir(FWD,FWD);
MotorSpeed(150,150);

for(j=0;j<500;j++) Sleep(255);

for(i=0;i<=5000;i++) //Schleife 5000 mal durchlaufen
{
OdometrieData(daten);

odometrie_li = daten[0];
odometrie_re = daten[1];

if(odometrie_li<mittelwert && letzter_wert_li>mittelwert) zaehler_li++;
if(odometrie_li>mittelwert && letzter_wert_li<mittelwert) zaehler_li++;

if(odometrie_re<mittelwert && letzter_wert_re>mittelwert) zaehler_re++;
if(odometrie_re>mittelwert && letzter_wert_re<mittelwert) zaehler_re++;

letzter_wert_li = odometrie_li;
letzter_wert_re = odometrie_re;
}


MotorSpeed(0,0);

int2asc(zaehler_li);

SerWrite(ausgabe,7); //zaehler_li ausgeben

while(1);

return 0;
}




Jedoch habe ich mit dem Programm das Problem, dass ich meine Schwarz-Weiß Wechsel nicht über eine ganz bestimmte Zeit aufaddiere. Ich durchlaufe die Schleife einfach nur 5000 mal und gucke bei jedem Durchlauf, ob ein wechsel stattgefunden hat. Wie kann ich anstatt der 5000 Durchläufe eine bestimmte Zeit einstellen, über welche die schwarz-weiß-wechsel aufaddiert werden?

Über Antworten hierzu würde ich mich freuen. Danke und schöne Grüße!

Oli

radbruch
21.02.2007, 21:34
Hallo,

vielleicht so:

unsigned long startzeit, stopzeit;

startzeit=Gettime(); // aktuelle Zeit seit Systemstart in 1/1000 Sek
stopzeit=startzeit+1000; // eine Sek später

und dann anstelle von

for(i=0;i<=5000;i++)

ein

while (stopzeit > Gettime()) // Ausführen bis stopzeit erreicht

Gruß

mic

asuro_oli
21.02.2007, 21:40
Hi!

Danke für deine Antwort, hört sich gut an. Aber von der Funktion
Gettime() habe ich bis jetzt noch garnicht gehört. Benötige ich dafür eine spezielle Bibliothek oder so?

Gruß Oli

damaltor
21.02.2007, 21:45
Ja, du brauchst die aktuelle version der rn-Asuro-bibliothek. eine etwas ältere version (funktioniert aber) gibt es bei www.sourceforge.net da musst du dann einfach nach asuro suchen. oder in einem der aktuellen threads gibt es eine beta version der neuesten fassung.für den anfang mit dem asuro empfehle ich dir version 2.61 von sourceforge. einfach die beiden dateien asuro.c und asuro.h in das gleiche verzeichnis kopieren in dem dein quelltext ist. dadurch werden die originalen bibliotheken überschrieben. macht nix, im notfall sind die ja noch auf cd. dann kannst du ganz normal wieterarbeiten und die neuen funktionen einfach benutzen.

asuro_oli
21.02.2007, 21:51
Danke damaltor, das werde ich gleich mal ausprobieren.