Bluetooth Empfangsprobleme

Moin moin zusammen…
ich habe mit einem Arduino Nano und einem HC-05 eine Steuerung für LEDs aufgebaut. Zusätzlich habe ich eine Android App gebastelt, die Helligkeit und so steuern kann. Jetzt habe ich das Problem, das dieses nicht mehr zuverlässig funktioniert. Das Problem liegt am Arduino oder am Bluetooth Modul.

Das Empfange ich das wollte ich empfangen

bluetooth available
Modus:2
se05
se07
Modus:1
s²˜3:˜00:000:255
se˜™:255:000:000
se˜3:000:255:000
¹e0™�000:000:255
¹e0™š255:255:255
se˜3:255:000:000
se˜3:0˜0:2š5:000
s²03:˜00:000:255
s²03:™55:000:000
s²03:˜00:255:000
s²03:˜00:000:000
s²05

bluetooth available
Modus:2
se05
se07
Modus:1
se03:000:000:255
se03:255:000:000
se03:000:255:000
se03:000:000:255
se03:255:255:255
se03:255:000:000
se03:000:2š5:000
se03:000:000:255
se03:055:000:000
se03:000:255:000
se03:000:000:000
se05

Zum senden habe ich schon diverse Sachen versucht. Zum einen meine App zum anderen aber auch ein Bluetooth Terminal. Zudem habe ich auch andere Bluetooth Geräte getestet.

Die Stromversorgung läuft momentan noch nur über USB und betreibt den Arduino, das Bluetooth Modul eine WS2812 5mm LED und einen Summer. Später wird das Umgebaut und mit einem Computer Netzteil mit Strom versorgt.

Die Einstellungen vom HC05 sind immer noch Standard. Baud 9600 und der Pin mit 1234.

#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>
#include <string.h>

#define ledPin 12
#define SoundPin 11
#define rxPin 2
#define txPin 3
#define NUM_PIXELS 3

// Anpassbare Variablen

int brightness = 80;    // default Helligkeit
int red = 111;          // default RGB für rot
int green = 222;        // default RGB für grün
int blue = 333;         // default RGB für blau
int modus = 2;          // welcher Modus am start?

int LEDspeed = 50;      // default geschwindigkeit

bool power = true;      // Beim Starten LEDs an?
bool motor = false;     // Beim Starten Motor an?
bool sound = true;      // Beim Bluetooth Verbinden Sound?
  
// ----------------------------------------------------------
// System Variabeln (nichts mehr verändern)
// ----------------------------------------------------------
String Setting;
String brightness2; 
String color;
int LastModus;

unsigned long FadeMillis = 0; 

SoftwareSerial btSerial(rxPin, txPin);
String btData;

// Zähler
int i;                   // LEDs durchgehen
int j = 0;               // Fade Farbe durchgehen

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, ledPin, NEO_RGB + NEO_KHZ800);

void setup() {
  pinMode(ledPin,OUTPUT);
  pinMode(SoundPin,OUTPUT);
  digitalWrite(SoundPin, HIGH);
  
  btSerial.begin(9600);
  btSerial.println("bluetooth available");
  Serial.begin(9600);
  Serial.println("bluetooth available");
  
  strip.begin();
  strip.setBrightness(brightness);
  strip.show();
}

