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