Mein jetzieges Programm sieht so aus: Allerdings Hört der Asuro danach nicht mehr aus das Rad zu drehen. Daran Knobele ich gerade.
PS: Ich habe den Asuro seid 6 Tagen und soll nächste Woche eine Präsentation vor 300 Leuten vortragen *aufgeregt*. vielleicht findet ja einem mal lust dran meine Präsentation durchzusehen. Ich schicke sie dann wenn sich wer meldet per E-mail zu aber ist nicht umbedingt nötig. also keine umstände.
Dankööö
Code://+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //----------------------------------------------------------------------- //---- Odomietrie Auslesen ------- 23.05.07 ------ --------- //---- Auslesen von Odomitrie Daten und Senden an eine Serielle --------- //---- Schnittstelle ---------------------------------------------------- //----------------------------------------------------------------------- #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 } i = 0; temp = 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 } ausgabe = 1; // ausgabe kriegt den Wert 0 return ausgabe; // gebe ausgabe zurück } //------------------------------------------------------------------------ // --------------- Hauptprogramm ----------------------------------------- //------------------------------------------------------------------------ int main(void) { Init(); // Initialisierung unsigned int zeahler; // Speicher bereitstellen unsigned int temp2; unsigned int wert; // Speicher bereitstellen unsigned 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; zeahler = 0; i = 0; while(i == 0) // Enslosschleife bis 1 != 1 { wert = Flanke_odo(); // wert ist genau so groß wie Flanke_odo zeahler = zeahler +1; if(PollSwitch()>0) i = 1; // wenn Tasta gedrückt gehe weiter } zuruek = zeahler; BCDaus (zeahler); // Lade Funktion BCDaus un übergebe den Wert i SerWrite(";",1); // Schreibe ein Leerzeichen while(zuruek > 0) { MotorDir(RWD,BREAK); MotorSpeed(120,120); BCDaus (zuruek); i = 0; // ausgabe kriegt den Wert 0 temp2 = 0; // temp kriegt den Wert 0 while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo2); // Lese Odometrie aus if (odo2[0]> temp2) temp2 =odo2[0]; // Wenn odo[0]> temp ist dann ist temp gleich genausogroß wie odo if ( temp2 > (odo2[0]+50)) i =1; // Wenn temp > als odo plus 50 ist dann ist i = 1 } zuruek = zuruek - 1; i = 0; temp2 = 1024; while (i == 0) // Enslosschleife bis i != 0 { OdometrieData(odo2); // Lese Odometrie aus if (odo2[0]< temp2) temp2 =odo2[0]; // Wenn odo[0]< temp ist dann ist temp gleich genausogroß wie odo if ( temp2 < (odo2[0]+50)) i =1; // Wenn temp < als odo plus 50 ist dann ist i = 1 } zuruek = zuruek - 1; } MotorDir(BREAK,BREAK); return 0; // Zurück zu 0 }







Zitieren

Lesezeichen