also kann ich assembler gleich mal vergessen ^^
Also ich habe nun Rolfs ablauf in eine unendliche schleife gepackt... und darunter auch eine die den Atmega am laufen hält, wenn er aus der ersten schleife ausbrechen sollte.
Jedoch spinnt er so genauso... hmmh.. sagen wir mal... sogar noch einwenig mehr ^^
Hier der geänderte code:
Code:
#include "asuro.h"
void erwarten(unsigned int 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");
//Rolfs ablaufchema in eine unendliche schleife setzen
while (1)
{
//Rolf wartet erstmal ab
erwarten(1);
//Rolf startet Kollusionsfahrt
collusion(10000);
//miau
RWARD();
Msleep(1000);
STOP();
}
//Rolfs durchdrehverhinderungsschleife
while (1);
return 0;
}
//Funktionen
//Rolf wartet auf etwas
void erwarten(unsigned int 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);
FrontLED(OFF);
}
//Rolf kollusionsprogramm
void collusion(unsigned int lang)
{
unsigned long zeit = 0;
unsigned long startzeit = Gettime();
unsigned char t1;
unsigned char t2;
while (zeit < (startzeit+lang)) //Fahre so lange wie zeit gegeben ist
{
zeit = Gettime();
t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0 && zeit < (startzeit+lang)) //Keine Taste gedrueckt, Rolf feahrt vorwaerts
{
FWARD(); //Auf gehts
}
else if (t1 && t2 && t1 == t2 && zeit < (startzeit+lang))
{
STOP(); //Stoppen
if (t1 & 0x07 && zeit < (startzeit+lang)) //Linke tasten beruehrt
{
RWDL(); //LinksRueckwaerts ausweichen
SerPrint("\r\n Hab links was beruehrt, weiche aus...\r\n");
}
if (t1 & 0x38 && zeit < (startzeit+lang)) //Rechte tasten beruehrt
{
RWDR(); //RechtsRueckwearts ausweichen
SerPrint("\r\n Hab rechts was beruehrt, weiche aus...\r\n");
}
Msleep(1000); //Eine Sekunde rueckwarts fahren
}
SerPrint("\r\nWiederhohle Schleife fuer Collisionsfahrt\r\n");
PrintLong(zeit);
}
STOP();
SerPrint("\r\nVerlasse Collisionsschleife.\r\n");
}
Er macht nur das was er soll wenn ich auf keinen taster drücke... warum bringen die taster alles durcheinander? Eine sehr sehr nervige angelegenheit.. grml
Gibt es noch eine möglichkeit, die rolf das machen lässt was man ihn auch vorschreibt?
Lesezeichen