German Wie Gerät am Kopfhöreranschluß auslesen?

MaFu

Well-Known Member
Licensed User
Longtime User
Ich schätze mal du musst mit der Audio Lib eine Aufnahme starten und dann das Audiosignal auswerten.
Um herauszufinden, was die Signalwerte bedeuten, das aufgenommene Audiosignal mehrmals mit den Werten der zugehörigen App bei unterschiedlichen Temperaturen/Luftfeuchte vergleichen.

Wie bist Du mit der Genauigkeit des Teils zufrieden? Laut diversen Berichten sollte man es über ein Verlängerungskabel betreiben, da sonst durch Erwärmung über das Smartphone die Messergebnisse nicht stimmen. Machst Du das so?
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Wie bist Du mit der Genauigkeit des Teils zufrieden?
So weit OK, schön klein zum mitnehmen.
Wenn es mit der Verlängerung richtig die Temperatur und Feuchte anzeigt, dann ist es ganz klar eine Kaufempfehlung wert.

Laut diversen Berichten sollte man es über ein Verlängerungskabel betreiben, da sonst durch Erwärmung über das Smartphone die Messergebnisse nicht stimmen.
Machst Du das so?
Im Moment noch nicht, habe noch keine Verlängerung da.
Die Temperatur ist ca. 2-2,5 Grad höher und die Feuchte ca. 3-5 % weniger
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Wie kann man denn so etwas als Text oder Zahl wieder geben?


B4X:
Sub btnPlay_Click
    btnStartRecording.Enabled = False
    streamer.StartPlaying
    For Each b() As Byte In buffers
        streamer.Write(b)
    Next
    streamer.Write(Null) 'when this "message" will be processed, the player will stop.
End Sub
 

MaFu

Well-Known Member
Licensed User
Longtime User
Die Temperatur ist ca. 2-2,5 Grad höher und die Feuchte ca. 3-5 % weniger
Die rel. Feuchte ist ja von der Temperatur abhängig. Wenn also die Temp. stimmt müsste auch der Feuchtewert weitestgehend passen.
Mit einem Verlängerungskabel sollte die Messung dann genauer sein.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Wie kann man denn so etwas als Text oder Zahl wieder geben?


B4X:
Sub btnPlay_Click
    btnStartRecording.Enabled = False
    streamer.StartPlaying
    For Each b() As Byte In buffers
        streamer.Write(b)
    Next
    streamer.Write(Null) 'when this "message" will be processed, the player will stop.
End Sub

B4X:
' Bytes an String anhängen und als Log ausgeben
    For Each b() As Byte In buffers
        Dim s As String = ""
        Dim len As Int = b.Length
        For i = 0 To len - 1
            s = s + " " + b(i)
        Next
        Log(s)
    Next
Dann musst Du vergleichen, es gibt verschiedenste Möglichkeiten.
  • Jedes Byte entspricht einem Wert
  • Zwei Bytes ergeben einen Wert (das kann dann entweder Hi/Lo oder Lo/Hi sein)
  • Vier Bytes ergeben einen Wert (auch wieder Hi/Lo oder Lo/Hi möglich)
  • Gemischte Länge (ein, zwei oder vier Bytes pro Wert)
  • Nicht nur Werte sondern auch ID-Werte im Array
Das lässt sich aber nur durch Vergleichen mit der Anzeige der original App bei unterschiedlichen Temperaturen herausfinden.
Dazu dürfen sich aber die Werte zwischen den Messungen nicht ändern. Daher solltest Du dafür das Messgerät unbedingt über ein Verlängerungskabel anschließen. Denn wenn Du am Smartphone zwischen Deiner Test-App und der original App wechselst kann die Annäherung Deiner Hand schon zu einem leichten Abweichen der Temperatur führen.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Vielen Dank für deine Mithilfe, werde ich gleich mal testen ob ich überhaupt Werte erhalte!
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Das gibt leider eine Fehlermeldung!

java.lang.NumberFormatException: empty String
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071)
at java.lang.Double.parseDouble(Double.java:547)
at b4a.example.main._btnplay_click(main.java:403)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:166)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
java.lang.NumberFormatException: empty String


Hier mal der gesamte Code

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
 #BridgeLogger: True
 
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private streamer As AudioStreamer
    Private buffers As List
    Private timer1 As Timer
    Private recordingStart As Long
End Sub

Sub Globals
    Dim Label1 As Label
    Dim btnPlay As Button
    Dim btnStartRecording As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
    If FirstTime Then
        streamer.Initialize("streamer", 44100, True, 16, streamer.VOLUME_MUSIC)
        buffers.Initialize
        timer1.Initialize("timer1", 1000)
    End If
End Sub

Sub streamer_RecordBuffer (Buffer() As Byte)
    'collect the recording data
    buffers.Add(Buffer)
End Sub

