Saturday, December 26, 2009

exponentieller lichtdimmer
















Betreff exponentieller lichtdimmer
Von Ulli Tolksdorf
Datum 08.11.2009 11:52:30


Hallo

leider habe ich in mathe nicht genug aufgepasst :(((

über einen timer wird ein lichtdimmer gesteuert.

der dimmerwert nimmt von 255 immer den wert 1 ab bis 0.

nun soll timer1.intervall von einer frei wählbaren sekundenzahl
exponentiell kleiner werden.

also quasi immer 255 schritte aber von unterschiedlicher sekundenzahl
ausgehend....

wie ist die formel für timer1.intervall dazu!???


lieben dank!
















Betreff Re: exponentieller lichtdimmer
Von =?ISO-8859-15?Q?Heinz-Mario_Fr=FChbeis?=
Datum 08.11.2009 14:16:19



"Ulli Tolksdorf" schrieb im Newsbeitrag
news:O0IwSGGYKHA.4704@TK2MSFTNGP02.phx.gbl...

> nun soll timer1.intervall von einer frei wählbaren sekundenzahl
> exponentiell kleiner werden.

' In den Deklarationen
Dim memVal as Integer
Dim memTimerIVal as Integer
Dim aktTimerIVal as Integer

' In einem Init (z.Bsp. Load_Ereignis einer Form
memVal = -1
memTimerIVal = 120

Private Sub Timer1_Timer()
aktTimerIVal = memTimerIVal
if memTimerIVal <> aktTimerIVal then
memVal = -1
end if
if memVal = -1 then
memVal = 255
else
if > 0 then
memVal = memVal -1
' Restlicher Code für den Dimmer
else
Timer1.Interval = 0 ' quasi disabled
end if
end if
End Sub

Ich hab' es jetzt nicht getestet; ist also Impromptu.

viele Grüße
Heinz-Mario

















Betreff Re: exponentieller lichtdimmer
Von Ulli Tolksdorf
Datum 09.11.2009 09:35:58


hm, Du meinst also, eine verkürzung des Intervalls bei jedem Schritt um
1, ja?
















Betreff Re: exponentieller lichtdimmer
Von =?ISO-8859-15?Q?Heinz-Mario_Fr=FChbeis?=
Datum 09.11.2009 11:39:43


"Ulli Tolksdorf" schrieb im Newsbeitrag
news:OtaEqeRYKHA.1236@TK2MSFTNGP05.phx.gbl...
> hm, Du meinst also, eine verkürzung des Intervalls bei jedem Schritt um 1,
> ja?

Du kannst ja auch 10ner Schritte machen.
Wichtiger hierbei ist es doch auf den Timer-Interval zu achten.
Den nämlich mit dem Dimm-Schritt zu verknüpfen ist glaube ich keine gute
Sache.
Je nachdem, wie schnell du dimmen willst kann entweder der Timer-Interval
entscheidend sein, ODER
der Schritt-Wert.

"1" habe ich deswegen gnommen, weil bei heutigen Systemen die
Geschwindigkeit so hoch ist, das man schon fast
aufpassen muß keine zu großen Schritte zu machen.
Quasi:
1. Dimm dimm dimm dimm dimm, etc
2. Wusch

Aber das mußt du für dich und dein Programm selbst entscheiden.

viele Grüße
Heinz-Mario

















Betreff Re: exponentieller lichtdimmer
Von Ulrich Korndoerfer
Datum 10.11.2009 10:12:31


Hallo Ulli (:-))

Ulli Tolksdorf schrieb:
> Hallo
>
> leider habe ich in mathe nicht genug aufgepasst :(((
>
> über einen timer wird ein lichtdimmer gesteuert.
>
> der dimmerwert nimmt von 255 immer den wert 1 ab bis 0.
>
> nun soll timer1.intervall von einer frei wählbaren sekundenzahl
> exponentiell kleiner werden.
>
> also quasi immer 255 schritte aber von unterschiedlicher sekundenzahl
> ausgehend....
>
> wie ist die formel für timer1.intervall dazu!???
>
>
> lieben dank!

Probier mal:



Public Sub Test(Optional ByVal StartIntervallDauer As Double = 1, _
Optional ByVal SchlussIntervallDauer As Double = 0.01, _
Optional ByVal IntervallAnzahl As Long = 255)
Dim i As Long
For i = 1 To IntervallAnzahl
Debug.Print i, _
Format$(IntervallDauer(i, IntervallAnzahl, StartIntervallDauer, _
SchlussIntervallDauer), "0.000")
Next i
End Sub

'Anzahl >= 2
'1 <= IntervallNummer <= Anzahl
'StartIntervallDauer < SchlussIntervallDauer oder
'StartInterVallDauer > SchlussIntervallDauer
'IntervallNummer = 1 : Übergangszeit vom Startwert zum nächsten
' Wert mit der Dauer StartIntervallDauer
'IntervallNummer = Anzahl: Übergangszeit zum Schlusswert mit der
' Dauer SchlussIntervallDauer

Private Function IntervallDauer(ByVal IntervallNummer As Long, _
ByVal IntervallAnzahl As Long, _
ByVal StartIntervallDauer As Double, _
ByVal SchlussIntervallDauer As Double) _
As Double
Const cEULER As Double = 2.71828182845905
Dim Schrittweite As Double, Skalierungsfaktor As Double
Dim Divisor As Double

Schrittweite = 1 / (IntervallAnzahl - 1)
IntervallNummer = IntervallNummer - 1
Skalierungsfaktor = Log(StartIntervallDauer) - _
Log(SchlussIntervallDauer)

Divisor = cEULER ^ (Skalierungsfaktor * Schrittweite * IntervallNummer)
IntervallDauer = StartIntervallDauer / Divisor
End Function



--
Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.proSource.de/Downloads/


No comments:

Post a Comment