Hallo allerseits!
Gleich vorweg: Ich bin ein absoluter Versager im Programmieren!
Ich will es unbedingt verstehen, aber sobald es ein bisschen tiefer geht, kommt bei mir nur noch Bahnhof an. Alle schmeißen dann mit ihren Fachbegriffen um sich, von denen ich 0,1% kenne und folglich trotzdem nicht schlauer werde.
Ich bin gerade dabei ein Programm zu einem Parcours zu schreiben,
mein Linienverfolgungsprogramm ist aber so simpel, dass engere Kurven ein Glücksspiel sind und der Asuro extrem ruckelt beim Linienverfolgen.
Ich habe mir sagen lassen, dass dem mit einem PID-Regler Abhilfe geschaffen werden kann.
Ist vielleicht jemand bereit mir (der Niete) zu helfen?
Damit meine ich erklären und nicht einfach irgend ein Programm zu geben!
Naja hier erst mal mein bisheriges Programm, um einen Einblick zu erhalten:
Code:
unsigned int LichtS[2]; //Array für Sensoren
int Differenz ;
Differenz = LichtS[0]-LichtS[1]
void LinieFolgen(void){ //Prozedur zur Linienverfolgung
if(Differenz<-4){ // wenn die Differenz negativ ist, ist es rechts heller, also nach links lenken
MotorDir(FWD, FWD);
MotorSpeed(150, 0);
}
else if(Differenz>4){ //wenn die Differenz positiv ist, ist es links heller, also nach rechts lenken
MotorDir(FWD, FWD);
MotorSpeed(0, 150);
}
else{ //ansonsten geradeaus fahren
MotorDir(FWD, FWD);
MotorSpeed(150, 150);
}
}
int main(void){
Init(); // zwingend, sonst weiß CPU nicht wo was angesteuert wird
unsigned char Taster1;
unsigned char Taster2;
while(1) { // endlos, weil Bedingung immer "wahr" ist
FrontLED(ON);
Msleep(10);
void LineData(LichtS); //Helligkeitswerte einlesen
FrontLED(OFF);
LinieFolgen();
Taster1 = PollSwitch() ; //Tasterwerte abfragen
Msleep(10) ;
Taster2 = PollSwitch(); //Tasterwerte überprüfen
if(0<Taster1&&0<Taster2){ //wenn Asuro gegen ein Hindernis fährt dann umfahren
EncoderInit();
MotorSpeed(BREAK, BREAK); //Asuro stoppt und fährt ein Stück zurück
Msleep(10);
MotorDir(RWD, RWD);
MotorSpeed(100, 100);
Msleep(100);
Turn(90, 150); //Umfahren
Go(90, 150);
Turn(90, 150);
Go(50, 150);
Turn(35,150);
while(LichtS[0]>70){ //so lange geradeaus fahren bis schwarze Linie kommt ( 70=WertDunkel)
void LineData(LichtS);
MotorDir(FWD, FWD);
MotorSpeed(150, 150);
}
}
}
return 0; // hier her kommt das Programm niemals (darf es auch nicht)
}
Ich hoffe auf Meldungen
E-lois
Lesezeichen