Hallo alle zusammen,
ich habe ein Problem mit einem Asuro-Programm. Eigentlich soll der Asuro eine linie lang fahren, dann gegen einen Gegenstand fahren, eine Reifenumdrehung zurück fahren und wieder von vorne.
Sobald ich die Taster drükce, stellen die Motore nicht auf REW, sondern
die Status-Led leuchtet rot auf, und die Motoren tuen so lange nichts, bis man die Taster wieder los lässt. Dann bleibt die Status LED auf Rot und werdn nicht Grün, d.h., das Programm ist irgendwo im unteren Teil "gefangen", da die Status-LED nicht wieder Grün werden, woraus sich folgernlässt, dass das Programm nicht nach "oben" kommt. Zudem laufen die Motoren wieder vorwärts weiter und nicht für eine Reifenumdrehung rückwärts.

Hier mein Programm:
Code:
#include "asuro.h"				//P//LINIENVERFOLGUNG
#define LINIENWERT				//D//
//folgende werte müssen ggf.
//verändert werden!!!
#define SCHWELLENWERT 600		//D//GRENZE ZWISCHEN HELL UND DUNKEL FESTLEGEN
#define HYSTERSIS 10			//D//WERT ZUR VORBEUGUNG VON STÖRUNGEN
//die hier nicht mehr!!!
#define LOW 0					//D//-}\WERTE ZUR ÜBERPRÜFUNG, OB SCHON EIN
#define HIGH 1					//D//-}/WECHSEL STATTGEFUNDEN HAT, FESTLEGEN
int main(void)					//V//PROZESSOR IN GRUNDZUSTAND VERSETZEN
{
unsigned int status[2]={0,0};	//V//SPEICHER FÜR "HAT WECHSEL STSTTGEFUNDEN?"
unsigned int odata[2];			//V//SPEICHER FÜR GEBERSCHEIBENZUSTAND
unsigned int counter[2]={0,0};	//V//SPEICHER ZUM ZÄHLEN DER GEBERSCHEIBEN-IMPULSE
unsigned int ldata[2];			//V//SPEICHER FÜR LINIENFOLGE BEREITSTELLEN
unsigned char t1;				//V//SPEICHER FÜR KOLLISIONSTASTER BEREITSTELLEN
unsigned char t2;				//V//VERGLEICHSSPEICHER FÜR KOLLISIONSTASTER BEREITSTELLEN
Init();							//S//START DES PROGRAMMS
  StatusLED(GREEN);				//A//STATUS-LED AUF GRÜN
  FrontLED(ON);						//A//LINIENFOLGE-LED AN
  MotorDir(FWD,FWD);				//A//MOTOREN AUF VOR 

	while(1)							//E//ENDLOSSCHLEIFE:
	{
	t1=PollSwitch();					//A//TASTENABFRAGE
	t2=PollSwitch();					//A//VERGLEICHSTASTENABFRAGE

		if(t1==t2&&t1==0)					//?//WENN KEINE TASTE GEDRÜCKT
			{								//!//(MIT VERGLEICH MIT t2 ZUR SICHERSTELLUNG DER RICHTIGKEIT t2s)
			LineData(ldata);					//://LINIENFOLGE-DATEN EINLESEN
				if(ldata[0]>ldata[1])				//:?/WENN LINKS HELLER ALS RECHTS,
					{MotorDir(FWD,FWD);					//://BEIDE MOTOREN AUF VORWÄRTS
					MotorSpeed(150,0);}					//://LINKS MEHR GAS
				else								//:?/SONST:
					{MotorDir(FWD,FWD);					//://BEIDE MOTOREN AUF VORWÄRTS
					MotorSpeed(0,150);}					//://RECHTS MEHR GAS
			}											//://KOLLISIONANWEISUNG SCHLIEßEN
			
		else{								//!?/wENN KOLLISION
			MotorSpeed(0,0);					//!//MOTOREN ANHALTEN
			MotorDir(RWD,RWD);					//!//MOTOREN AUF RÜCKWÄRTS
			StatusLED(RED);
			LineData(ldata);					//!//LINIENFOLGE-DATEN EINLESEN

			while(counter[0]<40)					//!//SOLANGE DURCHFÜHREN,BIS COUNTER 40 IMPULSE
				{								//!// 40 IMPULSE ANALOG 1REIFENUMDREHUNG ERREICHT HAT
				OdometrieData(odata);				//!//ODOMETRIEWERTE EINLESEN

					if(status[0]==LOW&&odata[0]>SCHWELLENWERT+HYSTERSIS)
														//!//HAT WECHSEL DER GEBERSCHEIBENFARBE
						{								//!//VON SCHWARZ AUF WEIß STATTGEFUNDEN ???
						counter[0]++;
						MotorDir(RWD,RWD);
						MotorSpeed(150,150);
						}											//!//WECHSEL?-ANWEISUNG SCHLIEßEN

					if(status[0]==HIGH&&odata[0]<SCHWELLENWERT-HYSTERSIS)
														//!//HAT WECHSEL DER GEBERSCHEIBENFARBE
						{								//!//VON WEIß AUF SCHWARZ STATTGEFUNDEN ???	
						counter[0]++;						//!//ZÄHLER EINEN IMPULS HOCHSETZEN
						MotorDir(RWD,RWD);
						MotorSpeed(150,150);
						}									//!//WECHSEL?-ANWEISUNG SCHLIEßEN
				}								//!//counter-anweisung geschlossen, wenn counter<40 ist,
												//!//kehre zu while(counter<40) zurück, ansonsten mache
												//!// in Reihenfolge weiter
			}								//!//WENN KOLLISION-ANWEISUNG ZU ENDE
	}									////Wieder von vorne, ENDE ENDLOSSCHLEIFE
return 0;						////return(0)
}								////PROGRAMM ENDE
Dadurch, dass ich die "while(counter...){}"-Schleife durch "StatusLED(RED)" ersetzt habe, und dies ging, kann man folgern, das der Fehler hier irbendwo liegt:

