OK ich habe das mal versucht. Ich wollte die Odometrie und die Ausgabe als Funktion machen. Jetzt kommen aber fehler.
Code:test.c:88: warning: implicit declaration of function 'Odometrie' test.c:112: warning: implicit declaration of function 'Ausgabe' test.c: At top level: test.c:361: warning: conflicting types for 'Odometrie' test.c:88: warning: previous implicit declaration of 'Odometrie' was here test.c:392: warning: conflicting types for 'Ausgabe' test.c:112: warning: previous implicit declaration of 'Ausgabe' was here
Wo müssen die Funktionen hin?Code:#include <asuro.h> #include <string.h> // für strlen /*Left min/max, right min/max values da minimiert auf acht bit *4 +00150 *4 = 600 744 //data[0] left +00222 *4 = 888 798 +00190 *4 = 760 852 //data[1] right +00236 *4 = 944 */ //Statische Vergabe #define Triggerlevel 798 #define Hysteresis 25 #define LOW 0 #define HIGH 1 //Variablenverageb int speed; //PWM des Rades float cmsleft; //Metre pro Sekunde (Radgeschwindigkeit links float cmsright; //Metre pro Sekunde (Radgeschwindigkeit rechts float cmsleft1; // Vorherige Geschwindigkeit (für a) float cmsright1; // Vorherige Geschwindigkeit (für a) float cmleft; //Gefahrene Strecke links float cmright; //Gefahrene Strecke rechts float aleft; //Beschleunigung linkes Rad float aright; //Beschleunigung rechtes Rad unsigned int data [2]; //Array erstellen mit 2 Speicherzellen für Odometriedaten //data [0] links T11 //data [1] rechts T12 signed int status[2]={0,0}; int Zeit = 1000; //Zeit in der die Impulse gezählt werden 1s int Zeit1 = 0; //letzte Zeit zur bestimmung der Zeit dif (für a) int leftimpuls = 0; //gezählte Impulse pro Zeit links int rightimpuls = 0; //gezählte Impulse pro Zeit rechts unsigned int long stopzeit; int anzahldercodescheibensegmente_umfang = 1; //Breite eines Segmentes //----------------------------------------------------------------------------- int main(void) { BackLED(OFF,OFF); //alle LED werden im Programm zur Veranschaulichung genutzt StatusLED(RED); //d.h. wo bin ich im Prog. die Backeled´s sind aus da Odometrie an Init(); while(1){ //----------------------------------------------------------------------------- //Intro für Hyperterminal //----------------------------------------------------------------------------- SerPrint("\t Telemetriedaten\n\r\n\r"); //Überschrift im Hyperterminal für Vorwärts SerPrint("\tVorwärts\n\r\n\r"); //----------------------------------------------------------------------------- //Los gehts beschleunigen //----------------------------------------------------------------------------- MotorDir(FWD,FWD); //Richtung festlegen Zeit1 = 0 ; //muss vor der Schleife genullt werden fals nioch restwert aus letzter Schleife cmsright1 = 0; cmsleft1 = 0; FrontLED(ON); for (speed=80;speed>245;speed +=10){ //Geschwindigkeit von 80 auf 255 in 10er schritten MotorSpeed(speed,speed); //Geschwindigkeit einlesen StatusLED(RED); leftimpuls = 0; //Impullse vor Zählvorgang auf null rightimpuls = 0; //Impullse vor Zählvorgang auf null //Detektierung der Impulse stopzeit=Gettime()+Zeit; //1 sekunde Hell Dunkel Wechsel detektieren Odometrie(); //Auswertung der Impulse //Zurückgelegter Weg cmright = ((rightimpuls / anzahldercodescheibensegmente_umfang)/5); // /5 da Übersetzungsverhältniss 1/5 cmleft = ((leftimpuls / anzahldercodescheibensegmente_umfang)/ 5 ); //Geschwindigkeit cmsright = cmright * (Zeit/1000); cmsleft = cmleft * (Zeit/1000); //da ms //Beschleunigung aright = (cmsright-cmsright1) / (Zeit-Zeit1); aleft = (cmsleft-cmsleft1) / (Zeit-Zeit1); Zeit1 = Zeit; //jetzige Zeit Zwischenspeichern für a beim nächsen turn cmsright1 = cmsright; //jetzige Geschwindigkeit Zwischenspeichern für a beim nächsen turn cmsleft1 = cmsleft; //jetzige Geschwindigkeit Zwischenspeichern für a beim nächsen turn //Ausgabe Ausgabe(); } } MotorSpeed(0,0); return 0;} void Odometrie (void){ do { OdometrieData(data); //Odo daten bereitstellen //Wechselt linker Sensor von niedrig auf hoch? if((status[0]==LOW)&&(data[0]>Triggerlevel+Hysteresis)){ status[0] = HIGH; leftimpuls++;} //Wechselt linker Sensor von hoch auf niedrig? if((status[0]==HIGH)&&(data[0]<Triggerlevel-Hysteresis)){ status[0] = LOW ; leftimpuls++;} //Wechselt rechter Sensor von niedrig auf hoch? if((status[1]==LOW)&&(data[1]>Triggerlevel+Hysteresis)){ status[1] = HIGH; StatusLED(RED); rightimpuls++; } //Wechselt rechter Sensor von hoch auf niedrig? if((status[1]==HIGH)&&(data[1]<Triggerlevel-Hysteresis)){ status[1] = LOW; rightimpuls++; } } while (stopzeit>Gettime()); return;} //das ganze bis Zeit um (1s) void Ausgabe (void){ //Ausgabe //rechtes SerPrint("Rechtes Rad "); PrintFloat(cmright,2,2); SerPrint (" cm "); PrintFloat(cmsright,2,2); SerPrint(" cm/s" ); PrintFloat(aright,2,2); SerPrint(" cm/s²"); //Lehrstellen zwischen rechts und links SerPrint(" - "); //links SerPrint("Linkes Rad "); PrintFloat(cmleft,2,2); SerPrint (" cm "); PrintFloat(cmsleft,2,2); SerPrint(" cm/s "); PrintFloat(aleft,2,2); SerPrint(" cm/s²"); //2*absatz SerPrint("\n\r\n\r"); return;}







Zitieren
Lesezeichen