Hallo

Zeiger sind auch nicht mein Gebiet (was kann ich überhaupt?). Das Ampersand & bedeutet die Speicheradresse der Variablen. Ich hab's nun so gelöst (Vorsicht beim Betrachten!) und kann nun warnungsfrei Übersetzen:
Code:
   char message[5], *zeiger_auf_message;

		zeiger_auf_message=&message[0]; // oje, so kann ich es fehler- und warnungsfrei
		SerWrite(zeiger_auf_message,1); // kompilieren
Zurück zum Problem: Das Hyperterminal sendet nur, wenn man auch [Enter] drückt! Es werden also mindestens zwei Zeichen gesendet. Mein aufgebockter (=Räder berühren nicht den Boden) Clon reagiert nun mit diesem Testcode:

Code:
#include "asuro-probot.h"
#include "asuro-probot.c"

//#include "asuro.h"
//#include "stdlib.h"

void BackLED(char left, char right){}; // Dummi
void SerRead(char *data, unsigned char length,unsigned int timeout)
{
	unsigned char i = 0;
	unsigned int  time = 0;
	UCSRB = 0x10; // enable receiver
	/* non blocking */
	if (timeout != 0) {
		while (i < length && time++ < timeout) {
			if (UCSRA & 0x80) {
				data[i++] = UDR;
				time = 0;
			}
		}
		if (time > timeout) data[0] = 'T';
	}
	/* blocking */
	else {
		while (i < length) {
			if (UCSRA & 0x80)
				data[i++] = UDR;
		}
	}
}

void pause_ms(unsigned int dauer)
{
	while(dauer--) Sleep (36); // Sleep(72) bei asuro-CD-Library!
}

int main(void)
{
   unsigned int data[2];
   char data0[5], data1[5];
   char message[5], *zeiger_auf_message;

   Init();
   SerWrite("Hallo :)\n\n\r", 11);

   while( 1 )
   {
		pause_ms(200); // ohne diese Pause empfängt der asuro seine eigenen Meldungen!
		StatusLED(RED);
		SerRead(message,2,0); // Warten auf zwei Zeichen: Befehl und Enter?
		zeiger_auf_message=&message[0]; // oje, so kann ich es fehler- und warnungsfrei
		SerWrite(zeiger_auf_message,1); // kompilieren
		SerWrite("\n\r", 2);
		StatusLED(YELLOW);
		
		if(message[0] == 'g')
   	{
         FrontLED(ON);
			Sleep(10); // Eine LED wird nicht schlagartig hell
         LineData(data);

         itoa (data[0], data0, 5);
         itoa (data[1], data1, 5);
         SerWrite (data0, 4);
         SerWrite (" links\n\r", 8);
         SerWrite (data1, 4);
         SerWrite (" rechts\n\r", 9);

      	pause_ms(2);

         MotorDir(FWD,FWD);
         MotorSpeed(110,100);
         BackLED(OFF,OFF);

         if ( data[0] < 50 )
         {
            MotorDir(RWD,RWD);
            MotorSpeed(100,150);
            BackLED(ON,OFF);

            pause_ms(120);
         } // if

         if ( data[1] < 50 )
         {
            MotorDir(RWD,RWD);
            MotorSpeed(100,150);
            BackLED(OFF,ON);

            pause_ms(120);
         } // if

         if (PollSwitch() >= 1)
         {
            MotorDir(RWD,RWD);
            MotorSpeed(255,255);
            BackLED(OFF,OFF);
            StatusLED(RED);

            pause_ms(300);
         } // if PollSwitch()

      } // if(message[0] == 'G')

      if(message[0] == 's')
      {
         MotorDir(FREE,FREE);
         FrontLED(OFF); //Dieser Teil müste eigentlich so funktonieren oder
         StatusLED(OFF);
      } // if(message[0] == 's')

   } // while( 1 )
   return 0;
} //main(void)
Das ist im wesentliche immer noch das alte Programm, allerdings etwas geputzt. Neu ist pause_ms() für die Wartezeiten. Das ist natürlich noch die Variante für meinen Clon. Man muss im Moment die Befehle mehrmals senden bis er reagiert.

Ungetestet für den orginalen asuro:
Code:
#include "asuro.h"
#include "stdlib.h"

void pause_ms(unsigned int dauer)
{
	while(dauer--) Sleep (72);
}

int main(void)
{
   unsigned int data[2];
   char data0[5], data1[5];
   char message[5], *zeiger_auf_message;

   Init();
   SerWrite("Hallo :)\n\n\r", 11);

   while( 1 )
   {
		pause_ms(200); // ohne diese Pause empfängt der asuro seine eigenen Meldungen!
		StatusLED(RED);
		SerRead(message,2,0); // Warten auf zwei Zeichen: Befehl und Enter?
		zeiger_auf_message=&message[0]; // oje, so kann ich es fehler- und warnungsfrei
		SerWrite(zeiger_auf_message,1); // kompilieren
		SerWrite("\n\r", 2);
		StatusLED(YELLOW);

		if(message[0] == 'g')
   	{
         FrontLED(ON);
			Sleep(10); // Eine LED wird nicht schlagartig hell
         LineData(data);

         itoa (data[0], data0, 5);
         itoa (data[1], data1, 5);
         SerWrite (data0, 4);
         SerWrite (" links\n\r", 8);
         SerWrite (data1, 4);
         SerWrite (" rechts\n\r", 9);

      	pause_ms(2);

         MotorDir(FWD,FWD);
         MotorSpeed(110,100);
         BackLED(OFF,OFF);

         if ( data[0] < 50 )
         {
            MotorDir(RWD,RWD);
            MotorSpeed(100,150);
            BackLED(ON,OFF);

            pause_ms(120);
         } // if

         if ( data[1] < 50 )
         {
            MotorDir(RWD,RWD);
            MotorSpeed(100,150);
            BackLED(OFF,ON);

            pause_ms(120);
         } // if

         if (PollSwitch() >= 1)
         {
            MotorDir(RWD,RWD);
            MotorSpeed(255,255);
            BackLED(OFF,OFF);
            StatusLED(RED);

            pause_ms(300);
         } // if PollSwitch()

      } // if(message[0] == 'G')

      if(message[0] == 's')
      {
         MotorDir(FREE,FREE);
         FrontLED(OFF); //Dieser Teil müste eigentlich so funktonieren oder
         StatusLED(OFF);
      } // if(message[0] == 's')

   } // while( 1 )
   return 0;
} //main(void)
Gruß

mic