Aide : VB -Carte d'interface

PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012
- 3 mars 2010 à 14:00
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
- 25 mars 2010 à 07:57
Bonjour, on réalise actuellement une platine mobile de webcam pour notre PPE (Projet Personnel Encadré) en classe, et ça consiste à faire pivoter une platine (avec la webcam dessus) dans un sens ou un autre selon la touche qu'on appuie sur le clavier (ne nous en demandez pas l'intérêt, on a pas fixé le cahier des charges). Logiquement, on a pris les flèches pour ça.

On a essayé de faire un programme nous-même, et on a aussi demandé à un informaticien. Voilà ce que ça donne : http://www.megaupload.com/?d=GJ7FE2TZ
(le "simple" c'est celui qu'on a fait)

Et on aurait voulu avoir de l'aide pour savoir comment lier les commandes aux sorties logiques de la carte d'interface qui va commander le moteur. Voici le contenu du CD de la carte d'interface : http://www.megaupload.com/?d=2C8X1YXA

Je vous remercie d'avance

47 réponses

Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
10 mars 2010 à 18:02
ah l'égo quand tu nous tiens
allez au boulot ;)
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

10 mars 2010 à 19:37
Bon et bien je ne suis pas sur d'avoir très bien compris pour "connect" , si tu pouvais expliquer un peut sans me donner la réponse de suite sa serait cool !
0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
10 mars 2010 à 20:30
connect toi à la carte une fois pour toute, donc dans le form load
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

11 mars 2010 à 08:16
Je pense que j'ai compris , je vais te montrer ce que j'ai fais ; j'ai donc connecté la carte une seule fois donc la form load , mais j'ai rajouté un "test" pour voir si la carte était bien en ligne avant de faire les test des touches clavier et aussi avant de tout déconnecté . Enfin il me dit que le nom "connect" n'est pas déclaré ? je ne comprend pas pourquoi , j'ai cherché sur Google et je n'est pas trouvé de réponse .

Je montre ce que j'ai mis :

Public Class Form1

#Region "déclaration de la DLL"
    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Sub Version Lib "k8055d.dll" ()
    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)
#End Region

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    SetDigitalChannel(1)
                    ClearDigitalChannel(2)

                    Label8.Text = "Tu appuis sur la flèche Gauche"

                Case Keys.Right

                    SetDigitalChannel(2)
                    ClearDigitalChannel(1)

                    Label8.Text = "Tu appuis sur la flèche Droite"

                Case Else

                    ClearAllDigital()

                    Label8.Text = "Clavier erroné"
            End Select
        End If
    End Sub


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

        Dim status As Integer = OpenDevice(0) 'adresse de la carte est 0

        If status = -1 Then 'opendevice retourne l'adresse si OK et -1 si pas OK
            connect = False
        Else
            connect = True
            Me.Text = " Gestion d'une carte VM110 .: en ligne :. "
        End If

        Me.Text = "Test Clavier par Adn56 (merci a lui) et un petit peut moi :p"
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If connect = True Then
            ClearAllDigital()
            ClearAllAnalog()
            CloseDevice()
        End If
    End Sub 

    Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label8.Click

    End Sub
End Class

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

11 mars 2010 à 08:22
Ahhh , et bien je voulais faire un test avec la carte , mais au lancement du programme il me dit qu'il y a des erreurs qui viennent du fait que "connect" n'est pas déclaré .
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

11 mars 2010 à 18:04
Donc , j'ai pas déclaré la variable

Je vais donc la déclaré :

 Dim connect As 


Mais apres le As je ne sais pas trop quoi mettre ( Integer peut etre , mais apres ca je ne sais pas trop quoi mettre non plus ) ?
0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
11 mars 2010 à 19:18
ah ouai tout de même .....
Bon connect est quoi ? je prends que deux valeurs true ou false je suis ? je suis ?



un boolean (bit)
donc :
dim connect as boolean = false 'avec initialisation c'est mieux
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

12 mars 2010 à 10:45
Oki, merci mais je comprend parfaitement pourquoi c'est "Boolean", mais pas pourquoi je doit mettre "= False", parce que il faut que la carte soit connecté donc j'aurais plutôt mis "=True" ?
après j'ai peut être pas saisi un truc .....

J'ai quand même mis tout cela dans le programme :

Public Class Form1

#Region "déclaration de la DLL"
    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Sub Version Lib "k8055d.dll" ()
    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)