void loop() {
  if (btSerial.available()){
    btData = btSerial.readString();
    Serial.println(btData);
    
    Setting = btData.substring(0,4);  
    if(Setting == "se01"){power=true;}     // Einschalten
    if(Setting == "se00"){power=false;}

Ich hoffe einer Kann mir weiterhelfen. für mich sieh es nach codierungs Problemen wie bei Html aus. Aber ich wüsste nicht wo die herkommen.

Baudrate bei SoftSerial runter. Oder AltSoftSerial nutzen

Die Baud noch weiter runter? gibt es da noch was?

werde mir die AltSoftSerial mal ansehen.

So… ich habe noch einiges Ausprobiert. Leider hat nichts funktioniert.

In meinem Script habe ich SoftSerial gegen AltSoftSerial getauscht. Keine Kommunikation zwischen BT Modul und Arduino. Habe momentan aber leider auch nur den Nano zur Verfügung. Da kenne ich die Standard Pins nicht.

In den AT Modus komme ich auch nicht rein. Habe alle gängigen Bauds ausprobiert. nur auf der Baud 9600 bekomme ich Daten empfangen, die aber von eine anderen Gerät verschickt werden. Hier aber auch wieder mit den Kodierungs Problemen.

/*
 AUTHOR: Hazim Bitar (techbitar)
 DATE: Aug 29, 2013
 LICENSE: Public domain (use at your own risk)
 CONTACT: techbitar at gmail dot com (techbitar.com)
 */


 #include <SoftwareSerial.h>

 SoftwareSerial BTSerial(2, 3); // RX | TX

 void setup()
 {
   pinMode(4, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
   digitalWrite(4, HIGH);
   Serial.begin(9600);
   Serial.println("Enter AT commands:");
   BTSerial.begin(38400);  // HC-05 default speed in AT command more
 }

 void loop()
 {

   // Keep reading from HC-05 and send to Arduino Serial Monitor
   if (BTSerial.available())
     Serial.write(BTSerial.read());

   // Keep reading from Arduino Serial Monitor and send to HC-05
   if (Serial.available())
     BTSerial.write(Serial.read());
 }

Ich habe mir gestern ein neues Bluetooth Modul bestellt. einen HC-06 mal gucken, ob ich mit dem Besser zurecht komme. Da ich momentan eh nur Will, das ich selber die Verbindung aufbaue sollte der eigentlich passen.

Mavericklp:
So... ich habe noch einiges Ausprobiert. Leider hat nichts funktioniert.

Was hast du alles probiert?

In meinem Script habe ich SoftSerial gegen AltSoftSerial getauscht. Keine Kommunikation zwischen BT Modul und Arduino. Habe momentan aber leider auch nur den Nano zur Verfügung. Da kenne ich die Standard Pins nicht.

Dafür gibt es Pinouts. Poste mal den Link deines Nanos. Pinout Nano
Und AltSoftSerial sehe ich nicht.

In den AT Modus komme ich auch nicht rein. Habe alle gängigen Bauds ausprobiert. nur auf der Baud 9600 bekomme ich Daten empfangen, die aber von eine anderen Gerät verschickt werden. Hier aber auch wieder mit den Kodierungs Problemen.

Wie soll das auch funktionieren, wenn du 38400 Baud eingestellt hast.

So da die lieferung des Moduls sich ein wenig verzögert hat, habe ich leider erst jetzt neue Ergebnisse. Und bin sogar einen Schritt weiter.

Nach einigen Stunden habe ich alles gegen die Wand geworfen und habe mir noch einen Originalen Arduino Nano und einen Sparkfun Bluesmirf Silver bestellt. Am Anfang war alles super! Bis zu dem Zeitpunkt, als ich meinen Arduino Code wieder benutzen wollte.

Das Problem liegt an der funktion btData = btSerial.readString(); in Zeile 70. Die funktion funktioniert teilweise, aber die meiste Zeit bekomme ich irgendwelche hyroglyphen.

Wenn ich nur btSerial.read(); benutze, bekomme ich die Ascii Nummer ausgegeben. Dann habe ich keine Probleme mehr. Alles wird 1 zu 1 durchgeleitet. Aber nicht in der Form, das ich die Daten auswerten kann.

Angeschlossen ist der Arduino über Pin VIN mit 12V an einem Computer Netzteil. 5V vom Netzteil versorgen auch die LEDs. Der Arduino bekommt also 12V über VIN und 5V über USB. Den Arduino ohne USB zu betreiben macht kein unterschied. Software Seriel kommuniziert über Pin 2 und 3.

#include <SoftwareSerial.h> 
#include <Adafruit_NeoPixel.h>
#include <string.h>

#define ledPin 12
#define SoundPin 11
#define bluetoothRx 3
#define bluetoothTx 2
#define NUM_PIXELS 19

// ----------------------------------------------------------
// Anpassbare Variablen
// ----------------------------------------------------------
int brightness = 80;    // default Helligkeit
int red = 111;          // default RGB für rot
int green = 222;        // default RGB für grün
int blue = 200;         // default RGB für blau
String modus = "mo01";          // welcher LED Modus am start?

int LEDspeed = 50;      // default LED geschwindigkeit

bool power = true;      // Beim Starten LEDs an?
bool motor = false;     // Beim Starten Motor an?
bool sound = true;      // Beim Bluetooth Verbinden Sound?

// ----------------------------------------------------------
// Zähler Variabeln
// ----------------------------------------------------------
int i;                   // LEDs durchgehen
int j = 0;               // Fade Farbe durchgehen

// ----------------------------------------------------------
// System Variabeln (nichts mehr verändern)
// ----------------------------------------------------------
String Setting;
String brightness2; 
String color;
String btData;
int LastModus;

unsigned long FadeMillis = 0; 

SoftwareSerial btSerial(bluetoothTx, bluetoothRx);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, ledPin, NEO_RGB + NEO_KHZ800);

void setup() {
  pinMode(ledPin,OUTPUT);
  pinMode(SoundPin,OUTPUT);
  digitalWrite(SoundPin, LOW);
  
  Serial.begin(9600);
  Serial.println("Serial available");

  btSerial.begin(115200);  // The Bluetooth Mate defaults to 115200bps
  btSerial.print("$");  // Print three times individually
  btSerial.print("$");
  btSerial.print("$");  // Enter command mode
  delay(100);  // Short delay, wait for the Mate to send back CMD
  btSerial.println("U,115200,N");  // Temporarily Change the baudrate to 9600, no parity
  btSerial.begin(115200);  // Start bluetooth serial at 9600
  btSerial.println("bluetooth available");
  
  strip.begin();
  strip.setBrightness(brightness);
  strip.show();
}

void loop() {
  if (btSerial.available()){
    btData = btSerial.readString();
    Serial.println(btData);
// ----------------------------------------------------------
// Allgemeine funktionen
// ----------------------------------------------------------
    Setting = btData.substring(0,4);  
    if(Setting == "se00"){power=false;}    // LEDs Ausschalten
    if(Setting == "se01"){power=true;}     // LEDs Einschalten
    if(Setting == "se02"){

@HotSystems
Die Scripte, in denen ich AltSoftSerial benutzt habe, habe ich nicht gepostet. Auf der Webseite, von der Libary standen die Pins drauf die Verwendet werden können. Außer für den Nano. Daher kannte ich die Pins nicht. Die Pins 2 und 3 sind jedoch die Einzigen Digitalen Pins, die ich noch verwenden kann.

Laut allen unterlagen, ist Baud 38400 die Standardeinstellung für den HC-05 im AT-Mode.

So ich habe rausgefunden, das es an der verwendung von der Adafruit_Neopixel Libary (bzw. FastLED) und der Bibliothek Softserial liegt.

Wenn keine LEDs angesprochen werden und alle Schwarz sind, funktioniert der Code ohne Probleme. Sobald aber LEDs leuchten, bekomme ich nur noch kryptische Zeichen