Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Hilfe bei Tastatureingabe
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
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
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
@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
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.
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 ;)
Ich möchte jetzt überprüfen ob enterString eine 2stellige Zahl liefert wie kann ich das Überprüfen?
Phill93
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
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);
}
}
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.