German Problem mit Tachometer

D

Deleted member 103

Guest
Hallo Jungs,

ich habe die gleiche Frage bei meine Landsleute(Italiener) gestellt, leider habe bis jetzt keine Antwort bekommen, ich denke weil die Frage nicht leicht zu beantworten ist? :(

Es geht um ein Tachometer, der nicht das machen will was ich will. :(
Der Code ist ein Bruchteil von einer anderen Anwendung und dient nur dazu die Impulse zu simulieren, die die classe "clsSpeedmeter" von einem Bluetooth-Gerät bekommt. Ein Impuls entspricht eine Rad-Umdrehung ( ca. 1964mm Radumfang)

Wie man aus dem Video sehen kann, ist die Anzeige vom Kilometerzähler nicht so stabil, variiert von 54 bis 57 km/h.
Ich denke, dass diese Instabilität nur auf mein schlecht programmiertes Code zurück zu führen ist.

Ist jemand hier der dieses "kleine" Problem lösen könnte?

Vielen Dank im Voraus
Filippo
 

Attachments

  • fg-speedmeter.zip
    8.6 KB · Views: 212
  • video_speedmeter.zip
    179.3 KB · Views: 201

KMatle

Expert
Licensed User
Longtime User
Keine Zeit zum Gucken, aber ... Den km/h Wert solltest Du "glätten" (also nicht in Echtzeit anzeigen, sondern den Mittelwert jede Sekunde o.ä.). Damit springt die Anzeige nicht immer hin und her:

1. Startzeit merken
2. x Impulse warten
3. Endezeit merken
4. Differenz zwischen Ende- und Start
5. Daraus die km/h hochrechnen
 
D

Deleted member 103

Guest
Keine Zeit zum Gucken, aber ... Den km/h Wert solltest Du "glätten" (also nicht in Echtzeit anzeigen, sondern den Mittelwert jede Sekunde o.ä.). Damit springt die Anzeige nicht immer hin und her:

1. Startzeit merken
2. x Impulse warten
3. Endezeit merken
4. Differenz zwischen Ende- und Start
5. Daraus die km/h hochrechnen
Danke Klaus!
Ich denke das "glätten" mache ich schon mit diese routine:
B4X:
Public Sub NewData (KeyCode As String)
       
    Select KeyCode
        Case "+"

            counter = counter + 1
           
            If counter = 1 Then
                'Ab den ersten Abrollumfang wird die Zeit notiert.
                starttime = DateTime.Now
            Else If counter = 2 Then
                time = DateTime.Now - starttime
                tmpSpeed = Abrollumfang / time * 3600
                Log("time=" & time)

                'Km/h
                If tmpSpeed < 15.0 Then
                    StepCounter = 3
                Else If tmpSpeed < 25.0 Then
                    StepCounter = 4
                Else If tmpSpeed < 50.0 Then
                    StepCounter = 7
                Else If tmpSpeed < 75.0 Then
                    StepCounter = 10
                Else If tmpSpeed < 100.0 Then
                    StepCounter = 14
                Else If tmpSpeed < 125.0 Then
                    StepCounter = 18
                Else If tmpSpeed < 150.0 Then
                    StepCounter = 22
                Else If tmpSpeed < 175.0 Then
                    StepCounter = 26
                Else
                    StepCounter = 30
                End If

                Log("StepCounter=" & StepCounter)
                Log(" ")
               
            Else If counter >= StepCounter Then
'                Log("DateTime.Now - starttime=" & (DateTime.Now - starttime))
                TempDistance = counter * Abrollumfang
                speed = TempDistance / (DateTime.Now - starttime) * 3600
                counter = 0
               
            End If
            timerSpeedElapsed = 0
    End Select
End Sub
Auf jeden fall scheint das Problem beim dem Timer zu sein, es ist zu ungenau.
Wenn ich den Timer-interval z.B. auf 100 millisec. einstelle, wird der Timer-Event nicht bei genau 100 ausgelöst, und das macht diese Sprünge.
 
Top