hi leute
ich bin echt am verzweifeln hab nur noch eine woche und es klappt einfach nicht wie ich es möchte...

hab das Programm von oben um einiges erleichtert...denke ich

aber es funktioniert immernoch nicht

ich habe es jetzt mit dem SerRead gemacht aber ich verstehe nicht genau wie das funktioniert, kann mir da jemand pls helfen
die funktion heißt ja:
SerRead(&cmd,1,0xFFFE);
was bedeutet hier das &cmd und das 0xFFFE?

und wenn der knopf auf der tastatur gedrückt wurde, soll der asuro ja die ganze zeit dieentsprechende funktion ausführen, muss ich da dann noch eine while schleife reinbauen, denn sonst macht er die funktion ja nur einmal bis das nächste zeichen kommt

und was für werte soll ich für hell bzw. für dunkel einstellen
was für zahlen ungefähr? also ist 100 noch einigermaßen hell oder schon dunkel

hier nochmal der neue code, bitte bitte helft mir

Code:
#include "asuro.h"
#include "asuro.c"
#include <stdlib.h>

#define SPEED  0x8F
#define LEFT_KEY  'a'   // a links abbiegen
#define MIDDLE_KEY 's'  // s mittig halten
#define RIGHT_KEY 'd'   // d rechts abbiegen



unsigned int data[2];

volatile unsigned char switchPressed;


SIGNAL (SIG_INTERRUPT1)
{
	unsigned int i;

	DDRD |= SWITCHES;				// Switches as Output
	SWITCH_ON;						// Output HIGH for measurement
	ADMUX = (1 << REFS0) | SWITCH;	// AVCC reference with external capacitor
	for (i = 0; i < 0xFE; i++);

	ADCSRA |= (1 << ADSC);			// Start conversion
	while (!(ADCSRA & (1 << ADIF)));	// wait for conversion complete
	ADCSRA |= (1 << ADIF);			// clear ADCIF
	i = ADCL + (ADCH << 8);

	// und ab gehts --- fahr zurück
	MotorDir(RWD,RWD);
	MotorSpeed(200,200);
	FrontLED(ON);
	BackLED(ON,ON);
	for (i = 0; i < 0xFFFD; i++);   // Sleep does not work here

	switchPressed = TRUE;
	SWITCH_OFF;
	DDRD &= ~SWITCHES;					// Switches as Input => ext. Int 1 
}






void TurnRight(void) // Asuro orientiert sich rechts
{


   LineData(data);

    if (data[0] > 100) // 300 ist geschätzt!!! ASURO ist zu weit rechts, also muss er rechts schneller
    {
      StatusLED(GREEN);  //green
      MotorSpeed(80,130);      // rechts mehr Gas geben!
    }

    if ( data[1] < 200) // 500 ist geschätzt!!! ASURO ist zu weit links er muss links schneller
    {
      StatusLED(RED);   //red
      MotorSpeed(130,80); 
    }

    else
    {
     MotorSpeed(100,100);

	}

}



void TurnLeft(void) // Asuro orientiert sich links
{


     LineData(data);

    if (data[1] > 100) // 300 ist geschätzt!!! ASURO ist zu weit links, also muss er links schneller
    {
      StatusLED(GREEN);  // green
      MotorSpeed(130,80);      // links mehr Gas geben!
    }

    if ( data[0] < 200) // 500 ist geschätzt!!! ASURO ist zu weit rechts er muss rechts schneller
    {
      StatusLED(RED);  //red
      MotorSpeed(80,130); 
    }

    else
    {
     MotorSpeed(100,100);

	}
  

}


void DarkLine(void)  //normale Linienverfolgung
{



    LineData(data); 


	if (data [0] > data [1] ) // links heller als rechts...
	{
	MotorSpeed(130,80);	// ... dann links mehr Gas geben...
	} 					


	else
	{
	MotorSpeed(80,130);	// ... sonst rechts mehr Gas geben!
	} 	
  					
    
}




int main(void)
{
	
    unsigned char cmd;
	unsigned char cmdold;

	MotorDir(FWD,FWD);
	Init();
	FrontLED(ON);
	StartSwitch();
	sei();
	while (1)
  {
 
		 // cmd = 0;	
		SerRead(&cmd,1,0xFFFE);

		cmdold = cmd;
		switch (cmdold) 
     {

		case LEFT_KEY : TurnLeft(); break;  // Wenn a dann links halten
		case MIDDLE_KEY : DarkLine(); break; // wenn s dann mittig halten
		case RIGHT_KEY : TurnRight(); break; // Wenn d dann rechts halten	
	 }

	 
	


  }
 
return 0;
}