sooo, hier unser finaler quellcode!
einige extras (z.b. Disco-funktion) haben wir zusätzlich noch eingebaut.
Code:
############################################################################################
### - FloBa Productions Inc. proudly presents: ASURO Parcourprogramm - ###
### - Ausgelegt für Parcours mit rechten Winkeln - ###
### - Asuro sollte auf einer hellen Fläche fahren um Ziellinie zu erkennen - ###
### - Programm zur öffentlichen Verwendung, Missbrauch* wird geahndet - ###
### - * zum Beispiel schlechte Kritik - ###
### - Fehler sind ausschliesslich auf Hardware und Batterie zurückzuführen - ###
### - Viel Vergnügen beim Spielspass wünscht das Asuro-Care-Team - ###
############################################################################################
#include "asuro.h"
#define FULL_L 200
#define FULL_R 202
volatile unsigned int i;
void Fahren(void) /* Vorwärts fahren */
{
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
void Anhalten(void) /* Anhalten */
{
StatusLED(RED);
BackLED(OFF,OFF);
MotorDir(BREAK,BREAK);
}
void Zurueck(void) /* Zurück fahren */
{
StatusLED(YELLOW);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
void KurveLR(void) /* Kurve rückwärts Links */
{
StatusLED(YELLOW);
BackLED(ON,OFF);
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
void KurveRR(void) /* Kurve rückwärts Rechts */
{
StatusLED(YELLOW);
BackLED(OFF,ON);
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
void KurveRF(void) /* Kurve vorwärts Rechts */
{
StatusLED(YELLOW);
BackLED(OFF,OFF);
MotorDir(BREAK,FWD);
MotorSpeed(0,FULL_R);
}
void Firstcol(void) /* Programm Rechtskurve im Parcour 1. Kollision */
{
Anhalten();
Msleep(250);
Zurueck();
Msleep(15);
Anhalten();
Msleep(10);
KurveRR();
Msleep(400);
Anhalten();
Msleep(250);
switched = 0;
StartSwitch ();
}
void Secondcol(void) /* Programm Linkskurve im Parcour, 2. Kollision */
{
Anhalten();
Msleep(250);
Zurueck();
Msleep(10);
Anhalten();
Msleep(250);
KurveLR();
Msleep(355);
Anhalten();
Msleep(250);
KurveRF();
Msleep(355);
Anhalten();
Msleep(250);
switched = 0;
StartSwitch();
}
void Thirdcol(void) /* Programm Sackgasse im Parcour, 3. Kollision */
{
Anhalten();
Msleep(250);
Zurueck();
Msleep(10);
KurveLR();
Msleep(310);
Anhalten();
Msleep(250);
switched = 0;
StartSwitch();
}
void Disco(void) /* PARTYTIME! -15mal blinken/piepsen-*/
{
for(i = 0; i < 16; i++)
{
MotorDir(FWD,FWD);
MotorSpeed(50,50);
BackLED(OFF,OFF);
StatusLED(OFF);
FrontLED(OFF);
Msleep(200);
MotorDir(BREAK,BREAK);
BackLED(ON,ON);
StatusLED(RED);
FrontLED(ON);
Msleep(200);
}
}
int main (void) /* Hauptprogrammbeginn */
{
unsigned int data[2]; /* Speicherplpatz für Helligkeitswert */
unsigned int Summe;
Init ();
switched = 0; /* Kollisionserkennung auf 0 setzen */
StartSwitch (); /* Taster-Interrupt aktivieren */
FrontLED(ON);
LineData(data); /* Speichern von Helligkeitswert in data[0,1] */
Summe = data[0]+data[1]; /* Summe der Werte beider Fototransistoren */
while (1)
{
if (switched == 1) /* Wenn 1. Kollision, dann Rechtskurve 90° aus */
{
Firstcol();
for(i = 0; i < 25000; i++) /* Setze Zeitschlaufe für 2. Kollision */
{
if (switched == 1) /* Wenn 2. Kollision, dann Drehung 180° */
{
Secondcol();
for(i = 0; i < 25000; i++) /* Setze Zeitschlaufe für dritte Kollision */
{
if (switched == 1) /* Wenn 3. Kollision, dann Linksdrehung 90° */
{
Thirdcol();
}
else /* Keine 3. Kollision, Fahre normal */
{
Fahren();
}
}
}
else /* Keine 2. Kollision, Fahre normal */
{
Fahren();
}
}
}
else /* gar keine Kollision, Fahre normal, Stopp bei Linie */
{
LineData(data);
if(data[0]+data[1]+10 > Summe) /* Untergrundhelligkeitsdifferenz feststellen */
{
Fahren();
}
else
{
Disco(); /* Party gut - Alles gut */
while(1)
{} /* Endlosschleife - Ende des Programmes */
}
}
}
return 0;
}
danke für die ganze hilfe 
lg
Lesezeichen