Hallo
Mit der orginalen CD-Library des asuro und ohne gute C-Kenntnisse ist die Zeitmessung wohl nicht lösbar. Deshalb würde ich dir raten die Library zu tauschen. Obwohl es inzwischen die sehr umfangreiche Version v2.8 und auch die TinyLib gibt, rate ich Einsteigern eher zu Version v2.3:
asuroLib v2.3
Zum Installieren werden alle vorhandenen asuro.c und asuro.h durch die neuen Versionen aus dem Zip ersetzt.
Wesentliche Neuerungen gegenüber der CD-Version ist der 36kHz-Takt zur Zeitmessung mit Sleep(), die Ansteuerung der IR-Led und die Funktionen PrintInt() ubd Msleep().
Ebenfalls neu und für deine Zeitmessung gut geeignet ist die Funktion Gettime(). Sie liefert als 32-Bit-Wert die Anzahl der Millisekunden zurück, die seit dem Programmstart vergangen sind.
Zur Odometrieauswertung enthält sie zusätzlich die Funktionen Encoder_Init(), Encoder_Start(), Encoder_Stop() und Encoder_Set(int,int) zum Initialisieren, Starten, Stoppen und Setzen der Startwerte für die Odometriefunktion. Eine Anpassung an die Helligkeitswerte des asuro kann man in der Funktion SIGNAL (SIG_ADC) in asuro.c vornehmen. Die Zählung erfolgt interruptgesteuert im Hintergrund, die Zählwerte stehen dann jeweils in encoder[0] und encoder[1]. (Theoretisch, weil ich das selbst noch nie ausprobiert habe. :)
Wenn du nicht klarkommst, melde dich einfach nochmals. Ich kann's halt (wie immer) leider nicht selbst testen...
Gruß
mic
Edit:
Mit v2.3 würde ich es etwa so versuchen:
PHP-Code:
#include "asuro.h"
int left=0, right=0;
unsigned long time;
unsigned long time_left=0, time_right=0;
unsigned long temp_time_left=0, temp_time_right=0;
int main(void)
{
Init();
Encoder_Init();
Msleep(500);
while(1)
{
StatusLED(RED);
while((encoder[LEFT]==left) && (encoder[RIGHT]==right));
cli();
time=Gettime();
sei();
if(encoder[LEFT] != left)
{
cli();
left=encoder[0];
temp_time_left=time-time_left;
time_left=time;
sei();
StatusLED(GREEN);
SerWrite("/n/rLinks: ", 10);
PrintInt(left);
SerWrite(" ", 1);
PrintInt(temp_time_left & 0x7fff);
}
if(encoder[RIGHT] != right)
{
cli();
right=encoder[1];
temp_time_right=time-time_right;
time_right=time;
sei();
StatusLED(YELLOW);
SerWrite("/n/rRechts: ", 10);
PrintInt(right);
SerWrite(" ", 1);
PrintInt(temp_time_right & 0x7fff);
}
SerWrite("/n/r", 2);
}
return(0);
}
(ungetestet)
Lesezeichen