Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    vb.net controllo 4 input direzionali e funzioni di direzione.

    Salve,sono alle prime armi con vb.net 2010 .
    vi chiedo un consiglio perche mi sono arenato su una funzione.
    ho 4 contatti esterni collegati ad un joystick , avanti /indietro /DX /sx,
    ho creato un timer che mi legge gli ingressi e con gli opportuni if degli stati logici degli ingressi attivo degli altri timer uno per direzione, esempio se leggo il pin avanti che e' 1 attivo il timer3 che contiene le istruzioni da eseguire.
    apparte qualche piccola defaliance funzionicchia.
    ora pero Vi chiedo, per fare le diagonali? ho provato a mettere degli if dove se gli stati di avanti e sx per esempio sono ad 1 mi chiama un altra funzione relativa alla diagonale, ma purtroppo nn va, perche giustamente se vado avanti e contemporaneamente attivo anche sx lui continua su avanti e nn mi fila...
    un sistema piu pulito per fare cio quale potrebbe essere? non riesco in nessun modo a dissociare il comando in uso da quello che si somma creando una nuova condizione.
    se serve posto il codice , ma temo sia un po lungo.
    se mi sono spiegato male chiedo scusa in anticipo.
    grazie mille

  2. #2
    allego il timer che legge gli stati deigli ingressi e attiva i timer relativi al comando da dare per ogni direzione.

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim pinstate As Boolean = False
    Dim pinstate1 As Boolean = False
    Dim pinstate2 As Boolean = False
    Dim pinstate3 As Boolean = False
    ' Set pin 1 as digital input (pin 1 has pin index 0!)
    myDevice.SetPinData(0, pinFunctionsEnum.pinFunctionDigitalInput)
    myDevice.SetPinData(1, pinFunctionsEnum.pinFunctionDigitalInput)
    myDevice.SetPinData(2, pinFunctionsEnum.pinFunctionDigitalInput)
    myDevice.SetPinData(3, pinFunctionsEnum.pinFunctionDigitalInput)
    device.SetPinData(22, PoKeysDevice_DLL.ePinCap.digitalOutput)
    device.SetPinData(23, PoKeysDevice_DLL.ePinCap.digitalOutput)
    device.SetPinData(24, PoKeysDevice_DLL.ePinCap.digitalOutput)
    device.SetPinData(25, PoKeysDevice_DLL.ePinCap.digitalOutput)







    myDevice.GetInput(0, pinstate)
    myDevice.GetInput(1, pinstate1)
    myDevice.GetInput(2, pinstate2)
    myDevice.GetInput(3, pinstate3)


    'marcia avanti timer 3 e
    If pinstate = False And
    pinstate1 = True And
    pinstate2 = True And
    pinstate3 = True Then


    Timer7.Enabled = False
    Timer3.Enabled = True


    ElseIf pinstate = True Then


    Timer3.Enabled = False
    Timer7.Enabled = True


    End If
    'marcia indietro timer 4 e
    If pinstate1 = False And
    pinstate = True And
    pinstate2 = True And
    pinstate3 = True Then
    Timer7.Enabled = False
    Timer4.Enabled = True

    ElseIf pinstate1 = True Then


    Timer4.Enabled = False
    'Timer7.Enabled = True


    End If
    'marcia destra timer 5 e
    If pinstate2 = False And
    pinstate = True And
    pinstate1 = True And
    pinstate3 = True Then
    Timer7.Enabled = False
    Timer5.Enabled = True


    ElseIf pinstate2 = True Then


    Timer5.Enabled = False
    'Timer7.Enabled = True


    End If


    'marcia sinistra timer 6 e
    If pinstate3 = False And
    pinstate1 = True And
    pinstate2 = True And
    pinstate = True Then
    Timer7.Enabled = False
    Timer6.Enabled = True


    ElseIf pinstate3 = True Then


    Timer6.Enabled = False
    'Timer7.Enabled = True

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La cosa migliore è utilizzare un thread che giri continuamente leggendo il device e che provveda ad eseguire le funzioni opportune a seconda della direzione rilevata.
    Sicuramente abbandonerei la versione con tutti quei timer.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    grazie mille della risposta.
    prima dei timer, nel form principale avevo messo tutte le condizioni e le relative operazioni da svolgere ed un timer che richiedeva gli stati degli input in maniera ciclica, ma se tenevo il pulsante della direzione per piu di 10 sec si impallava e rimaneva premuto.
    il device e' su ethernet in uscita e su usb in entrata(sono 2 schede diverse) devo fare i conti anche con i tempi di risposta delle schede.

  5. #5
    ho capito solo ora che cosa intendi, grazie, studio un po e faccio altre prove.
    sono autodidatta perdonatemi l orrore di quello che scrivo...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.