Hallo,

Ik heb volgende Visual Basic code:


Public Class Form1

    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Long) As Long
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long) As Long
    Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (ByVal Data1 As Long, ByVal Data2 As Long)
    Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long, ByVal Data As Long)
    Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Long, ByVal Data2 As Long)
    Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Long)
    Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
    Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
    Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long) As Boolean
    Private Declare Function ReadAllDigital Lib "k8055d.dll" () As Long
    Private Declare Function ReadCounter Lib "k8055d.dll" (ByVal CounterNr As Long) As Long
    Private Declare Sub ResetCounter Lib "k8055d.dll" (ByVal CounterNr As Long)
    Private Declare Sub SetCounterDebounceTime Lib "k8055d.dll" (ByVal CounterNr As Long, ByVal DebounceTime As Long)


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If OpenDevice(0) = 0 Then

            MsgBox("Succesvol geconnecteerd!")

        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Timer1.Interval = 1000
        Timer1.Start()

    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Dim Deur As Boolean
        Deur = ReadDigitalChannel(1)
        If Deur = False Then
            MsgBox("Open")


        End If

    End Sub


End Class

Het probleem is als de deur dan open gaat (dus Deur = False) dan blijft de MsgBox komen. Hoe kan ik ervoor zorgen dat deze box maar één keer opengaat???

HM, ik weet niet of deze vraag hier hoort maar toch....

Gebruik een boolean variabel die je op true zet wanneer je het bericht weergegeven hebt, je controleerd de waarde voordat je het bericht weergeeft.

Dus Zoiets:

Bovenaan (public Getoond as boolean)

If Deur = False Then
if getoond = false then MsgBox("Open") : getoond = true
else
getoond = false
End If

Maar houd er dan wel rekening mee dat als de deur weer dichtgaat je die variabele ook aanpast.
Maar volgens mij is de code nog laaaaaang niet af, dus...

Op 8 maart 2011 01:07:56 schreef hadv:
Maar houd er dan wel rekening mee dat als de deur weer dichtgaat je die variabele ook aanpast.
Maar volgens mij is de code nog laaaaaang niet af, dus...

Mispoes...... ;)

Als ik zijn code bekijk is de variabel: deur=false waneer de deur open is, waneer deze sluit (na else) deur is dan gesloten, word de variabel getoond weer op false gezet!

En dus weer klaar voor een nieuw rondje.....

Ik heb nog wat verder gezocht en ben tot de conclusie gekomen dat ik met een timer moet werken. :p
Hoe voeg ik een timer aan dit stukje code toe?


 Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

        If CheckBox1.Checked = True Then

            If ReadDigitalChannel(1) = False Then

                MsgBox("Deur geopend!")

            End If

        End If

    End Sub

Het vorige is me gelukt! :)

Maar nu heb ik dit stukje code, het probleem is dat de Msgbox blijft verschijnen op de interval van de timer.
De Msgbox mag maar één keer verschijnen.
Hoe los ik dit op?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Timer1.Interval = 1000
        Timer1.Start()

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If CheckBox1.Checked = True Then

        
            If ReadDigitalChannel(1) = True Then

                MsgBox("Deur open!")
                Timer1.Enabled = False

            End If

        End If

    End Sub

Disable de timer eens voor het laten verschijnen van de Msgbox.

Dus zo:


            If ReadDigitalChannel(1) = True Then

                Timer1.Enabled = False
                MsgBox("Deur open!")

[Bericht gewijzigd door Anton Mulder op (56%)]

het werkt, maar waarschijnlijk eenmalig ;)

wat je eigenlijk met doen is een geheugen werken, maar dan gewoon kijken naar de oude waarde:

if checkbox1.checked <> readinput then 'waarde is anders als vorige
checkbox1.checked = readinputwaarde 'sla waarde op
if checkbox1.checked = true then msgbox ("deur is nu open");
if checkbox1.checked = false then msgbox ("deur is nu dicht");
end if;