Problem mit der Bluetooth Verbindung

Hallo

Ich bin gerade dabei mich mit Bluetooth zu beschäftigen, da ich meine Deckenlampe die sich im Bau befindet gerne über Bluetooth steuern möchte, da sie verschiedene Lichtfunktionen hat, aber leider habe ich da meine Probleme mit diesem Video

Alles soweit angeschlossen, die Led an Pin 13 und GND geklemmt. Programm mit dem Handy Samsung Galaxy S4 verbunden. Der Bluetooth"stick" HC 06 blinkt dann und dann mit meinem Handy per Bluetooth verbunden. Das blinken des "Sticks" hört dann auch auf, wie im Video zu sehen, aber meine Led bleibt nach dem drücken von ON aus. Hat vll jemand schonmal zufälligerweise dieses Video nachgebaut ? Ich finde den Fehler nicht, die Led ist auch nicht defekt, das habe ich kontroliiert.

Gruß Maddin

Dann geb mal Schaltpläne und Sketch

Hier ist der Sketch

#include <SoftwareSerial.h>
char c;
int LED = 13;

SoftwareSerial mySerial(10, 11);

void setup()
{
pinMode(LED, OUTPUT);
mySerial.begin(9600);
}

void loop()
{
while (!mySerial.available());
c = mySerial.read();
if (c == '1')
{
digitalWrite(LED, HIGH);
}
if (c == '0')
{
digitalWrite(LED, LOW);
}
}

Schaltplan gibt es keinen,
Die Led an Pin 13 und GND angeschlossen ist.

HC06 Arduino

RXD RX
TXD TX
GND GND
VCC 3.3 V

Ich bin noch neu auf dem Gebiet, also nicht gleich erschlagen :wink:

Programm für das Handy wurde mit App Inventor geschrieben und per QR Code ans Handy gesendet

Ich vermute die Serielle ist falsch angeschlossen.
Sieht aus wie D0 und D1 und nicht SoftwareSerial.

Hallo,

ich vermute das serielle einlesen funktioniert so nicht.
Letztens wieder vom Serenifly gelernt.
Entweder char arrays mit strncasecmp() oder strncmp() vergleichen.
Oder Strings mit == vergleichen

Guck mal hier weiter unten ...
http://forum.arduino.cc/index.php?topic=374582.0

Wenn dann immer noch nichts geht, würde ich erstmal mit einfachen Code überprüfen ob die "Befehle" vom Phone auch ankommen indem du sie auf der anderen seriellen ausgeben läßt und notfalls umgekehrt. Vielleicht liegst auch an der Terminal App auf deinem Phone bzw. dessen Einstellungen.

Für ein Zeichen sollte das eigentlich gehen

Wobei das nicht ideal ist:

while (!mySerial.available());

Das geht zwar wenn du sonst nichts macht, aber es blockiert den Code bis etwas ankommt. Besser man fragt mit if(mySerial.available) ab ob was da ist. Dann kann man noch andere Dinge erledigen wenn das nicht so ist.

Kann es an der Spannungsversorgung liegen? Das Modul wird mit 3,3V versorgt, aber der Arduino sendet mit 5V und erwartet eigentlich auch 5V.

HotSystems:
Ich vermute die Serielle ist falsch angeschlossen.
Sieht aus wie D0 und D1 und nicht SoftwareSerial.

Sry da ich neu bin, frage ich mich was du meinst !

Doc_Arduino:
Hallo,

ich vermute das serielle einlesen funktioniert so nicht.
Letztens wieder vom Serenifly gelernt.
Entweder char arrays mit strncasecmp() oder strncmp() vergleichen.
Oder Strings mit == vergleichen

Guck mal hier weiter unten ...
DS18S20 auslesen! Fehler im Code? - Deutsch - Arduino Forum

