German Serielle Daten per BT einlesen und Anzeigen

charly_01

New Member
Hallo,

ich möchte gerne Daten die per Bluetooth (BT) von einem Arduino kommen auf dem Tablet/Smartphone darstellen. Es werden immer 9 Daten nacheinander gesendet wobei zwei Strings jeweils den Start und das Ende markieren. Es bleiben also 7 Nutzdaten.

Die Daten werden wie folgt als String gesendet und mit einen CRLF je Zeile abgeschlossen:

START (hier beginnen die Daten)
45 (Darstellung in Label1)
0.8 (Darstellung in Label2)
79 (Darstellung in Label3)
23 (Darstellung in Label4)
15 (Darstellung in Label5)
4 (Darstellung in Label6)
0.05 (Darstellung in Label7)
ENDE (Daten fertig übertragen)

Ich habe es mit dem SerialExample versucht aber komme mit der Auswertung nicht weiter. BT Verbindung bekomme ich schon hin, nur das Verteilen der Einzeldaten in die Labels macht mir Schwierigkeiten. Die Frage ist also wie kann ich alle Daten zwischen START und ENDE in einem Array speichern. Die Daten werden alle 5 sec. neu vom Arduino gesendet und ändern natürlich Ihren Inhalt und somit sollen sich dann auch alle 5 sce. die Labels aktualisieren bzw. wenn neue Daten im Puffer vorliegen sollen sie abgerufen und dann angezeigt werden.

Ich bedanke mich schon mal für eure Hilfe.

LG Charly
 

eurojam

Well-Known Member
Licensed User
Hallo Charly,
das sollte eigentlich nicht all zu viele Schwierigkeiten bereiten. Ich gehe mal davon aus, dass Du den String in der App lesen kannst als String. Dann wandelst Du ihn erst Mal in eine Liste um, das geht mit der stringfunctions Lib, wobei der CRLF als Delimiter dient:
B4X:
Dim l As List
Dim sf As StringFunctions
sf.Initialize
l = sf.Split(mystring,(Chr(13)& Chr(10)))
Log(l.Size)
Die 7 Labels würde ich in einer map halten und immer bei neuen Daten nur Texteigenschaft der 7 Labels ändern.

Viele Grüße
stefan
 

Harmlos

Member
Licensed User
ich hätte auch gedacht als Liste aber die umwandlung von eurojam kannte ich noch nicht *Daumen hoch*

ich bin grad an was ähnlichem dran. Wenn du (wie auch empfohlen) mit asyncstream arbeitest solltest du keine Probleme haben. Wird dann direkt bei eingehenden Daten ein Event aufgerufen, in dem du dann deine Labels aktualisieren kannst, dann könntest du dir die Zwischenspeicherung in einem Array sparen wenn du die Daten nicht anderweitig brauchst. Kannst se dann direkt vor Ort "zerflücken"
Ansonsten musst du dein Problem nochmal etwas genaure beschreiben

P.S. bei mir sieht das zum bespiel so aus, ich kriege 20 mal pro sec aktuelle Werte von 2 Arduinoeingängen z.B. ?A1023 <- Eingang A = 1023:
B4X:
Sub asyncstream_NewText(Text As String)
If Text = "" Then
    'verhindert fehler bei leeren text
   
Else If Text.Contains("?A") Then 'Regler A
    Text = Text.SubString(2) 'die ersten analyse Zeichen entfernen
    Empfangsdaten = Text
    Empfang_A 'Rergler A Aufrufen
    Senden_A  'Sub zum Stellgröße senden aufrufen
   
Else If Text.Contains("?B") Then 'Regler B
    Text = Text.SubString(2) 'die ersten analyse Zeichen entfernen   
    Empfangsdaten = Text
    Empfang_B 'Regler B Aufrufen
    Senden_B  'Sub zum Stellgröße senden aufrufen
   
Else
    ToastMessageShow("Empfangsdaten fehlerhaft", False) 'fehler -> Text nicht zuordenbar
End If

End Sub
 
Top