leider nicht, ich habe die zwei besagten while schleifen rausgenommen, aber es funktioniert iwi immoment komplett nicht. d.h. die Motoren gehen nach den einschalten sofort an, egal ob vor den Sensoren etwas ist oder nicht.
Werbung
leider nicht, ich habe die zwei besagten while schleifen rausgenommen, aber es funktioniert iwi immoment komplett nicht. d.h. die Motoren gehen nach den einschalten sofort an, egal ob vor den Sensoren etwas ist oder nicht.
Hast du den auch mal die Werte aus diesem Befehl entfernt:
while(1==1){
copro_setSpeed(20, 20);
}
?
Du musst die Werte denk ich mal auch aus dem Befehl löschen also z.B. wenn ein Hinderniss erkannt wird die Werte von 20 auf 0 umändern. Du hast ja in deinem Programm keine Bedingung unter welcher dieser Befehl ausgeführt werden soll. Da steht einfach nur das die Motoren sich mit einem Speed von 20, 20 drehen sollen und nicht
if(Bedingung)
{
Motor soll sich drehen
}
Wie gesagt ich kenn deinen Bot nicht und kann es leider auch nicht testen aber die Tatsache das sich die Motoren drehen deutet ja darauf hin das dieser Befehl andauernd ausgeführt wird. Was du machen könntest ist erstmal alles unnötige ausklammern und dann mit einfachen Print-Befehlen eine Art Debug-Schnittstelle zu machen, also das du nach jedem
copro_setSpeed(20, 20);
eine Ausgabe über UART machst. So siehst du wann der Befehl ausgeführt wird und ob der Befehl die ganze Zeit ausgeführt wird.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Um die Motoren zu stoppen ist lediglich ein _copro_stopImmediate();_ nötig.
Hallo freekwave
1.) "copro_setSpeed(20,20)" heißt, dass der NIBO2 mit ca 7cm/s (linkes Rad, rechtes Rad) fahren soll - und das macht er, bis er entweder einen Stopp-Befehl erhält oder man die Speed ("copro_setSpeed(0,0)" auf NULL setzt.
2.) Ich habe mir mal kurz Dein Programm angesehen - man sollte in der main keine Funktionen deklarieren, sondern sie nur verwenden; die Deklaration sollte außerhalbe der main erfolgen
3.) mit while(1==1) in einer Funktion zu arbeiten ist sehr gefährlich, da gibt es keine Abbruchbedingung => wird IMMER WEITER durchgeführt
4.) "while(copro_distance[2]<3){ motor_geradeaus (); }" => das fkt so nicht, denn: solange der Abstand < 3 ist, soll der NIBO geradeaus fahren => Du liest aber in der while-schleife NIE den neuen Abstand ein(copro_update!!)
mfg
Hero_123
Hallo.
Ich hätte da auch mal eine Frage zur Programmierung und zwar würde ich gerne
Mittels nds3_get_dist(); ermittelte Werte über XBee versenden. Den ermittelten
Wert speicher ich wie folgt:
uint8_t dist_val1 = nds3_get_dist();
Über XBee lassen sich anscheinend nur Zeichen im Hex-Format versenden.
Mein Problem ist jetzt irgendwie den gespeicherten Wert in dist_val1 in
einzelne Hex Werte zu zerlegen. Mir wäre schon geholfen, wenn ich wüßte,
wie ich den Wert in dist_val1 in einen _array_ kriegen würde. Natürlich nicht
als _string_, sondern irgendwie in der Form array[0]=1; array[1]=8; array[2]=0;
Besser wäre natürlich noch array[0]=0x31; array[1]=0x38; array[2]=0x30;.
Vielen Dank.
Lieben Gruß
sourcecode
Hallo sourcecode
mal ein paar Fragen zu Deinen XBEEs - wie hast Du die denn konfiguriert, mit welcher Baudrate sendest Du, welches Terminalprogramm verwendest Du, wie hast du den FDT-Treiber konfiguriert?
Ich habe bei meinen XBEE Modulen ein seltsames Phänomen - ich verwende als Anzeige hterm, ein XBEE ist als Enddevice, das andere als Coordinator konfiguriert (hängt am PC - USB). Wenn ich nun das erste Mal das Modul am USB anstecke, hterm starte und den NIBO einschalte (der dann sofort das Senden beginnt), empfange ich die Daten am PC problemlos. Wenn ich das hterm beende ("disconnect" und Programm beenden) und dann wieder starte und connecte, empfange ich weiterhin Daten (soweit, so gut).
Wenn ich nun mich wieder disconnecte, den NIBO AUSSCHALTE und nach ca 3 min wieder EINSCHALTE und mit hterm wieder Daten empfangen will, fkt es nicht mehr - ich empfange einfach keine Daten mehr vom NIBO, obwohl er sendet; ich kann aber Daten an den NIBO senden. Erst wenn ich alles ausschalte (also auch den PC neu boote) kann ich wieder daten vom NIBO empfangen...
Hast Du dieses Phänomen auch schon mal gehabt, dass keine Daten mehr empfangen werden, wenn der NIBO aus- und dann nach ca 3 min wieder eingeschaltet wird???
Hero_123
Hallo Hero_123,
das Phänomen kann ich nur bestätigen. Passiert bei mir von Zeit zur Zeit auch.
Manchmal reicht es den XBee-Explorer (USB) aus zu stöpseln und wieder ein
zu stöpseln - manchmal muß ich auch komplett den Rechner neu starten.
Konfiguriert habe ich die XBee's ebenfalls als Coordinator und Enddevice. Baudrate 57600.
Als Terminalprogramm verwende ich X-CTU.
FTDI-Treiber Konfiguration: Senden/Empfangen 4096 Bytes
Wartezeit: 1ms
Timeouts Lesen/Schreiben: 0
sourcecode
Lesezeichen