PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : btm222 reagiert nicht auf befehle



Dan89
15.12.2008, 19:57
Hey,

ich hab ein problem mit dem bluetoothmodul btm222: also angeschlossen hab ich soweit alles richtig denk ich. mein pc findet es und ich kann auch über den comport daten austauschen.
das problem ist aber, dass alles nur in der standartconfig geht. wenn ich die bluetoothverbindung trenne, um befehle ans modul zu schicken, bekomme ich von diesem entweder das gleiche zurückgeschickt oder nur den ersten buchstaben.
beispielsweise kommt bei AT auch AT zurück
bei ATD? kommt nur A ,..... usw.

Wär schön, wenn mir einer helfen könnte....

Gruß Daniel

zerush
16.12.2008, 13:53
Hi, das problem hatte ich auch zuerst!
Die einzelnen Zeichen dürfen nicht so schnell hintereinander ankommen.
Das BTM-222 scheint hier etwas langsam zu sein, bzw. einen zu kleinen Puffer zu besitzen.

Ich habe mir daher die folgende Funktion geschrieben:



void blue_Cmd(const char * string){
register char c;

while ((c = *string)) {
uart_Put(c);
string++;
wait_100ms();
}

uart_Put('\r');
wait_100ms();
}


Wie du die wait_100ms() implementierst, oder ob du _delay_ms(100) benutzt bleibt natürlich dir überlassen ;-)

Mfg,
Thomas

Dan89
16.12.2008, 15:27
Hi, also ich habs grad mal mit verzögerung ausprobiert...
das problem besteht weiterhin, allerdings werden die strings jetzt immer komplett zurückgeschickt, also nichts mehr verkürzt.

Könnte es sein, dass vielleicht noch irgendwas vor dem Befehl gesendet werden muss? Hab im Datenblatt aber nichts gefunden...

Mfg Daniel

zerush
16.12.2008, 16:26
Du musst ein '\r' nach dem Befehl senden (Kein '\n'...)

Dan89
16.12.2008, 16:51
danke für deine antworten...

sry, wenn ich mich ein bisschen blöd anstelle, aber irgendwie geht es noch nicht so ganz :-s
also mal als beispiel ein befehl... ATD?. so ich muss also ATD?\r senden, richtig? und 100ms zeitabstand zwischen den buchstaben. (ich programmier eigentlich nicht in c deshalh war ich mir nicht sicher, dass ich alles richtig verstanden habe...)

zerush
16.12.2008, 17:01
Genau, wobei natürlich \r für ein carriage-return steht. In C kann man halt einfach \r schreiben, weiß nicht, wie es bei dir ist.

Die 100ms sind übrigens durch probieren entstanden ;-)

Dan89
16.12.2008, 17:24
es funktioniert!
genau daran lag es. ich hab \r als ascii gesendet. weil ich am pc meistens in delphi programmiere kannte ich \r bei c nicht. bei delphi heißt es einfach #13.

vielen dank nochmal!!! \:D/