Rolf Simulation-Programm Problem
Hallo :D
Ich hab meinen Asuro ROLF genannt ^^
Ich bin momentan dabei, ihn etwas leben einzuhauchen indem ich erm selbständig irgenetwas machen lasse, aber da das ganze noch in seinem anfangsstadium ist... und ich erst seit kurzem in C programmiere... ist mein Quellcode auch dementsprechend schlecht ^^
Ich möchte alles in funktionen aufteilen, die ich abrufen kann wann mir gerade lustig ist. Ich möchte auch später einen zufallsgenerator einbaun, der diese funktionen zu unterschiedlichen zeiten und zu unterschiedlichen längen ausführt. Um etwas Leben einzubringen ^^
Somit habe ich angefangen eine funktion zu schreiben die es Rolf erlaubt eine gewisse zeit auf Kollisionskurs zu gehen... nur scheinbar gibt es probleme mit der forschleife die kontrolliert, ob rolf noch rumspielen darf...
Der Wartemode (led rumblinken lassen) funktioniert noch :)
Vielleicht kann ich auch keine funktionen in funktionen einbinden, wie gesagt, kenn mich in C überhaupt nicht aus ^^
Hier ersteinmal der Code:
Code:
#include "asuro.h"
void erwarten(unsigned char male); //Rufe Wartemodus ab
void collusion(unsigned int lang); //Rufe Collusion ab
int main(void)
{
Init();
//Ab hier beginnt Rolf zu "Leben"
//Morgenmassage senden
SerPrint("\r\nMuah... muss ich aufstehen?\r\n");
//Rolf wartet erstmal ab
erwarten(1);
//Rolf startet Kollusionsfahrt
collusion(10000);
return 0;
}
//Funktionen
//Rolf wartet auf etwas
void erwarten(unsigned char male) {
unsigned int i;
for (i = 0; i <= male; i++)
{
Msleep(500);
StatusLED(GREEN);
Msleep(10);
BackLED (OFF, ON);
Msleep(500);
StatusLED(OFF);
Msleep(10);
BackLED (ON, OFF);
Msleep(500);
BackLED (OFF, ON);
Msleep(500);
BackLED (ON, OFF);
if (i == male) BackLED (OFF, OFF); //Schalte Alles ab wenn am ende
}
}
//Rolf vorwaerts
void FWARD(void)
{
FrontLED (ON); //Kuendige Anfahren an
Msleep(300);
FrontLED (OFF);
Msleep(150);
FrontLED (ON);
Msleep(300);
FrontLED (OFF);
MotorDir(FWD,RWD); //Beide Motoren vorwaerts
MotorSpeed(150,150); //Los gehts
}
//Rolf rueckwaerts
void RWARD(void)
{
MotorDir(RWD,FWD); //Beide Motoren rueckwearts
MotorSpeed(120,120); //Los gehts
}
//Rolf rueckwaerts links
void RWDL(void)
{
MotorDir(RWD,FWD); //Beide Motoren rueckwearts
MotorSpeed(120,0); //Los gehts
}
//Rolf rueckwaerts rechts
void RWDR(void)
{
MotorDir(RWD,FWD); //Beide Motoren rueckwearts
MotorSpeed(0,120); //Los gehts
}
//Rolf stoppen
void STOP(void)
{
MotorSpeed(0,0);
}
//Rolf kollusionsprogramm
void collusion(unsigned int lang)
{
unsigned char t1, t2;
unsigned long zeit;
t1 = PollSwitch();
t2 = PollSwitch();
for (zeit = Gettime(); zeit > zeit + lang;)
{
if (t1 == 0 && t2 == 0) //Keine Taste gedrueckt, Rolf feahrt vorwaerts
{
FWARD(); //Auf gehts
}
else if (t1 && t2 && t1 == t2)
{
STOP(); //Stoppen
if (t1 & 0x07) //Linke tasten beruehrt
{
RWDL(); //LinksRueckwaerts ausweichen
}
if (t1 & 0x38) //Rechte tasten beruehrt
{
RWDR(); //RechtsRueckwearts ausweichen
}
Msleep(1000); //Eine Sekunde rueckwarts fahren
}
}
}
Würde mich für Ratschläge wirklich freuen... da ich glaube auf keinen gescheiten Pfad zu kommen ^^
Mit freundlichen Güßen
Hardy
Re: Rolf Simulation-Programm Problem
Hallo Hardest,
das Problem liegt in Deiner for-Schleife begraben.
Die For-Schleife wird solange ausgeführt, wir die angegebene Bedingung erfüllt ist. Deine Bedingung
zeit > zeit + lang
ist nun aber leider NIE erfüllt, da immer gilt
zeit == zeit.
Wenn Du also - wie ich vermute - die Schleife solange ausführen willst, bis die als Parameter in die Funktion übergebene Zeitspanne überschritten ist mußt zum Beispiel folgende Konstruktion verwenden:
Code:
[...]
unsigned long startzeit = Gettime();
for ( zeit = Gettime(); zeit < startzeit + lang;)
{
[...]
}
Es gibt aber - wie immer - sicherlich noch 2 Milliarden andere Lösungsmöglichkeiten. :-k
Mag sein, dass es da noch weitere Probleme gibt, aber ich hab's nur überflogen.
Gruß
Burkhard