Code:
else{								//!?/wENN KOLLISION
			MotorSpeed(0,0);					//!//MOTOREN ANHALTEN
			MotorDir(RWD,RWD);					//!//MOTOREN AUF RÜCKWÄRTS
			StatusLED(RED);
			LineData(ldata);					//!//LINIENFOLGE-DATEN EINLESEN

			while(counter[0]<40)					//!//SOLANGE DURCHFÜHREN,BIS COUNTER 40 IMPULSE
				{								//!// 40 IMPULSE ANALOG 1REIFENUMDREHUNG ERREICHT HAT
				OdometrieData(odata);				//!//ODOMETRIEWERTE EINLESEN

					if(status[0]==LOW&&odata[0]>SCHWELLENWERT+HYSTERSIS)
														//!//HAT WECHSEL DER GEBERSCHEIBENFARBE
						{								//!//VON SCHWARZ AUF WEIß STATTGEFUNDEN ???
						counter[0]++;
						MotorDir(RWD,RWD);
						MotorSpeed(150,150);
						}											//!//WECHSEL?-ANWEISUNG SCHLIEßEN

					if(status[0]==HIGH&&odata[0]<SCHWELLENWERT-HYSTERSIS)
														//!//HAT WECHSEL DER GEBERSCHEIBENFARBE
						{								//!//VON WEIß AUF SCHWARZ STATTGEFUNDEN ???	
						counter[0]++;						//!//ZÄHLER EINEN IMPULS HOCHSETZEN
						MotorDir(RWD,RWD);
						MotorSpeed(150,150);
						}									//!//WECHSEL?-ANWEISUNG SCHLIEßEN
				}								//!//counter-anweisung geschlossen, wenn counter<40 ist,
												//!//kehre zu while(counter<40) zurück, ansonsten mache
												//!// in Reihenfolge weiter
			}								//!//WENN KOLLISION-ANWEISUNG ZU ENDE
Nur finde ich diesen nicht.
Kann mir vielleicht jemand helfen???

Danke schonmal im voraus,
C-3PO

PS: Ich habe auch irgendwie eben in dem Programmers notepad Fenster aus versehen die fehleranzeig weggecklickt und weiß nicht wie ich es wiederbekommen soll. Kann mir da auch irgendwer helfen???