SOLVED: Sketch läuft prima mit HC-06 Bluetooth, jedoch nicht mit HM-10

Guten Morgen,

ich experimentiere seit einiger Zeit mit zwei verschiedenen BT-Modulen (HC-06 und HM-10) herum und das klappt auch (fast) perfekt, um den Farbwechsel an einer LED-Installation zu steuern.
Fast nur deshalb, weil mit dem HM-10 ein für mich unerklärliches Verhalten auftritt, das ich nicht abstellen kann. Vielleicht habt Ihr eine nachvollziehbare Erklärung dafür, auch wenn das jetzt keine sketchbezogene Frage ist?

Ich möchte sowohl Bluetooth-Eingaben vom Handy auslesen und verarbeiten, als auch Eingaben per Pushbutton, wenn das Handy nicht mit dem BT-Modul verbunden ist.
Per Handy kann ich die Farben selbst wählen, ohne Handy findet ein automatischer Farbwechsel statt, und per Pushbuttondruck kann ich die Farben einzeln nacheinander durchschalten, wobei die Routine nach der letzten Farbe wieder auf automatischen Wechsel schaltet.

Gleichzeitig will ich sowohl per Android als auch per iOS steuern können, daher möchte ich gerne das HM-10 verwenden, was mit beiden Systemen prima steuerbar ist.
Am Nano ist das BT-Modul per SoftwareSerial angebunden, der Pushbutton wird über die Bounce2-Bibliothek debounced. Stabile externe Stromversorgung per geregeltem Netzteil besteht.

Das Ganze funktioniert absolut wunschgemäß und zuverlässig mit dem HC-06 Modul - sowohl mit Handy (hier nur Android) als auch ohne. Mit dem HM-10 Modul läuft der Sketch jedoch nur einwandfrei, so lange das HM-10 mit dem Handy verbunden ist.
Doch sobald ich die BT-Verbindung zwischen Handy und HM-10 trenne, funktioniert der automatische Farbwechsel nicht mehr - die Farben wechseln entweder gar nicht, nur teilweise oder völlig unkontrolliert. Der manuelle Input per Pushbutton klappt hier ebenfalls nicht zuverlässig... als würde das HM-10 bei getrennter BT-Verbindung unkontrolliert Signale an den Nano senden.

Ich bin mir ziemlich sicher, dass dieses Verhalten nicht am Sketch liegen kann, da dieser mit dem HC-06 ja 100%-ig funktioniert. Aber auch das HM-10 Modul sollte ja eigentlich in Ordnung sein, weil bei bestehender BT-Verbindung ja ebenfalls alles wunschgemäß läuft. Auch andere Pins bzw. Nanos habe ich ausprobiert mit identischem Fehlerverhalten.

Habt Ihr irgendeine Idee, was ich noch ausprobieren könnte? Ich bin recht ratlos, allerdings habe ich auch nur ein einziges HM-10 hier.
Oder gibt es eine Möglichkeit, den Status einer aufgebauten bzw. getrennten BT-Verbindung irgendwie in einem Sketch auszuwerten?

Herzlichen Dank im Voraus für Eure Anregungen.

Viele Grüße

Chris

EDIT: Ist das HM-10 physisch vom Nano getrennt, läuft der Sketch ebenfalls problemlos...SOLVED:

Nun, wenn das HM-10 im nicht verbundenen Zustand unkontrolliert Daten an den Nano sendet (oder vlt auch eine mitteilung , dass eben keine Verbindung besteht, dann musst du das eben in deinem Sketch bei verwendung des HM-10, speziell abfragen, resp. abfangen und dafür sorgen, dass dein sketch dann den datenstrom richtig auswertet.

Ob und was das HM-10 im nichtverbundenen Zustand an den Nano sendet, kannst du herausfinden, indem Du nen minimal Sketch auf den nano lädtst, der Dir anzeigt, was das HM-10 alles übermittelt. dann siehst du ja, ob und was es dan überträgt, wenn die Verbindung fehlt. Und das must Du dann in Deinem Sketch entsprechend behandeln.

Mehr kann ich nicht dazu sagen, ich habe weder ein HM-10 da, noch sehe ich, was Dein Sketch genau macht.

LG Stefan

Hallo Stefan,

vielen Dank für deine Antwort. Ich habe deinen Rat befolgt und mal per Minimalabfrage geguckt, was an Zeichen im Serial Monitor ausgegeben werden, wenn die BT-Verbindung gar nicht besteht... und siehe da, es werden tatsächlich sporadisch zufällige einzelne Zeichen vom HM-10 gesendet, obwohl keine Aktion durchgeführt wird!
Darunter sind auch Zeichen, die vom Sketch (wie geplant) auswertbar sind und dann zwangsläufig zu den merkwürdigen Aktionen führen.
Ich könnte das Ganze sicher dadurch umgehen, indem ich anstatt einzelne Zeichen eine Folge aus zwei Zeichen (z.B. 'ab' anstatt 'a') vom Handy sende und vom Sketch auswerten lasse, allerdings habe ich keine Ahnung, wie man das in Code fasst. Zwei Zeichen würde ja genügen, weil das die einzelnen wirren Zeichen des BT-Moduls ins Leere laufen lassen würde. Muss ich das über einen String machen?

Viele Grüße

Chris

Das Beste wäre, wenn Du Deine Sendung zusätzlich mit einem Zeolenmvorschub (NL,'\n') abschließt.
Dann könntest Du mit readBytesUntil bis zu diesem Endezeichen einlesen.
Beispiel:

char input[4];
...

if (mySerial.available()) {  // mySerial ist hier nur Platzhalter für Deine serielle Verbindung
  byte anzahl = mySerial.readBytesUntil('\n',input,sizeof(input-1));
  input[anzahl-1] = '\0'; // Terminator setzen
  if (!strncmp(input,"an",2) {
    // an\n wurde gesendet
  }
}

Gruß Tommy

Edit: Typos im Code

Hallo,

ich habe das Senden von zwei anstatt eines Zeichens elegant mit Hilfe der ArduinoSerialCommand Bibliothek lösen können. Es werden zwar immer noch wirre Zeichen vom HM-10 gesendet, aber die werden nicht mehr ausgewertet. Insofern hat sich das Problem erledigt.

Danke an alle für's Lesen und besonders für die Antworten von Stefan und Tommy :slight_smile:

Viele Grüße

Chris

Schön, dass es funktioniert und danke für die Rückmeldung.

Gruß Tommy

Hallo Chris,
schliesse mich Tommy an, freue mich dass es nun geht und danke für die Rückmeldung.

LG Stefan