@ozett,
hast vor kurzem nach Codeschnitzel gefragt um die Sensoren auszuwerten:
Code:
Do
.
Dein Programm
.
B0 = S0 : B1 = S1 : B2 = S2 : B3 = S3
B0 = B0 + S0 : B1 = B1 + S1 : B2 = B2 + S2 : B3 = B3 + S3
B0 = B0 / 2 : B1 = B1 / 2 : B2 = B2 / 2 : B3 = B3 / 2
Ms0 = B0 + 100 : Ms1 = B1 + 100 : Ms2 = B2 + 100 : Ms3 = B3 + 100
Ss0 = B0 - 100 : Ss1 = B1 - 100 : Ss2 = B2 - 100 : Ss3 = B3 - 100
For I = 1 To 4500
Svr = S0
If Svr > Ms0 Or Svr < Ss0 Then
Svr = S0 : Shl = S1 : Shr = S2 : Svl = S3 : Exit For
End If
Shl = S1 :
If Shl > Ms1 Or Shl < Ss1 Then
Svr = S0 : Shl = S1 : Shr = S2 : Svl = S3 : Exit For
End If
Shr = S2 :
If Shr > Ms2 Or Shr < Ss2 Then
Svr = S0 : Shl = S1 : Shr = S2 : Svl = S3 : Exit For
End If
Svl = S3
If Svl > Ms3 Or Svl < Ss3 Then
Svr = S0 : Shl = S1 : Shr = S2 : Svl = S3 : Exit For
End If
Next
If i >=4500 then Notaus
Svr = Svr - B0
Shl = Shl - B1
Shr = Shr - B2
Svl = Svl - B3
.
Dein Programm
.
Loop
S0 bis S3 sind die per ADC gemessenen Sensorenwerte. Die Bs sind Mittelwerte um die Streuung etwas zu reduzieren. Tritt zum Zeitpunkt der For:next Schleife ein Spike auf, wird von einem der Sensoren dieser Mittelwert über- oder unterschritten. Daraufhin werden alle Sensorenwerte währen des Spikes erfaßt und die For-Next Schleife verlassen. Das Timing ist also wichtig, auf dass ein spike währen der for-Next-Schleife auftritt. Ist aber nicht kompliziert. Die Schleife gibt bei mir alle 0,2 sec einen Spike ab. Die For-Next-Schleife läuft die 500 etwa in 0,5 sec durch. Das restliche Programm braucht etwa 0,15 sec. So wird also ein Spike abgefangen. Kommt kein spike, läuft i bis 500 (nach 0,5 sec) und es ist klar, dass die Schleife ausgefallen sein muß.
Grüße
Christian
Lesezeichen