Hallo,
Ich habe das btm222 Bluetooth Modul verlötet und an den Arduino angeschlossen. (Mit Spannungswandler-schaltung, da der btm mit 3,3V und der Arduino (zumindest auf den RX/TX Pins) mit 5V arbeitet.
Ich verwende einen Arduino Uno von Sainsmart.
Ich übertrage nun Werte mit dem Handy (Testfall: 1m Entfernung). Die Werte sind ints von 0-255. Die kommen am Arduino dann als String über die Serielle Schnittstelle (ich nutze Softwareserial auf den Pins 3 und 5, da ich bei Benutzung von 0 und 1 das USB Kabel jedes mal abstecken müsste)
Problem: ganz ab und zu, kommen solche Zeichen an:
Damit die Bits/bytes nicht durcheinander gewürfelt werden, habe ich keine while(Serial.available)
verwendet, sondern lese jeden Loop-durchlauf die ankommenden bytes, und konkatiere sie in einem String namens rx :
character = btm222_serial.read();
rx.concat(character);
Egal wie schnell der Arduino, oder wie langsam die Übertragung mal ist, es wird somit gewartet bis alles da ist. Trennzeichen (wird vom Handy hinter Jede Nachricht gehängt, ist ein Fragezeichen: "?")
Auf dem Arduino so gelöst:
if(character=='?'){
verarbeite(rx);
rx = "";
Damit sollte nichts durcheinander geraten.
Die Zeichen treten trotzdem auf, müssten meiner Meinung nach also Fehler in der BT Übertragung sein. Sind recht selten, kann ich aber überhaupt nicht gebrauchen. Mir würde es reichen, diese Werte zu ignorieren, was ich mit dieser Methode versucht habe:
boolean isValidNumber(String str){
for(byte i=0;i<str.length();i++){
if(isDigit(str.charAt(i))) return true;
}
return false;
}
dazu natürlich #include <ctype.h>
im Kopf eingefügt.
Manchmal funktioniert das, manchmal kommen die Zeichen aber unerkannt durch. vielleicht weil die bytes dann als "tiefgestellte 2" oder ähnlich erkannt werden... Das System darf solche Werte aber nicht bekommen. Ich will solche Werte filtern und ignorieren. Es kommen immernoch genug richtige Werte pro Sekunde an.
Habt ihr Tipps wie ich entweder die BT Übertragung (übrigens mit 38400 BAUD, vorher mit 19200, gleiches Problem) verbessern, oder die Werte richtig filtern kann?
Kann ich seitens des Handys (Android) etwas verbessern ? Sende einfach mit nem Outstream:
byte[] msgBuffer = message.getBytes();
try {
outStream.write(msgBuffer);
Falls es das schon 100x gab, bitte einfach den Link posten. Ich habe bereits stunden gegoogelt und konnte nichts finden, was mich wirlich weiterbringt.