Hallo,
ich habe mehrer Sensoren welche ich gern Filtern möchte. Um dieses Programmiertechnisch einfach zu lösen war mein Ansatz eine Function zu schreiben.
Das Ganze ist recht einfach gehalten aber funktioniert doch nicht 
Die Sensoren haben 3 Achsen X Y Z und ich möchte jede Achse filtern.
Dazu habe ich 3 Funktionen angelegt
Leider rechnt er an zwei Stellen falsch
Code:
$regfile = "m168def.dat"
$crystal = 3686400
$baud = 115200 'Bootloader Baud = 115200
$hwstack = 96
$swstack = 96
$framesize = 96
'***
Dim Filter1 As Byte : Filter1 = 5
Dim Filter2 As Byte : Filter2 = 100 - Filter1
Dim Sensor_x As Integer : Sensor_x = 1050
Dim Sensor_y As Integer : Sensor_y = 2010
Dim Sensor_z As Integer : Sensor_z = 1895
Dim Ergebnis(3) As Integer
Dim Temp(2) As Long
'****
Declare Function Filter_x(byval Ergebnis() As Integer , Byval Sensor_x As Integer ) As Integer
Declare Function Filter_y(byval Ergebnis() As Integer , Byval Sensor_y As Integer ) As Integer
Declare Function Filter_z(byval Ergebnis() As Integer , Byval Sensor_z As Integer ) As Integer
Do
Ergebnis(1) = Filter_x(ergebnis(1) , Sensor_x )
Ergebnis(2) = Filter_y(ergebnis(2) , Sensor_y )
Ergebnis(3) = Filter_z(ergebnis(3) , Sensor_z)
Print Ergebnis(1)
Print Ergebnis(2)
Print Ergebnis(3)
Sensor_x = Sensor_x + 1
Sensor_y = Sensor_y + 2
Sensor_z = Sensor_z + 3
Loop
Function Filter_x(byval Ergebnis() As Integer , Byval Sensor_x As Integer ) As Integer
'Local Temp(2) As Long
Local Filter_out As Integer
Temp(1) = Sensor_x * Filter1
Temp(2) = Ergebnis(1) * Filter2
Temp(2) = Temp(2) + Temp(1)
Temp(1) = Temp(2) / 100
Filter_out = Temp(1)
Filter_x = Filter_out
End Function
Function Filter_y(byval Ergebnis() As Integer , Byval Sensor_y As Integer ) As Integer
'Local Temp(2) As Long
Local Filter_out As Integer
Temp(1) = Sensor_y * Filter1
Temp(2) = Ergebnis(2) * Filter2
Temp(2) = Temp(2) + Temp(1)
Temp(1) = Temp(2) / 100
Filter_out = Temp(1)
Filter_y = Filter_out
End Function
Function Filter_z(byval Ergebnis() As Integer , Byval Sensor_z As Integer ) As Integer
'Local Temp(2) As Long
Local Filter_out As Integer
Temp(1) = Sensor_z * Filter1
Temp(2) = Ergebnis(3) * Filter2
Temp(2) = Temp(2) + Temp(1)
Temp(1) = Temp(2) / 100
Filter_out = Temp(1)
Filter_z = Filter_out
End Function
Der erste Filter wird noch richtig berechnet, der zweite und dritte dann nicht mehr!
Es kracht
an
Code:
Temp(2) = Ergebnis(2) * Filter2
bzw. bei
Code:
Temp(2) = Ergebnis(3) * Filter2
Im ersten Durchlauf ist Ergenis(2) = 0 und Filter2 ist fix 95 somit sollte (0*95) 0 herrauskommen 
Ausrechnen tut es aber 190950.
Kann mir dazu einer einen Tip geben warum, ich bin irgendwie blind.
Lesezeichen