Wenn dann immer noch nichts geht, würde ich erstmal mit einfachen Code überprüfen ob die "Befehle" vom Phone auch ankommen indem du sie auf der anderen seriellen ausgeben läßt und notfalls umgekehrt. Vielleicht liegst auch an der Terminal App auf deinem Phone bzw. dessen Einstellungen.

Wie kann ich die auf der anderen seriellen ausgeben ?

Vielen Dank für die Hulfe

Gruß Maddin

fliege_m:
Sry da ich neu bin, frage ich mich was du meinst !

Deine Pinbezeichnung im Sketch ist nicht eindeutig.
An welche Ports hast du denHC06 am Arduino angeschlossen?

Ich habe ihn an

D0 = RX
D1 = TX

Was mich wundert, wenn ich mein Handy per Bluetooth verbinde, hört der HC 06 Stick auf zu blinken. Der blinkt sobald er Strom bekommt, wenn ich ihn mit dem Handy verbinde blinkt die LED nicht mehr, ist auch im Video zu sehen.

Hallo,

was hast du für einen Arduino? Uno? Mega?

Du wirst schon die richtige haben mit Software Serial. Die Schnittstelle wird emuliert.
An Pin 0 und 1 ist die Hardware serielle vom µC. Die sollte nicht belegt werden. Darüber läuft ja die serielle Verbindung zwischen Arduino und PC mittels USB Verbindung. Programmierung und serieller Monitor. Das ist Serial0 um genau zu sein. Die 0 läßt man aber weg.

Der Test läuft so ab. Alles was man auf der einen seriellen empfängt schickt man auf der anderen seriellen wieder aus. Und umgekehrt.

Ich hatte mir mal folgenden Testcode gebastelt, kann ihn aber jetzt gerade nicht nochmal testen. Da ich einen Mega verwende mußte bitte selbst die Hardware Serial1 auf Deine Software Serial1 abändern. Am Ende soll hier jede Eingabe auf beiden seriellen ausgegeben werden.

const int _SERIAL_BUFFER_SIZE = 20;
char _serialBuffer0[_SERIAL_BUFFER_SIZE];
char _serialBuffer1[_SERIAL_BUFFER_SIZE];  

void setup() {
  
  Serial.begin(9600);
  Serial1.begin(9600); 
}

void loop() {
  
read_serial_0();

read_serial_1();

}  // loop Ende

// ------------------------------------------------------------------------------------

void read_serial_1()  {   // liest vom Bluetooth Modul ein (Serial Port 1)
  
   static unsigned int index1;
   if (Serial.available() > 0)  {   
      char c = Serial.read();
      if (c >= 32 && index1 < _SERIAL_BUFFER_SIZE - 1 )  {
         _serialBuffer1[index1++] = c;
      }
      else if(c == '\n')  {     // Endeerkennung 'LineFeed'
         _serialBuffer1[index1] = '\0';
         index1 = 0;
         Serial.println (_serialBuffer1);
         Serial1.println(_serialBuffer1);
      }
   }
}


void read_serial_0()  {   // liest vom PC Terminal ein (Serial Port 0)
  
   static unsigned int index0;
   if (Serial.available() > 0)  {		
      char c = Serial.read();
      if (c >= 32 && index0 < _SERIAL_BUFFER_SIZE - 1 )  {
         _serialBuffer0[index0++] = c;
      }
      else if(c == '\n')  {     // Endeerkennung 'LineFeed'
         _serialBuffer0[index0] = '\0';
         index0 = 0;
         Serial.println (_serialBuffer0);
         Serial1.println(_serialBuffer0);
      }
   }
}

fliege_m:
Ich habe ihn an

D0 = RX
D1 = TX

Was mich wundert, wenn ich mein Handy per Bluetooth verbinde, hört der HC 06 Stick auf zu blinken. Der blinkt sobald er Strom bekommt, wenn ich ihn mit dem Handy verbinde blinkt die LED nicht mehr, ist auch im Video zu sehen.

