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.