Ne, Kommentare ändern natürlich nichts an der Funktionsweise, aber sie helfen auch dir selbst dein eigenes Programm zu verstehen. Ich hab' mal versucht deine Gedanken in ein Programm zu packen:
PHP-Code:
#include "asuro.h"
#include "myasuro.h"
int main(void)
{
unsigned int data[2]; // Speicherplatz für Odo- und Linedaten
int i; // Integervariable zur freien Verwendung
Init();
FrontLED(ON); // Linienbeleuchtung einschalten
Sleep(255); // warten bis LED volle Helligkeit erreicht hat
LineData(data); // ADC anwärmen
while(1)
{
MotorSpeed(200,200); // und losfahren
while(PollSwitch() == 0) // folge der Linie bis zum ersten Hinderniss
{
LineData(data);
if (data [0] > data [1])
MotorSpeed(200,100);
else
MotorSpeed(100,200);
Sleep(100); // Regelung etwas dämpfen
}
MotorSpeed(0,0); // anhalten weil Hinderniss erkannt wurde
Msleep(500);
for (i=0; i<40; i++) // Becher aufnehmen (Servoimpuls 40x senden)
{
BackLED(OFF,ON);
Msleep(1); // Impulslänge 1ms
BackLED(OFF,OFF);
Msleep(19); // Impulspause 19ms
}
OdometrieData(data); // Becherfarbe ermitteln
if (data[0] > 500)
{
MotorSpeed(0,200); // hell bedeutet nach links abbiegen
StatusLED(YELLOW);
}
else
{
MotorSpeed(200,0); // dunkel bedeutet nach rechts abbiegen
StatusLED(RED);
}
Msleep(1000); // eine Sekunde drehen
StatusLED(GREEN); //fertig
MotorSpeed(200,200); // weiterfahren (und hoffen, dass die Linie noch da ist ;)
while(PollSwitch() == 0) // folge der Linie bis zum zweiten Hinderniss
{
LineData(data);
if (data [0] > data [1])
MotorSpeed(200,100);
else
MotorSpeed(100,200);
Sleep(100);
}
MotorSpeed(0,0); // nochmals anhalten
Msleep(500);
for (i=0; i<40; i++) // und Becher wieder ablegen
{
BackLED(OFF,ON);
Msleep(2); // Impulslänge 2ms
BackLED(OFF,OFF);
Msleep(18); // Prima!
}
// Vermutlich sollten wir jetzt nochmals drehen. Da wir aber vergessen haben,
// welche Farbe der Becher hatte, wissen wir nicht, wohin wir drehen sollen ;)
}
return(0);
}
Allerdings kann ich nicht sagen, ob das so funktioniert.
Schicker Greifer. Irgendwo habe ich den auch schon mal gesehen ;)
Gruß
mic
Edit: Ich vermute, hell und dunkel für die Becherfarbe sind vertauscht...
Lesezeichen