Kommunikation mit ELECFREAKS Bluetooth shield

Hallo Arduino-Gemeinde!

Ich bin hier knapp am verzweifeln:
Ich versuche mein elecfreaks Bluetooth shield zu "programmieren" (AT-commands). Dazu verwende ich das altbekannte Programm. Verbinden tu ich mich dann aber mit PuTTy. Das klappt auch alles (uploaden und verbinden).
Aber wenn ich dann "AT" schicke und ein "OK" erwarte kommen irgendwelche Zeichen. Gut, dachte es ist eine falsch eingestellte Baudrate (38400) aber egal was ich mache, ich kriege kein "OK". bei 38400 krieg ich überhaupt als einzige Baudrate eine Antwort!

Kann mir wer sagen was ich da falsch gemacht haben kann?
bin wirklich für JEDEN Ansatz dankbar!
(btw.: es hat schon mal funktioniert...da dachte ich, ich hab was kaputt gemacht. aber mit neuem shield und neuem uno und neuinstallation kommt immer der gleiche Mist raus :frowning: )
DANKE(!!!) für eure hilfe!!!!

lg
Martin aus Österreich

Wie hast du das ganze angeschlossen?

Such das Datenblatt raus und teste alle dort gelisteten Baudraten. NL und CR müssen soweit bekannt ausgeschaltet sein.

hi sschultewolter!

Die TX/RX Pins hab ich mit 2 und 3 belegt. in SoftwareSerial auch so defniert (hab die Jumper auch mal vertauscht, versuchsweise...auch nichts).

Baudraten hab ich echt alle durchprobbiert...nur bei 38400 krieg ich wenigstens IRGENDWAS!

Das spuckt mein shield bei 38400 aus:

AT
ϧ†…

kann damit wer was anfangen?

Versuche die AltSoftSerial oder nutzte die SoftwareSerial bei Baudraten < 9600!

SoftwareSerial benutze ich schon:

#include <SoftwareSerial.h>


//#include <NewSoftSerial.h>
//#include <TimerOne.h>

#define rxPin 3
#define txPin 2

SoftwareSerial mySerial(rxPin, txPin);

int baudindex = 0;
int baudrate = 9600;
void Callback()
{
  Serial.println("------->  Callback Send AT");
  mySerial.print("AT\r\n");
}

void setup()
{
  // define pin modes for tx, rx pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  mySerial.begin(38400);
  Serial.begin(38400);
  Serial.println("Tataaaaaa!!!");

  //Timer1.initialize(2000000);             // setting callback is 2s
  //Timer1.attachInterrupt(Callback);
}

void loop()
{
  int i = 0;
  char someChar[32] = {0};
  // when characters arrive over the serial port...
  if (Serial.available()) {
    do {
      someChar[i++] = Serial.read();
      //As data trickles in from your serial port you are grabbing as much as you can,
      //but then when it runs out (as it will after a few bytes because the processor
      //is much faster than a 9600 baud device) you exit loop, which then restarts,
      //and resets i to zero, and someChar to an empty array.So please be sure to keep this delay
      delay(3);

    } while (Serial.available() > 0);

    mySerial.println(someChar);
    Serial.println(someChar);
}
  while (mySerial.available())
    Serial.print((char)mySerial.read());


}

Grundsätzlich habe ich ab 1200 alles durchprobiert...auch , wenn ich weiß, dass das shield erst ab 9600 funzt...

NewSoftSerial ist identisch zu SoftwareSerial in aktuellen Arduino Versionen. Also unnötig.

AltSoftSerial ist das:
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
Das läuft mit einem Timer (und geht daher nur auf bestimmten Pins) und ist dadurch wesentlich zuverlässiger

Dass nur 38400 geht kann daran liegen dass das Modul darauf eingestellt ist.

hallo Serenifly !

da liegt eben der Hund begraben: das ding ist ja jungfräulich und deswegen auf 38400 eingestellt. aber die zeichen ergeben eben keinen sinn...

muss jetzt mal das AltSoftSerial durchlesen und schauen wie ichs einbauen kann

