Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit Pfeiltasten steuern?
RobbyFan
04.04.2010, 17:54
Hallo,
Ich glaube diese Frage wurde Hier schon oft gestellt...
Ich habe eine GUI gemacht die über die pfeiltasten kommandos sendet wie schaffe es ich in c das der Roboter darauf achtet.
ich ahbe als belegung:
for = movefwd
stop = movestop
rück = movebackw
r = moveright
l = moveright
danke für antwort
mfg Marcel
So mal als PseudoCode
//Hauptschleife
while(true)
{
char command[] = new char[50];
command = //serielle schnittstelle abfragen
if(command == "fwd")
{
//move forwards
}
else if(command =="bwd")
{
//move backwards
}
else if(command == "left")
{
//turn left
}
}
Ich hoff das hilft dir etwas. Für weiteren Code müsst ich mir noch mal die RP6 Lib anschaun
RobbyFan
04.04.2010, 19:54
^danke für deine antwort
hasste dazu auch nen kompletten quelltext, wie ist das mit sensoren
schau dir mal die gui an
http://vb-tools.kilu.de/index.php?option=com_jotloader&view=categories&cid=0_f89f96e01c385e320768d5fc575f8fd5&Itemid=4&limitstart=6
und dann rp6 gui
mfg marcel
Für solche Anwendungen ist es hilfreich, die Steuerbefehle mit einem speziellen Zeichen beginnen und enden zu lassen. Dann wartet man beim Empfänger, bis das Startzeichen kommt. Nun werden alle folgenden Zeichen in einen String gepackt, bis das Endzeichen kommt. Nun weiß man, dass ein kompletter Befehl empfangen wurde, und kann auswerten, welcher es ist.
Ich hab das neulich für ein Projekt so umgesetzt. Bei mir beginnen alle Befehle mit einem Unterstrich und enden mit einem Semikolon.
Ich benutze die UART-Lib von P. Fleury. Meine Funktion muss reglemäßig aufgerufen werden, und holt dann alle inzwischen empfangenen Zeichen aus dem FiFo (Teil der UART-Lib). Wenn ein kompletter Befehl da ist, wird ein Pointer auf den Befehlstext geliefert, ansonsten ein Nullzeiger. Man muss nun also zuerst auf Null testen, und dann ggf. mit allen vergebenen Befehlstexten vergleichen.
/* Liest Zeichen vom UART ein und sucht nach Befehlen.
Jeder Befehl beginnt mit _ und endet mit ;
Diese Zeichen werden nicht mit zurueckgegeben!
Rueckgabewert: Zeiger auf Befehlsstring, wenn neuer Befehl erkannt,
sonst Nullzeiger */
char * kommando_lesen(void)
{
uint16_t rxc; //empfangenes Zeichen
#define MAXCMDLENGHT 10 //maximale Befehlslänge
static char cmdstr[MAXCMDLENGHT+1]; //Zwischenspeichern eines Befehls
static uint8_t rxcnt=0;
uint8_t cmdstr_valid=0;
rxc = uart_getc(); //UART abfragen
//solange Zeichen im Empfangspuffer sind, diese verarbeiten
while(!( rxc & UART_NO_DATA ))
{
switch((char)rxc)
{
case '_':
rxcnt=0; //Neuer Befehl hat begonnen
cmdstr_valid=0;
break;
case ';':
if(rxcnt>0) //Mindestens ein Zeichen wurde empfangen
{
cmdstr[rxcnt]=0; //String abschliessen
cmdstr_valid=1;
}
break;
default:
//ein beliebiges Zeichen wurde empfangen -> an String anhaengen
cmdstr[rxcnt]=(char)rxc;
rxcnt++;
if(rxcnt>MAXCMDLENGHT) //Fehler: zu viele Zeichen am Stück
{
rxcnt=0; //Bisherige Daten verwerfen
}
break;
}
//UART weiter abfragen, um zu erkennen, ob noch Zeichen kommen
//Wenn jetzt UART_NO_DATA gelesen wurde,
// wird die while-Schleife verlassen
rxc = uart_getc();
} //while(...)
if(cmdstr_valid)
{
return cmdstr; //Kompletter Befehl empfangen -> zurückgeben
}
else
{
return 0; //kein kompletter Befehl -> Nullzeiger zurückgeben
}
}//Ende der Funktion kommando_lesen()
Fabian E.
14.04.2010, 22:15
Hier gibts meine Lösung zu genau diesem Problem: Klick! (https://www.roboternetz.de/phpBB2/viewtopic.php?t=53687)
RobbyFan
15.04.2010, 15:44
Ja hab ich schon getestet super Prog. ...
fabi202cool
17.04.2010, 19:48
Hi Leute,
habe mich heute Morgen mal hingesetz und ein kleines Programm geschrieben:
Vorwärts und Rückwärts in cm Maßen, Drehen (Links,Rechts) 45, 90 Grad, sowie die Steuerung der LEDs. Das Programm ist noch in der Testphase, und wird von mir noch etwas verfeinern. Das Programm läuft komplett über den Terminal und eine Enleitung ist im Prog enthalten.
Hoffentlich gefällt es euch !!!
Gruß Fabi
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.