#End Region

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        Dim connect As Boolean = False

        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    SetDigitalChannel(1)
                    ClearDigitalChannel(2)

                    Label8.Text = "Tu appuis sur la flèche Gauche"

                Case Keys.Right

                    SetDigitalChannel(2)
                    ClearDigitalChannel(1)

                    Label8.Text = "Tu appuis sur la flèche Droite"

                Case Else

                    ClearAllDigital()

                    Label8.Text = "Clavier erroné"
            End Select
        End If
    End Sub


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

        Dim connect As Boolean = False
        Dim status As Integer = OpenDevice(0) 'adresse de la carte est 0

        If status = -1 Then 'opendevice retourne l'adresse si OK et -1 si pas OK
            connect = False
        Else
            connect = True
            Me.Text = " Gestion d'une carte VM110 .: en ligne :. "
        End If

        Me.Text = "Test Clavier"
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        Dim connect As Boolean = False

        If connect = True Then
            ClearAllDigital()
            ClearAllAnalog()
            CloseDevice()
        End If
    End Sub

    Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label8.Click

    End Sub
End Class


Je l'avais mis au départ que dans la partit Load de la form , mais ca m'était encore après cela que c'était pas déclaré dans les autres partit du programme , alors je l'ai rajouté dans les autres partit .
Je ferais les test ce soir a la maison , et je te dirais si sa marche .
0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
12 mars 2010 à 13:31
pas la peine cela ne marchera pas ^^
il faut absolument que tu lise un tuto de base sur le VB, car là tu te coule dans un verre d'eau.
La portée d'une variable :
si déclaré dans une sub, n'existe pas ailleur
si déclaré dans un module en private n'existe que dans ce module (ce qu'il te faut)
si déclaré en public, vu dans tout les modules...
Là ce que tu fais c'est de la déclarer dasn chaque sub, du coup à chaque appel de la sub la variable=false puisqu'elle est initialisé (pas obligé mais un bon reflexe)
En clair :
déclare la variable dans le module de la form1,
la fonction opendevice(0) va lui attribuer la valeur true si carte en ligne, et aprés tu utilise connect pour valider avant l'envoie d'une instruction à cette carte que tu est bien en ligne.
++
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

12 mars 2010 à 19:27
J'ai suivis un tuto avant les vacances ( http://www.siteduzero.com/tutoriel-3-134798-visual-basic-net.html )

Et je vient de tester le programme , et non concluant ......
Je lance le programme , il ne reconnait pas d'erreur , mais ne réagit pas non plus quand j'appuie sur la flèche droite ou gauche . Je croit que j'ai quelques petite choses a revoir :p
Des que j'ai revue je te copie le programme
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

12 mars 2010 à 19:45
Euh je ne voudrait pas être grossier mais la p***** de m**** ca marche !
Effectivement ca le fais mieux en déclarant la variable au début xD

Et bien mon cher Adn56 , je ne sais comment te remercier ! Tu m'a tellement aidé , et si gentiment . En tout cas si je peut te renvoyer l'ascenseur d'une quelconque façon , je le ferais .

Allé , maintenant je la version 1 du programme marche , faut que je l'améliore ! Je suis entrain d'y rajouté une fenêtre ou l'on voit l'image de la Webcam et d'embellir un peut tout ca . Je te tient au courant de l'avancer du bazard ^^

PS : Je me permet de te copier la V1 , juste au cas ou si tu a 30 sec pour vérifier que il n'y a point d'erreur (logiquement ca doit être clean):
Public Class Form1

#Region "déclaration de la DLL"
    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Sub Version Lib "k8055d.dll" ()
    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)
#End Region

    Dim connect As Boolean = False

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    SetDigitalChannel(1)
                    ClearDigitalChannel(2)

                    Label8.Text = "Tu appuis sur la flèche Gauche"

                Case Keys.Right

                    SetDigitalChannel(2)
                    ClearDigitalChannel(1)

                    Label8.Text = "Tu appuis sur la flèche Droite"

                Case Else

                    ClearAllDigital()

                    Label8.Text = "Clavier erroné"
            End Select
        End If
    End Sub


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

        Dim status As Integer = OpenDevice(0) 'adresse de la carte est 0

        If status = -1 Then 'opendevice retourne l'adresse si OK et -1 si pas OK
            connect = False
        Else
            connect = True
            Me.Text = " Gestion d'une carte VM110 .: en ligne :. "
        End If

        Me.Text = "Test Clavier par Adn56 (merci a lui) et un petit peut moi :p"
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If connect = True Then
            ClearAllDigital()
            ClearAllAnalog()
            CloseDevice()
        End If
    End Sub

    Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label8.Click

    End Sub
End Class

0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
13 mars 2010 à 09:08
tout y est bien et là ou il faut.

