@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







Zitieren

Lesezeichen