Glühlampe
16.01.2018, 15:53
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
$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:strom an
Temp(2) = Ergebnis(2) * Filter2 bzw. bei
Temp(2) = Ergebnis(3) * Filter2
Im ersten Durchlauf ist Ergenis(2) = 0 und Filter2 ist fix 95 somit sollte (0*95) 0 herrauskommen :rolleyes:
Ausrechnen tut es aber 190950.:confused:
Kann mir dazu einer einen Tip geben warum, ich bin irgendwie blind.
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
$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:strom an
Temp(2) = Ergebnis(2) * Filter2 bzw. bei
Temp(2) = Ergebnis(3) * Filter2
Im ersten Durchlauf ist Ergenis(2) = 0 und Filter2 ist fix 95 somit sollte (0*95) 0 herrauskommen :rolleyes:
Ausrechnen tut es aber 190950.:confused:
Kann mir dazu einer einen Tip geben warum, ich bin irgendwie blind.