Fabian E.
24.05.2010, 14:54
Hallo,
so langsam nimmt mein Programm für die M128 Gestalt an, jetzt hapert es aber ein wenig am Lesen der über UART an den Roboter gesendeten Befehle.
Hier erst mal ein wenig Code:
void task_Commands(void)
{
unsigned char tmp;
tmp = Serial_ReadExt(0);
if(tmp != 0)
{
clearLCD();
setCursorPosLCD(0,0);
writeStringLCD("Char: ");
writeCharLCD(tmp);
if (tmp =='#')
{
Thread_Delay(1);
counter = 0;
}
text[counter] = tmp;
//text[counter + 1] = '\0';
counter++;
//clearPosLCD(1,0,15);
setCursorPosLCD(1,0);
writeStringLCD(text);
}
Wie man hier sieht, wird immer ein Zeichen eingelesen, überprüft ob es gültig ist (Str_ReadExt liefert eine 0 wenn kein Zeichen vorhanden ist) und dann dem Text empfangener Zeichen hinzugefügt. Sonderfall: es handelt sich um ein '#', dies ist das Startzeichen eines Befehls. Also wird bei diesem Fall von vorne angefangen. Zwischen drin lasse ich mir noch über das LCD ein paar Debug-Sachen ausgeben: Das aktuell empfangene Zeichen und den gesamten Text.
Das einzelne Zeichen klappt auch super, es wird immer korrekt angezeigt.
Allerdings hat er ein Problem damit mehr als 4 Zeichen auf einmal zu empfangen...
Hier mal eine kleine Tabelle was ich sende und was im Endeffekt ankommt:
Gesendet Empfangen
123 123
1234 1234
12345 1235
123456789 1239
#1:123:123* #1:* --> Das hier wäre ein richtiger Befehl, wie der Roboter ihn gesendet bekommen würde.
Das heißt, er empfängt immer die ersten drei und das letzte Zeichen. Alles andere ignoriert er.
Hat er vielleicht nur einen Buffer für 4 Zeichen oder so? Weil die Zeichen werden ja alle auf einmal gesendet.
Ich habe auf der etwas dürftigen Seite von der C-Control das hier gefunden:http://www.c-control-pro.de/documentation/serial_init_irq.htm
Das sieht ja irgendwie nach dem Richtigen aus... Aber das klappt so leider auch noch nicht...
Kann mir jemand helfen?
so langsam nimmt mein Programm für die M128 Gestalt an, jetzt hapert es aber ein wenig am Lesen der über UART an den Roboter gesendeten Befehle.
Hier erst mal ein wenig Code:
void task_Commands(void)
{
unsigned char tmp;
tmp = Serial_ReadExt(0);
if(tmp != 0)
{
clearLCD();
setCursorPosLCD(0,0);
writeStringLCD("Char: ");
writeCharLCD(tmp);
if (tmp =='#')
{
Thread_Delay(1);
counter = 0;
}
text[counter] = tmp;
//text[counter + 1] = '\0';
counter++;
//clearPosLCD(1,0,15);
setCursorPosLCD(1,0);
writeStringLCD(text);
}
Wie man hier sieht, wird immer ein Zeichen eingelesen, überprüft ob es gültig ist (Str_ReadExt liefert eine 0 wenn kein Zeichen vorhanden ist) und dann dem Text empfangener Zeichen hinzugefügt. Sonderfall: es handelt sich um ein '#', dies ist das Startzeichen eines Befehls. Also wird bei diesem Fall von vorne angefangen. Zwischen drin lasse ich mir noch über das LCD ein paar Debug-Sachen ausgeben: Das aktuell empfangene Zeichen und den gesamten Text.
Das einzelne Zeichen klappt auch super, es wird immer korrekt angezeigt.
Allerdings hat er ein Problem damit mehr als 4 Zeichen auf einmal zu empfangen...
Hier mal eine kleine Tabelle was ich sende und was im Endeffekt ankommt:
Gesendet Empfangen
123 123
1234 1234
12345 1235
123456789 1239
#1:123:123* #1:* --> Das hier wäre ein richtiger Befehl, wie der Roboter ihn gesendet bekommen würde.
Das heißt, er empfängt immer die ersten drei und das letzte Zeichen. Alles andere ignoriert er.
Hat er vielleicht nur einen Buffer für 4 Zeichen oder so? Weil die Zeichen werden ja alle auf einmal gesendet.
Ich habe auf der etwas dürftigen Seite von der C-Control das hier gefunden:http://www.c-control-pro.de/documentation/serial_init_irq.htm
Das sieht ja irgendwie nach dem Richtigen aus... Aber das klappt so leider auch noch nicht...
Kann mir jemand helfen?