ihr denkt jetzt wahrscheinlich: "Ist der doof? Es gibt schon genug HC-05 Topics".
Ja die gibt es und ich habe auch schon darin gestöbert um mein Problem zu lösen.
Aber es geht nicht.
Ich habe schon einiges mit dem Arduino gemacht, aber hier geht nichts.
Folgendes: Ich habe mir das Bluetooth Modul gekauft, um damit über mein Smartphone und später über das Movi Shield ein Relais Modul anzusteuern. Das soll dann eine Lampe oder irgendwas anderes anschalten.
Leider funktionieren bei mir bereits die einfachsten Sachen nicht.
Ich kopiere einen beliebigen Code aus dem Internet und lade ihn auf meinen Arduino.
Dann öffne ich die App "Serial Bluetooth Terminal". Das Modul wird von meinem Smartphone erkannt und ich sende einen Text von meinem Smartphone.
Ich habe dann je nach ankommendem Text eine Antwort, die dann an mein Handy geschickt werden soll.
Im Monitor steht der Text den ich verschickt habe, aber es kommt keine Antwort an, egal was ich mache.
Ich hoffe ihr könnt mir weiterhelfen. Vielen Dank schonmal!
Peter ich danke dir schon mal, werde es mal ausprobieren.
Ich hab mir zwar schon gedacht, dass das Programm noch irgendwas von mir erwartet, aber was das war wusste ich nicht.
Ich sende das Wort led_on und empfange es auch im seriellen Monitor, habe deinen Code eingebaut, aber ich bekomme keine Rückmeldung. Theoretisch müsste ich doch das Signal "LED turned on" auf mein Handy bekommen.
Ich glaube das Programm erkennt den Unterschied zwischen led_on und led_off nicht.
Wenn ich es so probiere, dann steht im seriellen Monitor "Received:" und es wird dauerhaft um eine Zeile ergänzt. Gebe ich dann led_on ein, dann steht da "Received: led_on" und das wird auch dauerhaft Zeile um Zeile ausgegeben.
Allerdings bekomme ich noch immer nicht die Antwort "LED turned on".
ich vermute es gibt noch mindestens ein Zeichen hinter dem sichtbaren Text und vor dem "\n" das Du nicht siehst, damit ist die if Bedingung dann nicht erfüllt.
Lese doch die Zeichen mal einzeln ein und lass die die Hex Werte anzeigen.
Habe mir mal den String vom Telefon in HEX ausgeben lassen - und siehe, das ReadUntil lässt noch ein 0x0D am Ende des Strings übrig. Also fix den String um ein Zeichen verkürzt:
21:11:17.121 -> Received:led_on
21:11:17.121 -> 6C 65 64 5F 6F 6E D
21:11:17.121 -> LED turned on
21:11:24.533 -> Received:led_off
21:11:24.533 -> 6C 65 64 5F 6F 66 66 D
21:11:24.533 -> LED turned off
Der Text ist so aus dem Monitor herauskopiert. Die Leerzeilen nach den "Received:"-Zeilen sieht man da nicht - die kommen von genau diesem zusätzlichen Zeichen.
Gruß Walter
Ach so: Die paar anderen Codeänderungen kommen vom Leonardo und meinem HC05-Modul; wollte es nicht extra umkonfigurieren.
Nö, man sollte sich nicht auf die String-Funktionen verlassen, sondern sauber selbst einlesen und außer dem Ende-Zeichen ('\n') alle Steuerzeichen unterdrücken.
Das Ganze in ein Char-Array und der Empfänger ist glücklich.
Mit dem Betrübssystem hat das überhaupt nichts zu tun. Wäre ja schlimm, wenn der Arduino nur von LINUX empfangen kann und nicht von Windows oder umgekehrt.
Es geht vermutlich sogar noch einfacher (habe etwas mit dem Terminal-Programm rumgespielt; hübsch das ist!).
Da kann man für das Senden den NewLine auch auf NONE stellen - und dann geht es auch ohne die substring()-Spielerei.
22:03:50.304 -> Received:led_on
22:03:50.304 -> 6C 65 64 5F 6F 6E
22:03:50.304 -> LED turned on
22:03:57.732 -> Received:led_off
22:03:57.732 -> 6C 65 64 5F 6F 66 66
22:03:57.732 -> LED turned off
ich danke euch, es hat funktioniert, nachdem ich die Bluetooth Terminal App umgestellt habe!
Ich werde auch die anderen Lösungsvorschläge noch ausprobieren und nochmal Bescheid geben, aber das hier war bisher die größte Hürde meiner Steuerung.
Vielen Dank für eure Hilfsbereitschaft!