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?