PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ungewöhnliche Ausgabe eines Arrays



Hikh'var
27.11.2008, 11:00
Hallo,

ich habe für ein Schulprojekt ein Programm geschrieben, dass den Asuro eine Liniefolgen läßt und alle 200ms den Weg in 2 Arrays speichert. Eins für links eins für Rechts. Wenn diese Arrays voll sind hält der Asuro an und sendet die Werte paare zum Computer. Hier speicher ich sie in nem Textfile und lass dann mit einem Delphiprogramm die Linie nachzeichnen.

Leider sendet er nur nullen als Wegdifferenz beim Übertragen der Daten. Die Odometriesensoren laufen im Interuptbetrieb und funktionieren (wurde ausprobiert).

Nur in diesem Programm nicht. Aber hier mal der Code:



/* Linie folgen und aufzeichnen
* Programm fährt mittels helligkeitsdifferenz einer Linie nach
* und zeichnet diese mittels der Odometriesensoren auf
*/


#include "asuro.h"

void Linie(void);

int main(void)
{
int timevgl;
int i;
int k = 0;
int difr[200];
int difl[200];
int encoderalt[2];encoderalt[0] = 0;encoderalt[1] = 0;
int time = 0;
Init();
StatusLED(YELLOW);
EncoderInit();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
Linie(); //Linie folgen
timevgl = Gettime(); //Aktuelle Zeit holen
if (timevgl >= time + 200) //Wenn Zeitdifferenz größer 50ms -> speicher Wegdifferenz
{
MotorDir(FREE,FREE);
difl[k] = encoder[0] - encoderalt[0]; //Wegdifferenz
difr[k] = encoder[1] - encoderalt[1];
// PrintInt(difl[k]);SerPrint(" ");PrintInt(difr[k]);SerPrint(" ");PrintInt(k);SerPrint("\r\n");
encoderalt[0] = encoder[0];
encoderalt[1] = encoder[1];
k++; //Speicherzähler
time = timevgl;
}
if (k == 200) //Speicher voll
{
MotorDir(FREE,FREE); //Anhalten und an den Rechner übertragen
for(i=0; i<=199; i++)
{
PrintInt(difl[i]);SerPrint(" ");PrintInt(difr[i]);SerPrint(" ");PrintInt(i);SerPrint("\r\n");
}
k = 0;
}

}
return 0;
}

void Linie(void)
{
int lineData[2];
LineData(lineData);
if (lineData[0] > lineData[1]) //links ist heller -> Asuro fährt nach rechts
{
MotorDir(FWD,FREE);
MotorSpeed(135,65);
}
else if (lineData[0] < lineData[1]) //rechts ist heller -> Asuro fährt nach links
{
MotorDir(FREE, FWD);
MotorSpeed(65,135);
}
}



mfg Hikh

Ceos
27.11.2008, 11:20
du führst 2 mal MotorDir(FREE,FREE); aus ohne irgendwo die motoren auch wieder anfahren zu lassen

Hikh'var
27.11.2008, 11:25
Der Code ist vielleicht etwas unübersichtlich, aber das Ganze läuft in einer While-Schleife ab. Das MotorDir(Free,Free) hängt mit meinem Linienfolge code zusammen. Mein Asuro pendelt quasi auf der Linie hin und her. Die Motoren werden am Anfang der Schleife gestartet, sollen aber währen des Sendens oder des Speicherns anhalten, ansonsten Pendelt der Asuro zu weit von der Linie.