programma vraagje

Status
Niet open voor verdere reacties.
uhm, als ik in het hoofdvenster knoppen bedien, kan da de waardes in het "statistics" venster beinvloeden, mag idd ook op de achtergrond staan...
 
In dat geval zou ik die waarden iedere keer opnieuw inlezen bij het tonen van het statistics venster. Kun je gewoon dat venster afsluiten en bij het tonen lees je eerst de waarden opnieuw in. Lijkt mij de veiligste weg...
 
hehe, dat lukt me nog wel denk ik:)
ik zal binnekort m'n programmatje nog eens posten!
 
hela, kheb sinds deze middag de units binnen die via de dlp (via usb) de signalen naar de pc sturen, met het testprogramma van de usb-interface kan ik al zien of de digitale uitgangen 1 of 0 zijn, nu moet ik dit nog in m'n programma krijgen, kheb net een hele tijd bezig geweest met de "serial port" functie, hoe kan ik die laten werken met de uitgangen van de usb interface, welke instellingen kan ik waar ingeven? baudrate hebbek ingesteld, nu hebbek hier een tabelletje van da ding:

Channel 1 Commands
ASCIICharacter HexValue Description Return / Comments
1 0x31 Dig Out – High Nothing returned
Q 0x51 Dig Out – Low Nothing returned
A 0x41 Digital Input Returns 0 or 1
Z 0x5A Analog In Returns measured voltage
9 0x39 Temperature Returns current temperature


ik wil dus van uitgang 1 (channel1) de digitale input lezen, 1 of 0 , maar hoe kan ik de serial port in visual studio 2008 laten kijken naar die bepaalde uitgang, want ik zie nergens de mogelijkheid om de ASCII of HeX code in te geven?

alvast bedankt voor de hulp!
 
ok, ik ben er bijna geraakt, met deze code:

Code:
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False

        Try
            With Input2
                .PortName = "COM4"
                .BaudRate = 115200
                .DataBits = 8
                .ReadTimeout = 1000
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
            End With
            Input2.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub



Code:
    Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Dim ontvangenTekst As String
        ontvangenTekst = Input2.ReadExisting()

        Label1.Text = ontvangenTekst

    End Sub


nu ik kan pas iets binnenhalen als ik eerst een code stuur naar mijn toestel , om de eerste uitgang uit te kunnen lezen, moet ik "A" sturen, zo dus:


Code:
 input2.Write("A")

, maar waar zet ik deze lijn best, ik had em in de formload gezet, maar dan leest hij enkel als ik het programma opstart, ik had em dan in een timer gezet, maar dan las hij dus elke seconde een nieuwe (ook dezelfde) waarde in. ik wil slechts iets met de "1" of de "0" doen als deze veranderd. dus zolang de input dezelfde is zou er niks mogen gebeuren...

wie kan me helpen?
 
