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
void writeIntegerLength(uint16_t number, uint8_t base, uint8_t length);
Eine Variante von writeInteger. Hier kann zusätzlich die Anzahl der Stellen (length) 
die ausgegeben werden soll, angegeben werden. Ist eine Zahl kürzer als die angege-
bene Stellenzahl, werden führende Nullen angefügt. Ist Sie länger, werden nur die 
letzten Stellen dargestellt.
Beispiele:
writeIntegerLength(2340, DEC, 5); 
Ausgabe: „02340“
writeIntegerLength(2340, DEC, 8); 
Ausgabe: „00002340“
writeIntegerLength(2340, DEC, 2); 
Ausgabe: „40“
writeIntegerLength(254, BIN, 12); 
Ausgabe: „000011111110“
4.6.2.2. Empfangen von Daten über die serielle Schnittstelle
Diese Funktionen wurden in Version 1.3 der RP6Library komplett neu geschrieben und 
daher wurde dieser Abschnitt daran angepasst. 
Der Empfang von Daten über die serielle Schnittstelle läuft nun komplett Interrupt ba-
siert ab. Die empfangenen Daten werden automatisch im Hintergrund in einem sog. 
Ringpuffer gespeichert. 
Einzelne empfangene Bytes/Zeichen kann man mit der Funktion
char readChar(void)
aus dem Ringpuffer lesen. Ruft man diese Funktion auf, wird das jeweils nächste ver-
fügbare Zeichen zurückgegeben und aus dem Ringpuffer gelöscht. 
Ist der Ringpuffer leer, gibt die Funktion 0 zurück. Allerdings sollte man vor jedem 
Aufruf mit der Funktion 
uint8_t getBufferLength(void)
überprüfen wieviele neue Zeichen noch im Ringpuffer vorhanden sind. 
Mehrere Zeichen hintereinander können mit der Funktion
uint8_t readChars(char *buf, uint8_t numberOfChars)
aus dem Puffer abgerufen werden. Als Parameter übergibt man der Funktion einen 
Zeiger auf ein Array und die Anzahl der Zeichen die in dieses Array kopiert werden 
sollen.   Die   Funktion   gibt   die   tatsächliche   Anzahl  kopierter   Zeichen   zurück.  Das   ist 
nützlich falls nicht soviele Zeichen wie angefordert im Puffer vorhanden waren. 
Sollte der Puffer komplett voll sein, werden alte Daten beim Empfang von neuen Zei-
chen nicht überschrieben, sondern es wird eine status Variable gesetzt (uart_status) 
die   einen   „übergelaufenen“   Puffer   signalisiert   (engl.   „Buffer   overflow“, 
UART_BUFFER_OVERFLOW). Sie sollten Ihre Programme so auslegen, dass es nicht 
dazu kommt. Meist ist in diesem Fall die Datenrate zu hoch oder das Programm wurde 
für längere Zeit mit mSleep o.ä. blockiert. Sie können auch die Größe des Ringpuffers 
- 83 -