HC05 Bluetooth Modul

Kann es sein, dass der HC05 eine maximale Anzahl an Bits hat, die er auf einmal übertragen kann(also ohne kurzen delay dawischen), bzw. dass diese maximale Anzahl bei 64 liegt?

Klaus1207: Kann es sein, dass der HC05 eine maximale Anzahl an Bits hat, die er auf einmal übertragen kann(also ohne kurzen delay dawischen), bzw. dass diese maximale Anzahl bei 64 liegt?

Warum sollte das so sein ? Ich vermute du hast einen Fehler in deinem geheimen Sketch.

Die Daten kommen von einer App als einfacher string überliefert...mit dem Arduino Sketch nehme ich sie dann wiefolgt an und geben sie über den seriellen Monitor wieder aus:

if(Serial.available()>0)
{
    Input = "";
    Input = Serial.readString();
    Serial.println("Input: " + Input);
}

Allerdings sobald der von der App kommende String länger als 64 Zeichen ist, wird er nicht mehr vollständig gesendet und einfach bei 64 abgeschnitten.

Klaus1207: Die Daten kommen von einer App als einfacher string überliefert...mit dem Arduino Sketch nehme ich sie dann wiefolgt an und geben sie über den seriellen Monitor wieder aus:

if(Serial.available()>0)
{
    Input = "";
    Input = Serial.readString();
    Serial.println("Input: " + Input);
}

Allerdings sobald der von der App kommende String länger als 64 Zeichen ist, wird er nicht mehr vollständig gesendet und einfach bei 64 abgeschnitten.

Ist das der ganze Sketch ?

Und 64 Zeichen sind schon mal 64 Byte, nicht Bit. Das ist ein großer Unterschied.

Das Programm ist mittlerweile relativ lang, da der Arduino auch noch eine DS3231, ein Relais und eine LPD8806 anspricht. Allerdings ist dies für das aktuelle Problem irrelevant, da das HC05 Modul das Einzige ist, welches über die seriellen Pins des Arduinos kommuniziert. Ansonsten natürlich die Einbindung der HC05 Bibliothek, aber auch das kann den Fehler nicht verursachen, da grundsätzlich ja alles funktioniert, nur ab einer bestimmten Anzahl an Zeichen einfach abgebrochen wird.

Ok sorry mein Fehler :D ...hab mal wieder Byte mit Bit verwechselt...

Die HC05-Lib hat einen 32 Byte Puffer. Wenn der überläuft, könnte Mist raus kommen.

char _buffer[32];

Auch die serielle Schnittstelle hat eine Pufferbegrenzung von 64 Byte, soweit mir aber bekannt ist, kann man die erweitern.

Ok danke, dann muss ich mir etwas anderes überlegen…die Daten auf 2 Mal schicken oder so.

Mir ist noch nicht klar, wer die Daten sendet, und wann, wo und warum was verloren gehen soll.

Strings und readString sind sowieso eher ein Problem als eine Lösung.

Der interne 64 byte- Empfangspuffer sollte kein Engpass sein. Wenn größere Nachrichten vorkommen, darf man halt beim Lesen nicht zuviel trödeln.

Klaus1207: Ok danke, dann muss ich mir etwas anderes überlegen...die Daten auf 2 Mal schicken oder so.

Ja, z.B. oder den Puffer vergrößern.

Ja, den Puffer zu vergrößern wäre wahrscheinlich die beste und unkomplizierteste Lösung meines Problems.

Mir ist noch nicht klar, wer die Daten sendet, und wann, wo und warum was verloren gehen soll.

Die Daten kommen von einer App, die die Benutzereingaben codiert, zum Arduino sendet, wo diese anschließend verarbeitet werden. Es kann und wird eben vorkommen, dass von der App bei weitem mehr als 64 Byte gesendet werden - bis zu ca. 230Byte könnten es werden...das ist dann von den jeweiligen Benutzereingaben abhängig.

Danke für die Idee den Puffer zu vergrößern - werd ich mir anschauen, wie ich das hinbekomme.

Einfacher ist es vermutlich, die Daten schneller zu lesen. Aber das kann keiner hier (ohne mehr Info) wissen.

Aber das kann keiner hier (ohne mehr Info) wissen.

Das Programm ist mittlerweile relativ lang, da der Arduino auch noch eine DS3231, ein Relais und eine LPD8806 anspricht.

Hab vorhin schon gesagt, wie mein Programm in etwa aussieht…ist nur schwer möglich da noch was zu verschnellern :wink:

Hab grade versucht den Buffer zu erhöhen

#define SERIAL_RX_BUFFER_SIZE 256
#define SERIAL_TX_BUFFER_SIZE 256

allerdings hat das, aus welchem Grund auch immer, noch nicht so richtig funktioniert (der String den ich übertragen möchte ist immer noch abgeschnitten)

Der String sieht ungefähr so aus: PZ4,Mo-Do|9:38|0,Mo-Do|9:38|0,Mo-Do|9:38|0,Mo-Do|9:38|0,

Damit kann ich bestimmte Zeiten zu denen der Arduino dann Ausgänge schalten soll über die App festlegen.

Der String könnte maximal 15 socher Zeiten beinhalten (von mir vorher definiert)…diese werden dann einfach mit einem weiterem Beistrich hinten drangehängt und ganz vorne wird bei dem “PZ4” eins dazugezählt -->(PZ5)

Reichen die beiden define die ich oben geschrieben habe aus, um den Buffer zu erweitern oder habe ich da noch was übersehen?

Dann rate ich mal, du schreibst deinen RGB-Strip blockierend oder machst schlimmeres.

Ach ja:

Serial.println("Input: " + Input);

Blockiert natürlich, wenn Input zu groß ist

Serial.println("Input: " + Input);

Blockiert natürlich, wenn Input zu groß ist

Das ist auch nur aus Testzwecken da...wenns dann mal laufen würde wär das ja nicht mehr da...ich habs aber eh auch schon ohne ausprobiert...

Aber die Buffererweiterung müsste eig. so wie ich sie oben geschrieben hab funktionieren oder?

Hi

Woher hast Du denn die define-Zeilen? Diese Angaben müssen ja auch mit Deiner verwendeten Lib zusammen passen - wenn Die nicht Alle von einander abgeschrieben haben, könnte hier schon der Fehler stecken. Prüft die Lib, ob ein anderer Wert vorgegeben wurde und arbeitet dann auch mit Diesem?

MfG

Ich hab einfach gegoogelt und bin auf einen Forumeintrag gekommen wo ich diese Infos vorfand.

Außer diesen beiden Zeilen hab ich nichts geändert…wie kann ich die Lib die Änderungen prüfen lassen?

Musst Müsstest du schon in HardwareSerial ändern. Wie in dem Link von dir beschrieben

In the core library HardwareSerial.h, modify...

ja als ich es dort geändert hatte, funktionierte die Übertragung auch nicht besser