Upps, dann haste aber Schwein das beim flashen nichts schief geht. Bzw. mußte immer sicherstellen, dass beim flashen das BT Modul nicht dazwischen funkt. Am besten immer die beiden Pins frei machen beim flashen.

Ich dachte du willst von einer seriellen zur anderen was schicken. Dein BT Modul hängt an Hardware Serial.
Darauf lauscht aber der serielle Monitor vom Arduino. Du kannst nur eins von beiden auf die serielle legen.
Dafür sicherlich auch die Lib mit der Software Seriellen. Die nutzt du nur anscheinend nicht. Obwohl das im Code steht.
Alles es konfus Momentan.

Edit:
die stehende/blinkende LED auf dem BT zeigt nur den reinen Status der Bluetooth Verbindung an. Das hat noch nichts zu sagen was die serielle vom BT macht. Das BT Modul übersetzt ja für dich zwischen seriell und Bluetooth.

fliege_m:
Ich habe ihn an

D0 = RX
D1 = TX

Was mich wundert, wenn ich mein Handy per Bluetooth verbinde, hört der HC 06 Stick auf zu blinken. Der blinkt sobald er Strom bekommt, wenn ich ihn mit dem Handy verbinde blinkt die LED nicht mehr, ist auch im Video zu sehen.

Dann ist das wie vermutet dein Problem.
Nimm die ports der SoftwareSerial.

Vielen Dank für die Hilfe.

Was mir aufgefallen ist, das der "Typ" im Video einen anderen Code benutzt hat, als wie der aus seinem Download. Ich habe jetzt den HC06 an meinen UNO so angeschlossen.

In meinem Code ist ja auch Pin 10 und 11 belegt, aber trotzdem weiterhin ohne Erfolg. Hat vll noch jemand eine Idee ? Das Programm was ich mit Appinventor geschrieben habe, habe ich auch nochmal mit dem im Video verglichen, das stimmt so.

Ich bin mir nicht sicher, ob die Serielle richtig angeschlossen ist.
Hast du TX und RX mal getauscht?

Hallo,

mein HC06 hatte ich wie folgt angeklemmt. Der verträgt 5V.
BT D0 an Arduino RX und
BT D1 an Arduino TX.

Laut Arduino Beschriftung ist TX D1 und RX D0. Wenn bei 10 und 11 die Logik gleich ist, dann wäre dein TX und RX richtig angeklemmt. Nur kenne ich die software serielle Lib nicht. Kannst ja mal TX und RX vertauschen.

Haste im Terminal Linefeed eingestellt als Eingabeabschluss?

Übrigens, welches HC06 Modul hast du genau?

Ich habe dieses Modul GW 040
http://www.ebay.de/itm/301703350188?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Haste im Terminal Linefeed eingestellt als Eingabeabschluss?

Wie kann ich das einstellen ?

Als Test kann man auch erst mal die Schnittstellen ineinander umleiten:

SoftwareSerial softSerial(10, 11);

void setup()
{
  Serial.begin(9600);
  softSerial.begin(9600);
}

void loop()
{
   if(Serial.available())
   {
      softSerial.write(Serial.read());
   }

   if(softSerial.available())
   {
      Serial.write(softSerial.read());
   }
}

Dann erscheint alles was man im Serial Monitor eintippt auf BT und alles was man auf BT eintippt im Serial Monitor.

Wenn das geht kann man ein komplexeres Programm nehmen

Bei softSerial macht mein Programm Probleme, da es nicht kompiliert wird.

Wie kann ich das auf meinem Handy auslesen, wenn ich was im Serial Monitor eintippe ?

Denke bitte mal etwas selbst mit

Das #include hatte ich vergessen:

#include <SoftwareSerial.h>

Sowas sollte man selbst merken

Ja entschuldigung bin noch neu auf dem Gebiet. Habe jetzt meinen Computer per Bluetooth mit dem Stick verbunden. Jetzt brauche ich ein Programm um etwas von dem seriell Monitor meines Arduinos zu senden auf den Pc oder ?