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
}
Lesezeichen