PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Hilfe bei Tastatureingabe



Phill93
07.06.2010, 22:38
Hallo
Ich habe mir erst kürzlich einen RP6 gekauft.
Jetzt möchte ich eine eigenes Programm scheiben das auf Tastatureingaben am Computer reagiert.
Ich habe nur leichte schwierigkeiten die Funktionen zu verwenden die dafür nötig sind. Kann mir jemand das genau erklären wie das funtioniert.

Phill93

shedepe
12.06.2010, 23:18
Hast du dir schon mal die Anleitung durchgelesen ? Da sollte eigentlich alles drinstehn was du dafür brauchst.

Im Prinzip geht das so:
UART Empfängt was, du wertest es aus (z.B. ein Befehl wie: "Fahre Links") und reagierst dann drauf

Phill93
13.06.2010, 00:20
Ich habe das Problem das ich eine 2 stellige Zahl empfangen möchte.
Und ich nicht weiß wie ich das anstellen soll.
Ich verstehe das Beispiel in der Anleitung nicht.
Dashalb hab ich den Thread hier geschrieben.

Phill93

Dirk
13.06.2010, 10:25
@Phil93:
Du könntest diese Funktionen zur Eingabe von Zeichen nehmen:

// Reception buffer for the function getInputLine():
char receiveBuffer[UART_RECEIVE_BUFFER_SIZE + 1];

/**
* Get chars of an input line from the UART.
*
* Returns 0 (false), if the UART receive buffer is empty
* OR a character of the input line has been received.
* Returns 1, if the whole input line has been received
* (with a "new line" character at the end).
* Returns 2, if the UART receive buffer overflows.
* The input line is stored in the receiveBuffer array.
*
*/
uint8_t getInputLine(void)
{static uint8_t buffer_pos = 0;
if(getBufferLength()) {
receiveBuffer[buffer_pos] = readChar();
if(receiveBuffer[buffer_pos] == '\n') {
receiveBuffer[buffer_pos] = '\0';
buffer_pos = 0;
return 1;
}
else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE) {
receiveBuffer[UART_RECEIVE_BUFFER_SIZE] = '\0';
buffer_pos = 0;
return 2;
}
buffer_pos++;
}
return 0;
}

/**
* Get a complete input line from the UART.
*
* This function waits for a whole input line from the UART.
* The input line is stored in the receiveBuffer array.
* The function is blocking until one of the two following
* conditions occurs:
* - A "new line" character has been received at the end of
* the input line.
* - The UART receive buffer overflows.
*
*/
void enterString(void)
{
while(!getInputLine());
}


Gruß Dirk

Phill93
13.06.2010, 13:49
Das ist genau das was ich gesucht habe.
Kann mir aber jemand erklären was das void in der Klammer hinter enterString bedeutet?
Deswegen bekomme ich immer einen Fehler.
Phill93

Fabian E.
13.06.2010, 14:13
Was bekommst du denn für einen Fehler?
Das bedeutet nur, dass diese Methode keine Argumente nimmt. Also du keine Werte für irgendwas übergeben kannst/musst.

Phill93
13.06.2010, 15:09
Muss ich dann die funktion so enterString() aufrufen oder so enterString.
Den Code von oben muss ich ja vor dem main abschnitt einfügen oder?

Phill93

Fabian E.
13.06.2010, 15:19
enterString();
Ja, aber natürlich nicht IN Main, ne ;)

Phill93
13.06.2010, 16:21
Ich möchte jetzt überprüfen ob enterString eine 2stellige Zahl liefert wie kann ich das Überprüfen?

Phill93

Dirk
13.06.2010, 17:06
Ich möchte jetzt überprüfen ob enterString eine 2stellige Zahl liefert wie kann ich das Überprüfen?
Z.B. mit dieser Funktion erst einmal die Stringlänge:
/**
* Calculate string length
*
*/
uint16_t strlength(const char *string)
{uint16_t length = 0;
while (*string++)
length++;
return length;
}


Gruß Dirk

shedepe
13.06.2010, 17:40
Oder du wandelst deinen String in einen Integer um und überlegst:
eine Zahl hat 2 Ziffern, wenn sie größer als 9 ist oder kleiner als -9

Mc Delta
13.06.2010, 18:09
Hier ein Code Bsp. von mir:

#include "RP6RobotBaseLib.h"
uint8_t i=2
int main(void)
{
initRobotBase();
char receiveBuffer[i];
while(true)
{
receiveBytes(i);
waitUntilReceptionComplete();
copyReceivedBytesToBuffer(&receiveBuffer[0]);
if(strcmp(receiveBuffer,"12")) // 2stellig
{
setLEDs(0b111111);
}
}
}