Juhuu,
nach langem hin und her grübeln habe ich nun endlich das Programm völlig fertig! Danke allen die mir Denkanstöße gegeben habe. Für alle die Es interessiert wie man so etwas macht (was ich machen sollte s.o.) dann findet er den Code drei zeilen unrt dieser Zeile
![]()
Code://+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //----------------------------------------------------------------------- //---- Odomietrie Auslesen ------- 05.06.07 ------ Jannik Mewes --------- //---- Auslesen von Odomitrie Daten und Senden an eine Serielle --------- //---- Schnittstelle. Korektur des Reifens. ----------------------------- //----------------------------------------------------------------------- #include "asuro.h" //----------------------------------------------------------------------- //--- BCDaus ------- 23.5.07 --- Jannik Mewes --------------------------- //--- Ausgabe einer integer Zahl in Ascii über die serielle ------------- //--- Schnittstelle ----------------------------------------------------- //----------------------------------------------------------------------- void BCDaus(unsigned int data) // Anfang der Funktion { unsigned int (Zahl1); // Definiere Variable Zahl1 unsigned int (Zahl2); // Definiere Variable Zahl2 unsigned int (Zahl3); // Definiere Variable Zahl3 unsigned int (Zahl4); // Definiere Variable Zahl4 Zahl1 = data ; // Zahl1 hat den gleichen Wert wie data Zahl1 = Zahl1 / 1000; // Wert von Zahl1 geteilt durch 1000 data = data - Zahl1 * 1000; // Wert von data minus Wert on Zahl1 mal 1000 Zahl1 = Zahl1 + 48; // Wert von Zahl1 plus 48 SerWrite(&Zahl1,1); // Schreibe wert von Zahl1 an IR Sender Zahl2 = data; // Zahl2 hat den gleichen Wert wie data Zahl2 = Zahl2 / 100; // Wert von Zahl2 geteilt durch 100 data = data - Zahl2 * 100; // Wert von data minus Wert on Zahl2 mal 100 Zahl2 = Zahl2 + 48; // Wert von Zahl2 plus 48 SerWrite(&Zahl2,1); // Schreibe wert von Zahl2 an IR Sender Zahl3 = data; // Zahl3 hat den gleichen Wert wie data Zahl3 = Zahl3 / 10; // Wert von Zahl3 geteilt durch 10 data = data - Zahl3 * 10; // Wert von data minus Wert on Zahl3 mal 10 Zahl3 = Zahl3 + 48; // Wert von Zahl3 plus 48 SerWrite(&Zahl3,1); // Schreibe wert von Zahl3 an IR Sender Zahl4 = data; // Zahl4 hat den gleichen Wert wie data Zahl4 = Zahl4 / 1; // Wert von Zahl4 geteilt durch 1 Zahl4 = Zahl4 + 48; // Wert von Zahl4 plus 48 SerWrite(&Zahl4,1); // Schreibe wert von Zahl4 an IR Sender } //----------------------------------------------------------------------- //--- Pulserkennnung ------- 30.5.07 --- Jannik Mewes ------------------- //--- Ausgabe einer 1 bei odometriepuls über RS232 --------------------- //----------------------------------------------------------------------- unsigned int Flanke_odo (void) // Anfang der Funktion { unsigned int (ausgabe); // Definiere Variable Zahl1 unsigned int odo[2]; // Speicher bereitstellen unsigned int (temp); // Speicher bereitstellen unsigned int (i); // Speicher bereitstellen ausgabe = 0; // ausgabe kriegt den Wert 0 i = 0; // ausgabe kriegt den Wert 0 temp = 0; // temp kriegt den Wert 0 while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo); // Lese Odometrie aus if (odo[0]> temp) temp =odo[0]; // Wenn odo[0]> temp ist dann ist temp gleich genausogroß wie odo if ( temp > (odo[0]+50)) i =1; // Wenn temp > als odo plus 50 ist dann ist i = 1 if(PollSwitch()>0) goto rollen; // wenn Tasta gedrückt gehe weiter zu rollen } i = 0; // i kriegt den Wert 0 temp = 1024; // temp kriegt den Wert 1024 while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo); // Lese Odometrie aus if (odo[0]< temp) temp =odo[0]; // Wenn odo[0]< temp ist dann ist temp gleich genausogroß wie odo if ( temp < (odo[0]+50)) i =1; // Wenn temp < als odo plus 50 ist dann ist i = 1 } rollen: ausgabe = 1; // ausgabe kriegt den Wert 0 return ausgabe; // gebe ausgabe zurück } //------------------------------------------------------------------------ // --------------- Hauptprogramm ----------------------------------------- //------------------------------------------------------------------------ int main(void) { Init(); // Initialisierung int zeahler; // Speicher bereitstellen unsigned int temp2; unsigned int wert; // Speicher bereitstellen int zuruek; // Speicher bereitstellen unsigned int odo2[2]; // Speicher bereitstellen int i; // Speicher bereitstellen StatusLED(GREEN); // StatusLED auf Grün schalten BackLED(OFF,OFF); // BackLED´s auf aus zuruek = 0; // zuruek kriegt den Wert 0 zeahler = 0; // zeahler kriegt den Wert 0 i = 0; while(i == 0) // Enslosschleife bis 1 != 1 { wert = Flanke_odo(); // wert ist genau so groß wie Flanke_odo zeahler = zeahler +1; // Rechne zeahler + 1 if(PollSwitch()>0) i = 1; // wenn Tasta gedrückt gehe weiter } zuruek = zeahler; // zuruek hat den gleichen Wert wie zeahler BCDaus (zeahler); // Lade Funktion BCDaus un übergebe den Wert i SerWrite(";",1); // Schreibe ein Kommer while(zuruek > 0) // Enslosschleife bis i zuruek > 0 { MotorDir(RWD,BREAK); // Motorrichtung linker Reifen Stopp rechter Reifen Rückwerts MotorSpeed(120,120); // Motorspeed auf die Hälfte der maximalen Leistung i = 0; // ausgabe kriegt den Wert 0 temp2 = 0; // temp2 kriegt den Wert 0 while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo2); // Lese Odometrie aus if (odo2[0]> temp2) temp2 =odo2[0]; // Wenn odo2[0]> temp2 ist dann ist temp2 gleich genausogroß wie odo if ( temp2 > (odo2[0]+50)) i =1; // Wenn temp2 > als odo2 plus 50 ist dann ist i = 1 } i = 0; // i kriegt den Wert 0 temp2 = 1024; // temp2 kriegt den Wert 1024 while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo2); // Lese Odometrie aus if (odo2[0]< temp2) temp2 =odo2[0]; // Wenn odo2[0]< temp2 ist dann ist temp2 gleich genausogroß wie odo if ( temp2 < (odo2[0]+50)) i =1; // Wenn temp2 < als odo2 plus 50 ist dann ist i = 1 } zuruek = zuruek - 1; // zuruek - 1 } MotorDir(BREAK,BREAK); return 0; // Zurück zu 0 }







Zitieren

Lesezeichen