sooo, hier unser finaler quellcode!
einige extras (z.b. Disco-funktion) haben wir zusätzlich noch eingebaut.
danke für die ganze hilfeCode:############################################################################################ ### - 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; }![]()
lg







Zitieren

Lesezeichen