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
Der erste Filter wird noch richtig berechnet, der zweite und dritte dann nicht mehr!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
Es krachtan
bzw. beiCode:Temp(2) = Ergebnis(2) * Filter2Im ersten Durchlauf ist Ergenis(2) = 0 und Filter2 ist fix 95 somit sollte (0*95) 0 herrauskommenCode:Temp(2) = Ergebnis(3) * Filter2
Ausrechnen tut es aber 190950.
Kann mir dazu einer einen Tip geben warum, ich bin irgendwie blind.







an 

Zitieren

Lesezeichen