Sub btnStartRecording_Click
    buffers.Clear
    streamer.StartRecording
    recordingStart = DateTime.Now
    timer1.Enabled = True
    Timer1_Tick
    btnPlay.Enabled = False
End Sub

Sub Timer1_Tick
    Label1.Text = "Recording: " & _
        Round((DateTime.Now - recordingStart) / DateTime.TicksPerSecond) & " seconds"
End Sub

Sub btnStopRecording_Click
    streamer.StopRecording
    timer1.Enabled = False
    btnPlay.Enabled = True
    Label1.Text = ""
End Sub

Sub btnPlay_Click
    btnStartRecording.Enabled = False
    streamer.StartPlaying
    For Each b() As Byte In buffers
        streamer.Write(b)
    Next
 
 ' Bytes an String anhängen und als Log ausgeben
    For Each b() As Byte In buffers
        Dim s As String = ""
        Dim len As Int = b.Length
        For i = 0 To len - 1
            s = s + " " + b(i)
        Next
        Log(s)
    Next
 
    streamer.Write(Null) 'when this "message" will be processed, the player will stop.
End Sub

Sub streamer_PlaybackComplete
    Log("PlaybackComplete")
    btnStartRecording.Enabled = True
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Ich habe trotzdem das Gefühl das es mit der Lib nicht geht. Die Zahlen die da rauskommen sind sehr unplausibel.
Mit oder ohne Gerät sind sie ziemlich ähnlich.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Laut Beschreibung hat der Sensor keine eigene Versorgung und bekommt den Strom vom Audioport. Da kommt aber ohne Zutun erst mal kein Saft raus, deshalb wird das Gerät vermutlich gar nicht arbeiten. Schick mal gleichzeitig einen Dauerton raus.
 

pucki

Active Member
Licensed User
Ich behaupte mal ganz frech das die Verlängerung völlig unwichtig ist.

Grund: Es werden keine Widerstände analog gemessen. Die setzen einfach digitale Temperaturfühler ein. Diese liefern ein digitales Ergebnis was man in einer Temperatur umrechnen muss (siehe Datenblatt des jeweiligen Hersteller).

Es gibt nun 2 Möglichkeiten. Entweder im Gerät werden die Daten umgerechnet oder in der Software.

Ich empfehle dazu mal eine Suche hier im Forum oder bei Google nach DS1820. Das ist ein digitaler 1-Wire-Sensor. Ich habe keine Ahnung ob die den verbaut haben, aber alles andere macht 0 Sinn.

Deine komischen Werte kann man so auch erklären. Das sind dann nämlich die Werte die der SENSOR liefert. Die also wie gesagt jemand umrechnen muss.

Ich hoffe ich konnte dir mit den Tipp helfen.

*edit* Lt. Amazon-Homepage soll das mit Arduino noch nicht sauber funktionieren. Ich hoffe also du hast ein Ei-Teil ;)
Gruß

Pucki
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Die Werte die ich bekomme machen gar kein Sinn, deswegen denke ich das es mit der Lib überhaupt nicht geht.
Hier ein Auszug von den Werten.

0
0
0
-1
0
0
0
-1
-1
0
0
0
-1
-1
0
0
0
-1
0
-1
0
-1
0
-1
0
0
-1
0
-1
0
0
0
0
0
38
53
83
0
0
-1
0
-1
0
 

MaFu

Well-Known Member
Licensed User
Longtime User
Was hat das mit analog oder digital zu tun? Es geht darum dass der Sensor sehr empfindlich ist und daher vom Smartphone erwärmt werden kann was zu verfälschten Meßergebnissen führt. Deshalb die Verlängerung. Dass dies eine Verbesserung bringt wurde ja schon von vielen berichtet.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Die Werte die ich bekomme machen gar kein Sinn, deswegen denke ich das es mit der Lib überhaupt nicht geht.
Hier ein Auszug von den Werten.

0
0
0
-1
Die Werte kommen vermutlich von statischem Rauschen. Ich bin mir sicher, dass der Sensor nicht läuft. Hast Du es schon mit anliegenden Audiosignal versucht?
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Ich habe im Hintergrund ein Radiosender laufen, sollte doch dann gehen, oder? Werte haben aber nichts anderes ergeben.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Ich habe im Hintergrund ein Radiosender laufen, sollte doch dann gehen, oder? Werte haben aber nichts anderes ergeben.
Kommt darauf an ob das Audiosignal wirklich ohne Unterbrechungen ist. Ich würde eher ein konstantes Audiosignal bei hoher Lautstärke erzeugen.

Teste doch mal mit Kopfhörer ob die original App einen Ton erzeugt.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Über Kopfhörer ist kein Ton bei der Original App zu hören.
Dann bin ich jetzt erst mal überfragt.

Kannst Du mir mal den Google Play Link zur App schicken? Dann könnte ich die nächsten Tage mal den Audioausgang mit dem Oszilloskop testen.
 
Top