Velleman Board: Digital Channel soll 3 Sekunden länger aktiv bleiben.
Hallo Admins,
vielleicht kennt ihr das Experimentierboard K8055N von Velleman. Ich habe eine Schaltung aufgebaut, die mit Hilfe einer Lichtschranke eine analoge Klingel schaltet.
D.h.: wenn jemand die Lichtschranke passiert, läutet die Klingel. Jetzt habe ich aber folgendes Problem: Das Klingeln ist zu Kurz. ich möchte dass der Digitale Ausgang an dem das Relais montiert ist, welches die Klingel auslöst 3 Sekunden aktiviert ist und nicht nur die kurze Zeit in der die Lichtschranke unterbrochen ist.
Muss ich einen zweiten Timer benutzen oder so? Mir fällt wirklich nichts ein.
Hier ist der Code:
Vilen Dank schonmal im vorraus. Bin echt gespannt wie ich das lösen kann.
MfG,
Sudden
vielleicht kennt ihr das Experimentierboard K8055N von Velleman. Ich habe eine Schaltung aufgebaut, die mit Hilfe einer Lichtschranke eine analoge Klingel schaltet.
D.h.: wenn jemand die Lichtschranke passiert, läutet die Klingel. Jetzt habe ich aber folgendes Problem: Das Klingeln ist zu Kurz. ich möchte dass der Digitale Ausgang an dem das Relais montiert ist, welches die Klingel auslöst 3 Sekunden aktiviert ist und nicht nur die kurze Zeit in der die Lichtschranke unterbrochen ist.
Muss ich einen zweiten Timer benutzen oder so? Mir fällt wirklich nichts ein.
Hier ist der Code:
Public Class Form1
Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
Private Declare Sub CloseDevice Lib "k8055d.dll" ()
Private Declare Function Version Lib "k8055d.dll" () As Integer
Private Declare Function SearchDevices Lib "k8055d.dll" () As Integer
Private Declare Function SetCurrentDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Integer
Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (ByRef Data1 As Integer, ByRef Data2 As Integer)
Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer, ByVal Data As Integer)
Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Integer, ByVal Data2 As Integer)
Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)
Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)
Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Integer)
Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)
Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)
Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Boolean
Private Declare Function ReadAllDigital Lib "k8055d.dll" () As Integer
Private Declare Function ReadCounter Lib "k8055d.dll" (ByVal CounterNr As Integer) As Integer
Private Declare Sub ResetCounter Lib "k8055d.dll" (ByVal CounterNr As Integer)
Private Declare Sub SetCounterDebounceTime Lib "k8055d.dll" (ByVal CounterNr As Integer, ByVal DebounceTime As Integer)
Private Declare Function ReadBackDigitalOut Lib "k8055d.dll" () As Integer
Private Declare Sub ReadBackAnalogOut Lib "k8055d.dll" (ByRef Buffer As Integer)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenDevice(0)
Label1.Text = "Alarm scharf!"
CheckBox2.Checked = True
Timer1.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
CloseDevice()
Label1.Text = "Alarm unscharf!"
CheckBox2.Checked = False
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked Then SetDigitalChannel(1) Else ClearDigitalChannel(1)
End Sub
Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim i As Integer
i = ReadAllDigital
Timer1.Enabled = False
CheckBox3.Checked = i And 1
Timer1.Enabled = True
End Sub
Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
If CheckBox3.Checked Then SetDigitalChannel(2) Else ClearDigitalChannel(2)
End Sub
End Class
Vilen Dank schonmal im vorraus. Bin echt gespannt wie ich das lösen kann.
MfG,
Sudden
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 223794
Url: https://administrator.de/contentid/223794
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Sudden,
kannst du z.B. mit einem zweiten Timer machen welcher einen Intervall von 3 Sekunden hat, und welcher in seinem Tick Event den digitalen Port ausschaltet und sich danach selber deaktiviert. Zusätzlich musst du dann aber in deinem Haupt-Timer abfragen ob der zweite Timer läuft, und nur wenn er nicht läuft soll die Klingel abgeschaltet werden können.
Der Timer heißt im Beispiel counter.
p.s. Das Gedöns mit dem Binden an die Checked-Ereignisse der Checkboxen ist, hust..., nicht gerade optimal ....
Kenne das Board jetzt nicht, aber mach das doch alternativ so: (counter hat einen Interval von 3000ms)
Grüße Uwe
kannst du z.B. mit einem zweiten Timer machen welcher einen Intervall von 3 Sekunden hat, und welcher in seinem Tick Event den digitalen Port ausschaltet und sich danach selber deaktiviert. Zusätzlich musst du dann aber in deinem Haupt-Timer abfragen ob der zweite Timer läuft, und nur wenn er nicht läuft soll die Klingel abgeschaltet werden können.
Der Timer heißt im Beispiel counter.
Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
If CheckBox3.Checked Then
if not counter.Enabled then
SetDigitalChannel(2)
counter.Enabled = True
end if
Else
if not counter.Enabled then
ClearDigitalChannel(2)
end if
End if
End Sub
Private Sub counter_Tick(sender As System.Object, e As System.EventArgs) Handles counter.Tick
ClearDigitalChannel(2)
counter.Enabled = False
End Sub
p.s. Das Gedöns mit dem Binden an die Checked-Ereignisse der Checkboxen ist, hust..., nicht gerade optimal ....
Kenne das Board jetzt nicht, aber mach das doch alternativ so: (counter hat einen Interval von 3000ms)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenDevice(0)
Label1.Text = "Alarm scharf!"
CheckBox2.Checked = True
Timer1.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
CloseDevice()
Label1.Text = "Alarm unscharf!"
CheckBox2.Checked = False
Timer1.Enabled = False
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked Then SetDigitalChannel(1) Else ClearDigitalChannel(1)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim i As Integer
i = ReadAllDigital
If i And 1 Then
If Not counter.Enabled Then
SetDigitalChannel(2)
checkbox3.checked = True
End If
Else
If Not counter.Enabled Then
ClearDigitalChannel(2)
checkbox3.checked = False
End If
End If
End Sub
Private Sub counter_Tick(sender As System.Object, e As System.EventArgs) Handles counter.Tick
counter.Enabled = False
End Sub