Arexx RP6 V2 Build your own robot kit RP6 V2 Manuale Utente

Codici prodotto
RP6 V2
Pagina di 141
RP6 ROBOT SYSTEM -  4. Programmierung des RP6
4.6.2. UART Funktionen (serielle Schnittstelle)
Wir haben im C-Crashkurs oben schon einige Funktionen aus der RP6Library verwen-
det, vor allem die UART Funktionen. Mit diesen Funktionen kann man Textnachrichten 
über die serielle Schnittstelle des Roboters an den PC (oder andere Mikrocontroller) 
schicken und auch von diesem emfangen. 
4.6.2.1. Senden von Daten über die serielle Schnittstelle
void writeChar(char ch)
Diese Funktion schickt ein einzelnes 8-Bit ASCII Zeichen über die serielle Schnittstelle. 
Die Anwendung ist sehr einfach: 
writeChar('A');
writeChar('B');
writeChar('C');
Gibt „ABC“ aus. Man kann auch direkt ASCII Codes übertragen: 
writeChar(65);
writeChar(66);
writeChar(67);
Das ergibt im Terminal ebenfalls die Ausgabe „ABC“ - jedes ASCII Zeichen ist schließ-
lich einer bestimmten Nummer zugeordnet, das 'A' z.B. der 65. Mit einer angepassten 
Kommunikationssoftware, könnte man aber auch die reinen binären Werte interpretie-
ren.
Oft braucht man auch: 
writeChar('\n');
um eine neue Zeile im Terminal anzufangen. 
void writeString(char *string)  
und  writeString_P(STRING)
Diese Funktionen sind sehr wichtig für die Fehlersuche in Programmen, denn hiermit 
kann   man   beliebige   Textnachrichten   an   den   PC   schicken.   Für   Datenübertragungen 
kann man sie natürlich ebenso verwenden.
Der Unterschied zwischen writeString und writeString_P besteht darin, dass bei Ver-
wendung von writeString_P die Texte nur im Flash-ROM (Program Memory) abgelegt 
werden und auch von dort gelesen werden, bei writeString jedoch zusätzlich in den 
Arbeitsspeicher geladen werden und somit doppelt Speicherplatz verbraucht wird. Und 
vom Arbeitsspeicher haben wir nunmal nur 2KB zur Verfügung. Wenn es nur um die 
Ausgabe von festem und nicht veränderlichem Text geht, sollte man deshalb immer 
writeString_P verwenden. Wenn man dynamische Daten ausgeben will, die ohnehin im 
RAM vorliegen, muss man natürlich das normale writeString verwenden.
Auch hier ist die Anwendung denkbar einfach:
writeString("ABCDEFG");
Gibt „ABCDEFG“ aus, belegt aber für die Zeichenkette auch Arbeitsspeicher.  
writeString_P("ABCDEFG");
Gibt ebenfalls „ABCDEFG“ aus, aber ohne dabei unnötig RAM zu belegen!
- 81 -