Ich habe Arduino mit einem HC-06 Bluetooth-Modul verbunden.
Ich möchte Daten von einer Android-Anwendung, die ich geschrieben habe, an den Arduino senden und Arduino abhängig von den empfangenen Daten Dinge tun lassen. Bisher sende ich Integer-Werte zwischen 0 und 1024.
Leider endet mySerial.read() hier nicht. Es liest die Daten als eine große Zeichenfolge.
Meine Module RX- und TX-Pin sind mit meinem Arduinos RX- und TX-Pin verbunden. (Die Konsole zeigte keine Daten, als ich sie an Port 10 und 11 anschloss, also dachte ich, SoftwareSerial definiert so den RX- und TX-Port von Arduino ...)
Meine Skizze:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
char character;
void setup()
{
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}
void loop() // run over and over
{
String Data = "";
while(mySerial.available()) {
character = mySerial.read();
Data.concat(character);
// Serial.println(Data);
Serial.println("foo");
}
Dies wird ausgeben:
154888143201270341421501588671750825906975101110241005969922864792711629540451369290213140600
Ich kann diese Daten nicht richtig lesen und ich kann die Daten nicht an eine Funktion parsen, um sie zu verarbeiten, weil mySerial.read() nicht zu Ende geht. Es muss einen besseren Weg geben, diese Daten zu empfangen oder zu senden.
Meine Bluetooth-Ausgangsstromquelle:
public void sendPWM(int progress) {
OutputStream tmpOut = null;
try {
tmpOut = mmSocket.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("error", "NO OUTPUT STREAM", e);
e.printStackTrace();
return;
}
try {
// byte[] buffer = stringToBytesUTFCustom("1");
byte[] buffer = String.valueOf(progress).getBytes();
tmpOut.write(buffer);
// tmpOut.flush(); /*I have turned this ON and OFF, to see if it
// makes any difference*/
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("error", "EXCEPTION DURING WRITE", e);
e.printStackTrace();
}
}
Ich schließe den outputStream nicht, da dadurch auch die Verbindung zum HC-06 abgebrochen wird und ich sehr viele Daten senden muss. Ich kann nicht zulassen, dass sich der Benutzer jedes Mal neu mit dem Modul verbindet, wenn er Daten sendet. Können Sie mir hier weiterhelfen?
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
String Data = "";
void setup()
{
mySerial.begin(9600);
}
void loop() // run over and over
{
while (mySerial.available())
{
char character = mySerial.read(); // Receive a single character from the software serial port
Data.concat(character); // Add the received character to the receive buffer
if (character == '\n')
{
Serial.print("Received: ");
Serial.println(Data);
// Add your code to parse the received line here....
// Clear receive buffer so we're ready to receive the next line
Data = "";
}
}
}
\n
...Ich weiß, es ist ein bisschen alt, aber ich habe es funktioniert.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
String data = "";
void setup()
{
mySerial.begin(9600);
}
void loop() // run over and over
{
while(mySerial.available()==0)
{}
char character;
while(mySerial.available()>0)
{
character = mySerial.read();
mySerial.write(character);
}
data += character;
if (character == 13) {
mySerial.print("Received: ");
mySerial.println(data);
data = "";
}
}
PeterJ
Wolfen
+"\r\n"
meiner Zeichenfolge hinzu. Dies fügt nur eine Pause hinzu und hört nicht aufmySerial.read();
fm_andreas
Wolfen
fm_andreas