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
}