ok danke euch allen,
mein asuro is mittlerweile da und zusammengebaut.
hab da programm noch mal überarbeitet!
hab das mit den strecken und der odometrie weggelassen dafür findet er die linie jetzt mit den photosensoren vorne.
außerdem kann er der linie entlagfahren auch wenn er nicht auf ihr gestartet wird.
hier der code:
es funktioniert!Code:#include "asuro.h" int main(void) { unsigned int data[2]; int diff; char Nummer; int Zahl; // Variablen deklarieren Init(); FrontLED(ON); // LiniensuchLED einschalten MotorDir(FWD,FWD); // Motor vorwärt Laufen lassen MotorSpeed(150,150); // mit mitlerer Geschwindigkeit diff=0; // Variable Null setzen while (diff<50) // Solage fortfahren bis ein Unterschied von mindestens 50 { // zwischen den Liniensensoren vorliegt LineData(data); diff = data [0]- data [1]; Sleep(255); // Zwischendurch Pausen machen um den Prozessor } // Nicht unnötig zu belasten Zahl=0; // Variable Null setzen while (Zahl<100) // Noch etwa eine 1/3 Sekunde weiterfahren, { // Sodass die Drehachse über der Linie liegt Sleep(216); Zahl++; } MotorDir(FWD,RWD); // Im Uhrzeigersinn drehen MotorSpeed(100,100); // Mit eher schwacher Motorleistung BackLED(ON,ON); // Rücklichter anschalten diff=0; // Variable Null setzen while (diff<50) // Drehen bis die Linie gefunden ist { LineData(data); diff = data [0]- data [1]; Sleep(255); } while(1){ // Endlosschleife StatusLED(GREEN); // StatusLED auf grün Schalten MotorDir(FWD,FWD); // Geradeaus fahren while(PollSwitch() < 4){ // Schleife: Bis ein Taster anstößt wird folgendes gemacht: LineData(data); // Liniensensoren auslesen if (data [0] > data [1] ) // Wenn der rechte Sensor dunkler ist {MotorSpeed(190,140);} // => linker Motor schneller fahren else // Sonst {MotorSpeed(140,190);} // => rechter Motor schneller fahren } StatusLED(RED); // StatusLED auf rot Schalten MotorSpeed(0,0); // Motoren stoppen Nummer=0; // Variable Null stzen while (Nummer<5) // schleife: Fünf mal folgendes machen: {Zahl=0; // Variable null setzen while (Zahl<100) // 0,3 Sekunden warten { Sleep(216); Zahl++; } Zahl=0; // Variable wieder Nul setzen BackLED(ON,OFF); // Linke BackLED anschalten, die rechte aus while (Zahl<100) // 0,3 Sekunden warten { Sleep(216); Zahl++; } BackLED(OFF,ON); // Jetzt rechte BackLED anschalten und die linke aus Nummer++;} // =>Die hinteren LEDs blinken abwechselnd Zahl=0; // fünf mal im 0,3 Sekundentakt MotorDir(RWD,RWD); // Rückwärts fahren MotorSpeed(100,100); // Langsam BackLED(ON,ON); // BackLEDs beide an while (Zahl<200) // 0,6 sek lang so weitermachen { Sleep(216); Zahl++; } MotorDir(FWD,RWD); // Im Uhrzeigersinn drehen MotorSpeed(100,100); // Nicht zu schnell! Zahl=0; // Variable null setzen while (Zahl<100) // Kurz warten um nicht die selbe Linie auf welcher { // Man steht zu registrieren Sleep(216); Zahl++; } diff=0; // Variable null stzen while (diff<50) // Schleife: Solange weiterdrehen bis ein Unterschied von { // mehr als 50 zwischen den beiden Liniensensoren ist LineData(data); diff = data [0]- data [1]; Sleep(255); } // Linie gefunden? Dann wieder hoch zur Endlosschleife } return 0; }







Zitieren

Lesezeichen