Code:
dim lastOne as string
dim NewOne as string
[COLOR="SeaGreen"]'''''''''''''''''''''''''''''''''''''''[/COLOR]
LastOne = NewOne
NewOne = [COLOR="SeaGreen"]'hier de code waarmee je leest in een functie ofzo? [COLOR="DarkGreen"]*edit* is dat deze? Input2.ReadExisting()[/COLOR] [/COLOR]
if newOne <> LastOne then
   msgbox "er is een verandering! " & vbcrlf & "namelijk: " & LastOne & " is veranderd in " & NewOne
end if
zoiets?

[edit] noot dat de DIMS ergens NIET in die functie moeten staan, anders maak je ze steeds opnieuw en dat is niet de bedoeling.[/edit]
 
Laatst bewerkt:
@Vegras: Ik denk dat je bedoelt dat de variabelen bovenin een module of formulier moeten staan, en dus buiten de subroutines/functies. Er is overigens wel een manier om ze in een subroutine of functie te zetten, waarbij de waarde onthouden wordt, namelijk via:
Code:
Sub Test
   Static x as integer

   x = 3
End Sub
Als je nu voor een 2e keer de subroutine ingaat, dan is x nog steeds 3. Ik gebruik deze methode juist voor dit soort situaties. Zet je een variabele buiten de subroutine, dan is die voor ieder andere functie/subroutine in die class/module zichtbaar terwijl dat niet persé hoeft.

Tenslotte kun je de variabelen als 'public variabele' in een willekeurige module declareren, maar dan zijn ze voor alles en iedereen zichtbaar; en dat maakt je code niet echt overzichtelijker... ;)

De keuze tussen de eerste 2 methoden is smaak... Pick one! :thumb:

groeten Eelco
 
ja, dat weet ik, maar ik vermijd ze zo veel mogelijk, voor eigenlijk geen reden.
En zelf gebruik ik altijd Public-variabelen, gewoon in een losse module (modDimentions bijvoorbeeld ;) )

verder - wat hij zei ^_^
hiw,

V.:thumb:
 
kheb nu zoiets geprobeerd:

Code:
    Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Strinput2 = Input2.ReadExisting()

    End Sub



    Private Sub controlbases()
        If Strinput2 = 0 Then
            Timer1B.Stop()
            Timer1A.Start()
            LblBase1.BackColor = Color.Red
        Else
            If Strinput2 = 1 Then
                Timer1A.Stop()
                Timer1B.Start()
                LblBase1.BackColor = Color.Blue
            End If
        End If
    End Sub

maar krijg steeds volgende foutmelding:

De conversie van tekenreeks naar type string is ongeldig.


ook als ik "strinput2" boolean, single, long of weet ik veel wat maak geeft ie deze conversiefout, ik vermoed dat dat is omdat hij de nieuwe gegevens die het programma binnen haalt gewoon bij i die string schrijft, ipv hem telkens te overschrijven met een "1" of een "0", zou dat kunnen? en hoe kan ik ervoor zorgen dat de warde die binnenkomt wordt opgeslagen in een string of iets dergelijks, en dus overschreven wordt telkens een nieuwe "1é of "0" binnenkomt?
 
Code:
[COLOR="blue"]dim[/COLOR] xBla [COLOR="blue"]as[/COLOR] [COLOR="Blue"]variant[/COLOR]
dat zou je kunnen proberen.

erhm en over het leegmaken:
Code:
[COLOR="seagreen"]'1.) LEEG[/COLOR]
Strinput2 = "" [COLOR="seagreen"]'je kon ook 'Nothing' gebruiken geloof ik[/COLOR]
[COLOR="SeaGreen"]'2.) VUL[/COLOR]
Strinput2 = Input2.ReadExisting()
 
Code:
[COLOR="blue"]dim[/COLOR] xBla [COLOR="blue"]as[/COLOR] [COLOR="Blue"]variant[/COLOR]
wat moet ik hier mee proberen? en waar?

tried this:

Code:
Private Strinput2 As String
-------
Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Strinput2 = ""
        Strinput2 = Input2.ReadExisting

    End Sub
    Private Sub controlbases()
     [COLOR="Red"]If Strinput2 = 0 Then[/COLOR]
            Timer1B.Stop()
            Timer1A.Start()
            LblBase1.BackColor = Color.Red
            Input2.Write("A")
        Else
            If Strinput2 = 1 Then
                Timer1A.Stop()
                Timer1B.Start()
                LblBase1.BackColor = Color.Blue
                Input2.Write("A")
            End If
        End If
    End Sub

maar krijg nog steeds deze fout (bij de rode zin) :

Invalid caused exception was unhandled:
De conversie van tekenreeks naar type Double is ongeldig.
 
ja, omdat
Code:
... = 0
betekent dat het een getal is. Wat je moet doen is helemaal bovenaan:
Code:
Private Strinput2 As String
-------
Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Strinput2 = ""
[COLOR="SeaGreen"]'... meer stuff[/COLOR]
Die 'Private Strinput2 as string' moet je eens veranderen in 'dim .. as variant'
 
hey, de dim as variant code lijkt niet te lukken in visual studio 2008? hij verandert dat in object?
 
hmm, vaag. Probeer eens 'double' dan? Dus, 'dim Strinput2 as double'
 
okay, dan probeer je deze eens.
Code:
Private Strinput2 As String
-------
Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Strinput2 = ""
        Strinput2 = Input2.ReadExisting

    End Sub
    Private Sub controlbases()
     If clng(Strinput2) = 0 Then
            Timer1B.Stop()
            Timer1A.Start()
            LblBase1.BackColor = Color.Red
            Input2.Write("A")
        Else
            If clng(Strinput2) = 1 Then
                Timer1A.Stop()
                Timer1B.Start()
                LblBase1.BackColor = Color.Blue
                Input2.Write("A")
            End If
        End If
    End Sub
de clng() functie converteert de string-variabele naar een long-value. Als dat niet werkt moet je ipv. de clng() ook eens cint() (integer) of cbyte() (byte) of csig() (single) proberen.

:thumb:
 
hey, kheb via nog een forum volgende oplossing gekregen: (en ze werkt perfect)
Code:
  'input data received'
    Private Sub input_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Input.DataReceived
       [COLOR="Red"] strinput1 = Asc(Input.ReadExisting())[/COLOR]
        TextBox2.Text = strinput1
    End Sub

   Private Sub controlbases()

        If strinput1 = 48 Then
            Timer1B.Stop()
            Timer1A.Start()
            LblBase1.BackColor = Color.Red
        Else
            If strinput1 = 49 Then
                Timer1A.Stop()
                Timer1B.Start()
                LblBase1.BackColor = Color.Blue
            End If
        End If
    End Sub


maar nu heb ik nog wel een probleem met het feit dak dus 3 uitgangen via die poort wil binnenkrijgen, dus niet alleen de write("A") , maar
Input.Write("A") 'voor input1'
Input.Write("S") 'voor input2'
Input.Write("D") 'voor input3'

, ik had een tip gekregen dit met een select case te doen, maar daar versta ik neit zoveel van...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan