PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie Daten 2x abrufen



kmikesch
26.06.2011, 15:20
ich habe hier schonmal ein Thema gepostet: https://www.roboternetz.de/community/showthread.php?53665-Asuro-steigt-nicht-aus-while-schleife-aus&goto=newpost
dieses Thema hat sich erledigt, da jetzt alles funktioniert, doch ich würde jetzt gerne was in meinem jetztigen Programm ändern, ich würde gerne die zuerst gemessenen Odometriedaten nochmal verwenden ich müsste also wissen, wie das aussehen muss hier ist dan Programm,


#include "asuro.h"
#include "myasuro.h"

int main(void)
{
unsigned int odata[2];
unsigned int ldata[2]; // Speicherplatz für Odo- und Linedaten
int i;

Init();
FrontLED(ON); // Linienbeleuchtung einschalten
Msleep(200); // warten bis LED volle Helligkeit erreicht hat
LineData(ldata); // ADC anwärmen
while(1)
{
MotorDir(FWD,FWD);
while(PollSwitch() == 0) // folge der Linie bis zum ersten Hinderniss
{
LineData(ldata);
if (ldata [0] > ldata [1])
{
MotorSpeed(200,100);
}
else
{
MotorSpeed(100,200);
}
Sleep(20); // Regelung etwas dämpfen
}
MotorSpeed(0,0); // anhalten weil Hinderniss erkannt wurde
Msleep(500);

OdometrieData(odata); // Becherfarbe ermitteln
if (odata[0] > 1000)
{
for (i=0; i<20; i++) // Becher aufnehmen (Servoimpuls 20x senden)
{
BackLED(OFF,ON);
Msleep(1); // Impulslänge 1ms
BackLED(OFF,OFF);
Msleep(19); // Impulspause 19
}
MotorDir(RWD,RWD);
MotorSpeed(0,200); // hell bedeutet nach links abbiegen
}
else
{
for (i=0; i<20; i++) // Becher aufnehmen (Servoimpuls 20x senden)
{
BackLED(OFF,ON);
Msleep(1); // Impulslänge 1ms
BackLED(OFF,OFF);
Msleep(19); // Impulspause 19ms
}
MotorDir(RWD,RWD);
MotorSpeed(200,0); // dunkel bedeutet nach rechts abbiegen
}
Msleep(900); // eine Sekunde drehen
MotorSpeed(0,0);
MotorDir(FWD,FWD);

while(PollSwitch() == 0) // folge der Linie bis zum zweiten Hinderniss
{
LineData(ldata);
if (ldata [0] > ldata [1])
{
MotorSpeed(200,100);
}
else
{
MotorSpeed(100,200);
}
Sleep(20);
}

MotorSpeed(0,0); // nochmals anhalten
Msleep(500);

for (i=0; i<20; i++) // und Becher wieder ablegen
{
BackLED(OFF,ON);
Msleep(2); // Impulslänge 2ms
BackLED(OFF,OFF);
Msleep(18); // Prima!
}

OdometrieData(odata);

// HIER MUSS ICH WISSEN, WIE MAN DIE ZUVOR ERMITTELTEN DATEN NOCHMAL ABRUFEN KANN

if (odata[0] > 1000)
{
MotorDir(RWD,RWD);
MotorSpeed(200,200);
Msleep(500);
MotorDir(FWD,RWD);
MotorSpeed(200,200); // hell bedeutet nach links abbiegen
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(200,200);
Msleep(500);
MotorDir(RWD,FWD);
MotorSpeed(200,200); // dunkel bedeutet nach rechts abbiegen
}
Msleep(400); // eine Sekunde drehen
}
return(0);
}
Code-Tags verwenden ! (mod)

Sowie ich schon erfahren habe geht dass nur weiß ich eben nicht wie
Vielen Dank