petit ajout pour le fun :
  Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    SetDigitalChannel(1)
                    ClearDigitalChannel(2)

                    Label8.Text = "Tu appuis sur la flèche Gauche"

                Case Keys.Right

                    SetDigitalChannel(2)
                    ClearDigitalChannel(1)

                    Label8.Text = "Tu appuis sur la flèche Droite"

                Case Else

                    ClearAllDigital()

                    Label8.Text = "Clavier erroné"
            End Select
else
Label8.Text = "carte non connectée"
        End If
    End Sub
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

13 mars 2010 à 19:23
Oki , effectivement c'est pas con de rajouter un imformation comme quoi la carte n'est pas connecté !
Merci pour l'idée
0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
13 mars 2010 à 20:32
de rien....
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

23 mars 2010 à 10:39
Ça fessait longtemps :p

Pendant tout ce temps j'ai plutôt vachement avancé, mais je me heurte actuellement a un dernier problème, c'est pour cela que je reviens solliciter ton aide !

Alors, maintenant que mon programme marche avec mon moteur a courant continu, et qu'il est joli ; je dois faire la même chose pour un moteur pas à pas :

Je pense donc qu'il me suffit de rajouter à mon programme un timer pour que je puisse obtenir la bonne vitesse :

J'ai donc fais quelques petits calcul : dès que j'appuie sur ma flèche droite ou gauche je voudrais que l'état haut reste pendant 12 ms puis après que cela passe a l'état bas pendant 18,33 ms et que après cela repasse à l'état haut pendant 12 ms, .........

Sauf que je n'arrive pas faire ce truc la

Un petit coup de pouce à me donner STP ?

Merci par avance

PS : je remets que j'ai avancé si ya besoin :
Imports DirectX.Capture

Public Class Form1
    Public Structure Active2
        Public pas As String
        Dim Camera As Filter
        Dim CaptureInfo As DirectX.Capture.Capture
        Dim Counter As Integer
        Dim CounterFrames As Integer
        Dim PathVideo As String
        Public code As String
        Public dd As String
        Public df As String
        Public im As Image
    End Structure
    Public count As Int16
    Public CaptureInformation2 As Active2
    Public Dispositivos As New Filters()

#Region "déclaration de la DLL"
    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Sub Version Lib "k8055d.dll" ()
    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)
#End Region

    Dim connect As Boolean = False

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    SetAnalogChannel(1)
                    ClearAnalogChannel(2)

                    Label8.Text = "Tu as utiliser la touche : Gauche"

                Case Keys.Right

                    SetAnalogChannel(2)
                    ClearAnalogChannel(1)

                    Label8.Text = "Tu as utiliser la touche : Droite"

                Case Else

                    ClearAllAnalog()

                    Label8.Text = "Cette touche n'est pas correct"
            End Select
        Else
            Label8.Text = "Carte non connectée"
        End If
    End Sub

    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        If connect = True Then
            Select Case e.KeyCode
                Case Keys.Left

                    ClearAllAnalog()

                    Label8.Text = "Tu as utiliser la touche :"

                Case Keys.Right

                    ClearAllAnalog()

                    Label8.Text = "Tu as utiliser la touche :"

                Case Else

                    ClearAllAnalog()

                    Label8.Text = "Tu as utiliser la touche :"
            End Select
        Else
            Label8.Text = "Carte non connectée"
        End If
    End Sub



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Dim j As Short
            Dim f As Filter
            ComboBox1.Items.Clear()
            For j = 0 To Dispositivos.VideoInputDevices.Count - 1
                f = Dispositivos.VideoInputDevices(j)
                ComboBox1.Items.Add(f.Name)
            Next
            If j > 0 Then ComboBox1.SelectedIndex = 0
        Catch
            MsgBox("aucune webcam n'est detecté veuillez brancher votre webcam avant d'ouvrire l'application svp", MsgBoxStyle.Critical)
            Close()
        End Try

        Dim status As Integer = OpenDevice(0) 'adresse de la carte est 0

        If status = -1 Then 'opendevice retourne l'adresse si OK et -1 si pas OK
            connect = False
        Else
            connect = True
            Me.Text = " Gestion d'une carte VM110 .: en ligne :. "
        End If

        Me.Text = "CamMove par Adn56 et un peut moi"
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If connect = True Then
            ClearAllDigital()
            ClearAllAnalog()
            CloseDevice()
        End If
    End Sub

    Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label8.Click

    End Sub
    Private Sub Configurer()
        CaptureInformation2.CaptureInfo.VideoCompressor = Dispositivos.VideoCompressors(1)
        CaptureInformation2.CaptureInfo.FrameSize = New Size(320, 240)
        CaptureInformation2.CaptureInfo.FrameRate = 50
        CaptureInformation2.CaptureInfo.RenderPreview()
    End Sub
    Private Sub NewCaptureReady(ByVal Sender As System.Windows.Forms.PictureBox)
        Dim b As New Bitmap(200, 240)
        Dim b2 As Bitmap = Sender.Image
        Dim i2, j2 As Int16
        For i As Int16 = 60 To 259
            j2 = 0
            For j As Int16 = 0 To 239
                b.SetPixel(i2, j2, b2.GetPixel(i, j))
                j2 = j2 + 1
            Next
            i2 = i2 + 1
        Next
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CaptureInformation2.Camera = Dispositivos.VideoInputDevices(ComboBox1.SelectedIndex)
        CaptureInformation2.CaptureInfo = New DirectX.Capture.Capture(CaptureInformation2.Camera, Dispositivos.AudioInputDevices(0))
        CaptureInformation2.CaptureInfo.PreviewWindow = PictureBox2
        CaptureInformation2.Counter = 1
        CaptureInformation2.CounterFrames = 1
        Configurer()
        AddHandler CaptureInformation2.CaptureInfo.FrameCaptureComplete, AddressOf NewCaptureReady
        Button1.Enabled = False
        ComboBox1.Enabled = False
    End Sub

    Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click

    End Sub
