Hallo
So scheint es halbwegs zu funktionieren. Allerdings dürften ein paar Segmentwechsel verlorengehen, weil wir die Seiten nacheinander prüfen(f-Schleife):
Die Warnungen sind nun auch weg, die Indexe waren char, unsigned char war richtig.Code:#include "asuro.h" // Konfigurationsdateien laden /* Funktionen definieren */ /* Geradeausfahren */ void GeradeAus(void) { unsigned char e,f,i,j; // Zähler unsigned int OdoData[2]; // Array für Odo Werte unsigned int save[5]; // Zwischenspeicher für Odo Wertereihe unsigned int wahr[2]; // Zähler unsigned int richtung[2]; // letze Flanke auf- oder absteigend? static unsigned int spd0=170; // Geschwindigkeit static unsigned int spd1=170; // Geschwindigkeit unsigned int n[2]; // Zähler for(e=0; e<10; e++) // Anzahl der Messungen die durchgeführt werden { for(f=0; f<2; f++) // Messung für links/rechts { wahr[f]=0; // Löschen nicht vergessen for(i=0; i<5; i++) // Fünf mal messen pro Variable { OdometrieData(OdoData); save[i]=OdoData[f]; if(i==4) // Wenn Array voll: Checken ob Ab oder Auf { for(j=0; j<4; j++) { if(richtung[f] && (save[i]<save[i+1])) // Werte aufsteigend? { wahr[f]++; } else if(!richtung[f] && (save[i]>save[i+1])) // Werte Abfallend? { wahr[f]++; } // if richtung } //j } // if i==4 } //i if(wahr[f]==5) // richtungwechsel fand statt wenn alle Werte auf/absteigend! { n[f]++; richtung[f]=!richtung[f]; //letzte Werterichtung merken } } //f } //e if (n[0] == n[1]) // bei Zählergleichstand { spd0=spd1=170; // starten wir neu n[0]=n[1]=0; } else if(n[0]<n[1]) // gleiches Spiel wie immer! { if(spd0<255) { spd0++; } else if(spd1>1) // aber nun vorsichtshalber mit Begrenzung { spd1--; } } else { if(spd1<255) { spd1++; } else if(spd0>1) { spd0--; } } MotorDir(FWD,FWD); MotorSpeed(spd0,spd1); } /* Beginn des Hauptprogramms */ int main (void){ Init(); //Prozessor initialisieren while(1) // Endlosschleife { GeradeAus(); } /* Schluss ! */ return 0; }
Gruß und gute Nacht
mic







Zitieren
Lesezeichen