Hallo zusammen, vielleicht kann mir ja hier geholfen werden, ich hoffe es sehr.
Ich dachte es ist eigentlich keine schwierige Sache, aber ich dreh mich grad im Kreis.
µC via Bluetooth sendet ->>> BINÄR - Werte->>> an Handy.
Binär-Werte: 8 Bit. (1stop/1Startbit).
Handy soll diese Binär-Werte empfangen und auf SD-Karte speichern.
Entweder, gleiches Format in Binär, Hex oder DEC.
Funktioniert soweit, so gut.
Das Problem ist, dass beim Empfangen die Daten als STRING interpretiert werden und dadurch “UNSINN” auf der Karte hinterlegt wird.
Eine 0b11111111 (FF) führt dazu, dass Folgendes auf die SD-Karte hinterlegt wird: ef bf bd.
Strings werden korrekt gespeichert ( logisch, jedoch brauch ich die gar nicht).
Also Problem bekannt, Lösung wäre:
Die Werte ungestringt und im gleichen Format zu speichern, leider muss ich sagen, dass mir das als Java-Anfänger Probleme bereitet.
Meine Versuche diesen Code zu ändern führten entweder dazu, dass die App abstürzt, Error, gar nichts gespeichert wird, kein Ordner hinterlegt wird oder keine Änderung eintrifft…
wie geht das den richtig? Rohwerte speichern, muss man in String formatieren? Gar nicht formatieren? Bin in Dec, dann in String??
Eins vorab, auf der µC-Ebene können die Werte nicht in String gewandelt werden aus Timing-Gründen.
Die Werte sind korrekt und werden auch im Terminal richtig dargestellt, der ERROR beim Übertragen liegt bei 0%.
Es liegt also definitiv am Code und der Formatierung.
Vielen Dank im Voraus.
Der relevante Codeschnipsel:
Handler() {
public void handleMessage (android.os.Message msg){
switch (msg.what) {
case RECIEVE_MESSAGE:
// wenn Daten empfangen werden
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1);
// erstelle String aus Bytes Array
sb.append(strIncom); // String anhängen
int endOfLineIndex;
String path = "/sdcard/" + dateipfad.getText().toString() + ".txt"; //Environment.getExternalStorageDirectory().getPath()
while ((endOfLineIndex = sb.indexOf("0")) >= 0) { // wenn end-of-line,
String sbprint; // extrahiere String
sbprint = sb.substring(0, endOfLineIndex);
sb.delete(0, sb.length()); // und löschen
///////Messwertedatei beschreiben//////////
try {
File myFile = new File(path);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile, true);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
myOutWriter.write(sbprint);
myOutWriter.close();
fOut.close();