End Class

0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
23 mars 2010 à 18:53
bien avant de te dire que tu pourras faire tourner un pas à pas à cette vitesse, une correction :
si dans le key press du fait un SetAnalogChannel(1) cela revient à utiliser une sortie tout ou rien ! et tu en as 8 sur la VM110, garde plutot les sorties analogique pour gerer un éclairage en fonction de la luminosité (LDR sur une entrée analogique de la carte) ou autre.
De plus tu écris en suite : ClearAnalogChannel(2)
ce qui ne sert à rien puisque sur le key_up tu raz toutes les sorties analogiques !
Et enfin pour finir avec le key_up : Il sert à quoi ton select case touche ?, ben à rien du tout, si key_up then ClearAnalogChannel()

bon pour ton pas à pas :
il te faut gérer non seulement un train d'impulsion à une fréquence que la carte ne sais pas faire (voir doc VM110 : tmps de rafraichissement en usb1.0 10ms soit 20ms pour une impulsion 1->0 et tu bloques toutes autre com de la carte, (en revanche elle as sur les sorties analogique une option PWM, regarde peut être de se coté là.) ce qui te donnes un niveau haut de 20ms et un niveau de 20ms (rapport cyclique 50% pour un pas à pas, je ne sais pas comment tu fais tes calculs, mais pour un pas à pas c'est F(en hz ou 1/f pour le temps = nb de pas*distance en degrée à faire) soit pour la majorité 200pas/tour = 1.8° par pas.
Mais surtout là ou cela se corse, c'est qu'il faut gerer des rampes ACC et DCC, sinon ton moteur décroche (imagine un gama qui tant vers l'inifi) donc pour simplifier :
La vitesse du moteur sera fonction de la fréquence max que la carte peut donner, et il te faut faire une fonction qui gérer une fréquence croissante en fonction du temps (linéaire c'est facile) en fonction du nombre de pas que tu veux faire, sinon ton moteur démarre à Vmax et plante.
voila. ++
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

23 mars 2010 à 19:37
Tes réflexion sont vachement pertinente (j'avais pas pensé a tout cela ^^)

Bon alors déjà, le problème que l'on a eu avec les sortit digital c'est que notre circuit imprimé qui est relié a la carte ne réagissais pas du tout avec les signaux 0 ou 1 ; alors on a mis du 0-5v a la place et la ca marchais très bien . (je referais des test demain matin pour voir , si je n'avais pas fais d'erreur de branchement)
Après, pour les Key Up je rectifie tout cela demain matin .
Pour mon moteur pas a pas il n'a pas 200 pas / tour mais seulement 48 pas / tour donc 7.5° par pas
Et pour les calculs sur la pas a pas , la fonction je verrais cela aussi demain matin
merci a toi
je te tient au courant
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

23 mars 2010 à 19:44
Désolé du double post , mais je vient de revérifié mes calculs et ils sont bon , et d'après ce que tu m'a dit avec une période aussi petite (33.33ms) ca va pas être faisable avec la VM110 ?
0
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
23 mars 2010 à 19:53
ben c'est juste 30ms, mais bon cela peut passer ;)
pour les sorties digitales c'est qu'elle "tire" au 0V et pas au 5V (voir notice de la carte)
en clair ton commun pour les sorties digital n'est pas au 0V comme sur un PNP, mais au 5V !
allez bosse bien , @dn
0
PhantomT1412
Messages postés
28
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012

23 mars 2010 à 20:54
Oki , par contre j'ai rien compris a comment je doit faire a partir de "Mais surtout là ou cela se corse"
0