hmmm...ich steh mal kurz an..
mit AltSoftSerial kann ich bei Arduino Uno anscheinend "nur" Pin 8 und 9 verwenden.
kann aber bei dem shield maximal pin 8 verwenden...9 ist nicht zugänglich...
oder ich check einfach was nicht... :frowning:

Hast du dir mal angeschaut, was der Hersteller schreibt?

http://www.elecfreaks.com/wiki/index.php?title=Bluetooth_Shield

Besorge dir einen Uno mit dem 328P als DIP Package. Entferne diesen und nutze das Board dann zum Programmieren des Shields.

Schau dir mal das Bild an:
http://www.elecfreaks.com/wiki/index.php?title=File:BT_Shield_05.jpg

Das ist für einen Mega. Aber das sollte doch auch auf dem UNO funktionieren um andere Pins mit dem Shield zu verbinden, oder? Die äußeren Pins sind DIN, bzw. DOUT. Da kann man also einfach Jumper Kabel drauf stecken.

Ist aber etwas seltsam. Das sollte eigentlich auch mit dem normalen SoftSerial gehen

EDIT:
Wobei das fast so aussieht, als ob da Pin 8 vom Shield schon verwendet wird. Das ist RX. TX wäre Pin 9.

Die Baudrate kann man aber auch ändern:

Seite 8

grüß euch!

hey, danke für euren unermüdlichen Einsatz!
@sschultewolter: genau so ein board hab ich! hab auch alles schon probier, mit rausnehmen vom Prozessor und alles.

@Serenifly: das Problem mit der Baudrate umstellen ist das, dass ich ja keine nachvollziehbare Kommunikation herstellen kann.

die "antwort" auf zb AT kommt ja, aber eben kryptisch (habs vorher mal gepostet) und es kommt bei den verschiedenen befehlen dann aber immer die gleiche Zeichenfolge...also denk ich mal, dass das keine zufälligen zeichen sind sondern zb "OK" anders dargestellt.

was ich jetzt noch probiere ist der tipp mit dem drahtjumpern...
(hab deine Meldung mit pin8 nicht verstanden. was meinst du es wird vom shield schon verwendet?)

batman1976:
(hab deine Meldung mit pin8 nicht verstanden. was meinst du es wird vom shield schon verwendet?)

Auf dem Bild sieht es so aus als ob da eine Leiterbahn von Pin 8 wegführt.

Ich nehme mal an einen Mega hast du nicht? Da hättest du mehrere Hardwareschnittstellen.

AHHHHHHHHHHHHHHHHHHHH...SERENIFLY!!!!!!!!!!!!!!!!!!!!!!!!
mit deinem tipp hat es funktioniert!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

UAHHHHHHHHHHHHHHHHHHHHHHH!!!!

WIE GEIL!!!!!!!!!!

DANKE!!!!!!

(jetzt muss ich nur mehr kapieren, warum es mit SoftSerial nicht geht!)

DANKE DIR!!!!!!!!!!!!!

:slight_smile:

Dann würde ich mal probieren jetzt die Baudrate auf 9600 zu senken und nochmal SoftSerial zu probieren.

war auch mein plan!

Jetzt passiert folgendes:
ich sag:
AT+UART=9600,0,0
Und bei AT+UART? sagt er brav:
+UART=9600,0,0

Und dann ändere ich das Programm auf 9600:
mySerial.begin(9600);
Serial.begin(9600);

Die kommunkation funktioniert mit SoftwareSerial immer noch nicht und mit AltSoftSerial auch wieder nur mit 38400
(ich ändere die beiden oberen Einträge auf:
mySerial.begin(38400);
Serial.begin(38400);
)

Versteh ich hier den Code nicht?
Wenn ich sage AltSoftSerial soll 9600 sein, dann kommuniziert er mit dem shield mit dieser Baudrate, oder?
Serial.begin(9600) sagt ja nur das der Arduino jetzt mit 9600 unterwegs ist.
Wie kann es sein, dass ich bei einer Baudrate von 38400 (AltSoftSerial) das shield fragen kann , was seine derzeitig eingestellte bausrate ist und er antwortet mir mit 9600,0,0...das ist doch unmöglich,oder?

Ich denke mal ich bin betriebsblind...kann mir jemand die Augen öffnen?