Jump to content
Luigi

AutoIt & porta paralela

Recommended Posts

Este fim de semana tive tempo para investir em dois sonhos antigos: manipular LED & MOTOR.

 

Achei uma ótima DLL que envia dados e lê seu estado, está em WEBGRAFIA.

 

Deu pra fazer 2 scripts, um que manipula 8 leds e outro que controla 1 motor de passo de impressora.

 

Controlando LEDS.

O parte técnica para montar este circuito é exatamente o proposto no Rogercom.

 

#include <WindowsConstants.au3>
#include <Array.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <String.au3>

; WEBGRAFIA
; http://www.autoitscript.com/forum/topic/31708-parallel-port-control/

Global $DLLFileAndPath = 'inpout32.dll', $PortAddress = '0x278', $hMsg
Global $hDLL = DllOpen('user32.dll')
Global $canais = 8

Global $StatusRegisterAddress, $ControlRegisterAddress
CalculateRegisterAddresses($PortAddress)

If FileExists($DLLFileAndPath) = 0 Then
	MsgBox(0, 'Missing DLL File', 'Parallel Port Control DLL Missing at ' & $DLLFileAndPath & '. Cannot Continue.' & @CRLF & @CRLF & 'Download DLL from http://www.logix4u.net/inpout32.htm')
	_exit()
EndIf
Global $led[$canais], $ledState[$canais]
For $xx = 0 To $canais - 1
	$ledState[$xx] = 0
Next

Global $hGui = GUICreate('lpt', 800, 300)
HotKeySet("{ESC}", "_exit")

For $xx = 0 To $canais - 1
	$led[$xx] = GUICtrlCreateButton('', 10 + 60 * $xx, 10, 60, 60, $BS_NOTIFY)
	GUICtrlSetBkColor($led[$xx], 0x6F0202)
Next
Global $modo0 = GUICtrlCreateButton('Modo 01', 500, 10, 80, 20)
Global $modo1 = GUICtrlCreateButton('Modo 02', 500, 30, 80, 20)
Global $modo2 = GUICtrlCreateButton('Modo 03', 500, 50, 80, 20)
Global $modo3 = GUICtrlCreateButton('Modo 04', 500, 70, 80, 20)
;Global $modo4 = GUICtrlCreateButton('Modo 05', 500, 90, 80, 20)
Global $modo = 2
Global $jump = 0, $jumpDirection = 1
Global $delay = 150
Global $posicao = 0

Global $delayControl = GUICtrlCreateSlider(10, 110, 480, 20)
Global $delayLabel = GUICtrlCreateButton('delay[' & $delay & ' ms]', 500, 110, 80, 20)
GUICtrlSetData($delayControl, $delay / 10)
$hSlider = GUICtrlGetHandle($delayControl)


Global $controlFullRight = GUICtrlCreateButton('full right', 10, 150, 80, 20)
Global $controlHalfRight = GUICtrlCreateButton('half right', 90, 150, 80, 20)
Global $controlStop = GUICtrlCreateButton('stop', 170, 150, 80, 20)
Global $controlHalfLeft = GUICtrlCreateButton('half left', 250, 150, 80, 20)
Global $controlFullLeft = GUICtrlCreateButton('full left', 330, 150, 80, 20)

GUISetState()
GUIRegisterMsg($WM_HSCROLL, "_GUIEvents")
$start = TimerInit()
While 1
	$hMsg = GUIGetMsg()
	Switch $hMsg
		Case $GUI_EVENT_CLOSE
			_exit()
		Case $modo0
			If $modo <> 0 Then $modo = 0
		Case $modo1
			If $modo <> 1 Then $modo = 1
			sendBit(0)
			$jumpDirection = 1
		Case $modo2
			If $modo <> 2 Then $modo = 2
			sendBit(0)
		Case $modo3
			If $modo <> 3 Then $modo = 3
			;Case $modo4
			;	If $modo <> 4 Then $modo = 4
		Case $controlFullRight
		Case $controlHalfRight
		Case $controlStop
		Case $controlHalfLeft
		Case $controlFullLeft

	EndSwitch


	If TimerDiff($start) > $delay Then
		Switch $modo
			Case 0;random
				Local $num = Random(0, 2 ^ $canais, 1)
				sendBit($num)
				;If $num == 2 ^ $canais - 1 Then Beep(500, 1500)
			Case 1;barra
				For $xx = 0 To $canais - 1
					If $jumpDirection Then
						If $ledState[$xx] = 0 And Not BitAND(2 ^ $xx, $jump) Then
							$jump += 2 ^ $xx
							ExitLoop
						EndIf
					Else
						If $ledState[$canais - 1 - $xx] = 1 And BitAND(2 ^ ($canais - 1 - $xx), $jump) Then
							$jump -= 2 ^ ($canais - 1 - $xx)
							ExitLoop
						EndIf
					EndIf
				Next
				If $jump = 2 ^ $canais - 1 Then $jumpDirection = 0
				If $jump = 0 Then $jumpDirection = 1
				sendBit($jump)
			Case 2
				Local $id = _ArraySearch($ledState, 1, 0, $canais - 1, 0, 0, 0)
				If $id == -1 Then
					sendBit(1)
				Else
					If $id == $canais - 1 Then
						sendBit(1)
					Else
						sendBit(2 ^ ($id + 1))
					EndIf
				EndIf
			Case 3
				Local $id = _ArraySearch($ledState, 1)
				If $id == 0 Then
					$wer = 2 ^ ($canais - 1)
				Else
					$wer = 2 ^ ($id - 1)
				EndIf
				sendBit($wer)

;~ 				If _ArrayToString($ledState, '') == '10000000' Then
;~ 					sendBit(0)
;~ 				Else
;~ 					If _ArrayToString($ledState, '') == '00000000' Then
;~ 						sendBit(2 ^ $canais - 2)
;~ 					Else
;~ 						Local $id = _ArraySearch($ledState, 1)
;~ 						sendBit(2 ^ ($id - 1))
;~ 					EndIf
;~ 				EndIf
		EndSwitch
		$start = TimerInit()
	EndIf
WEnd

Func _GUIEvents($hWnd, $iMsgID, $WParam, $LParam)
	#forceref $hWnd, $iMsgID, $wParam, $lParam
	Switch $iMsgID
		Case $WM_HSCROLL
			Switch $LParam
				Case $hSlider
					;GUICtrlSendToDummy($iDumSlider, GUICtrlRead($delayControl))
					ConsoleWrite('>' & GUICtrlRead($delayControl) & @LF)
					$delay = GUICtrlRead($delayControl) * 10
					GUICtrlSetData($delayLabel, 'delay[' & $delay & ' ms]')
			EndSwitch
	EndSwitch
EndFunc   ;==>_GUIEvents

Func sendBit($input)
	$WriteAddress = $PortAddress
	If $input < 0 Or $input > 255 Then Return
	_led($input)
	DllCall($DLLFileAndPath, 'int', 'Out32', 'int', $WriteAddress, 'int', $input)
EndFunc   ;==>sendBit

Func _led($input)
	For $xx = 0 To $canais - 1
		If BitAND(2 ^ $xx, $input) And $ledState[$xx] == 0 Then
			GUICtrlSetBkColor($led[$xx], 0xFD0202)
			$ledState[$xx] = 1
		ElseIf Not BitAND(2 ^ $xx, $input) And $ledState[$xx] == 1 Then
			GUICtrlSetBkColor($led[$xx], 0x6F0202)
			$ledState[$xx] = 0
		EndIf
	Next
EndFunc   ;==>_led

Func _exit()
	SetLPTPortPins($PortAddress, 0, 0, 0, 0, 0, 0, 0, 0)
	DllClose($hDLL)
	DllClose($DLLFileAndPath)
	Exit
EndFunc   ;==>_exit
; ç=231/E7 Ç=199/C7



;Functions -> where the action happens!
Func SetLPTPortPins($WriteAddress, $Bit0, $Bit1, $Bit2, $Bit3, $Bit4, $Bit5, $Bit6, $Bit7)
	;Convert bits to BCD
	$BCD = 0
	If $Bit0 = 1 Then $BCD = $BCD + 1
	If $Bit1 = 1 Then $BCD = $BCD + 2
	If $Bit2 = 1 Then $BCD = $BCD + 4
	If $Bit3 = 1 Then $BCD = $BCD + 8
	If $Bit4 = 1 Then $BCD = $BCD + 16
	If $Bit5 = 1 Then $BCD = $BCD + 32
	If $Bit6 = 1 Then $BCD = $BCD + 64
	If $Bit7 = 1 Then $BCD = $BCD + 128
	;pass the call to inpout32.dll
	DllCall($DLLFileAndPath, 'int', 'Out32', 'int', $WriteAddress, 'int', $BCD)
EndFunc   ;==>SetLPTPortPins



Func CalculateRegisterAddresses($BaseAddress)
	;check for correct hex prefix
	If Not (StringLeft($BaseAddress, 2) = '0x' Or StringLeft($BaseAddress, 2) = '0X') Then
		MsgBox(0, 'Invalid Hex Notation', 'The port address  ' & $BaseAddress & ' entered was not in valid Hexadecimal notation.  It must start with 0x')
		Exit
	EndIf
	;check for valid hex characters in suffix
	If StringIsXDigit(StringTrimLeft($BaseAddress, 2)) = 0 Then
		MsgBox(0, 'Invalid Hex Notation', 'The port address  ' & $BaseAddress & ' entered was not in valid Hexadecimal notation.  The characters after the 0x must be only 0-9 and A-F')
		Exit
	EndIf
	;calculate status register address
	;Msgbox (0,'Debug','$BaseAddress = '& $BaseAddress & @CRLF & 'StringTrimLeft($BaseAddress, 2) = ' & StringTrimLeft($BaseAddress, 2) & @CRLF & 'Dec(StringTrimLeft($BaseAddress, 2)) = ' & Dec(StringTrimLeft($BaseAddress, 2)) & @CRLF & 'Hex(Dec(StringTrimLeft($BaseAddress, 2)) + 1) = ' & Hex(Dec(StringTrimLeft($BaseAddress, 2)) + 1))
	$RawHex = Hex(Dec(StringTrimLeft($BaseAddress, 2)) + 1)
	;trim leading zeros
	While 1
		If StringLeft($RawHex, 1) = '0' Then
			$RawHex = StringTrimLeft($RawHex, 1)
		Else
			ExitLoop
		EndIf
	WEnd
	$StatusRegisterAddress = '0x' & $RawHex
	;calculate control register address
	$RawHex = Hex(Dec(StringTrimLeft($BaseAddress, 2)) + 2)
	;trim leading zeros
	While 1
		If StringLeft($RawHex, 1) = '0' Then
			$RawHex = StringTrimLeft($RawHex, 1)
		Else
			ExitLoop
		EndIf
	WEnd
	$ControlRegisterAddress = '0x' & $RawHex
EndFunc   ;==>CalculateRegisterAddresses


; Webgrafia
; http://www.autoitscript.com/forum/topic/143469-slider-events/

 

 

http://www.youtube.com/watch?v=DL7rwJqljCk

 

Controlando um motor de passo.

A montagem para controlar o motor de passo levou um tempo considerável, o motor eu consegui de uma impressora velha, mas até achar o esquema dele na internet e desvendar a ordem das bobinas é que foi o bicho, mas tecnicamente falando, foi só seguir o Rogercom também.

 

Eu tive uma dificuldade considerável neste script, mas não em relação ao controle da porta paralela, o que está deficiente é a forma como é controlado o movimento, tem que ir clicando nos botões para movimentar.

Eu realmente gostaria de fazer algo parecido com isso:

Enquanto mantiver a tecla 'A' pressionada $modo = 0, liberou a tecla 'A', $modo = 3.

Enquanto mantiver a tecla 'B' pressionada $modo = 1, liberou a tecla 'B', $modo = 3.

Neste ponto aceito sugestões para fazer algo descente! ^^

A variável $modo é que armazena o tipo do movimento controlar o motor.

Ainda não entendo muito do controle de motores de passo, mas sei que AutoIt vai além de um simples script.

Tentei de diversas formas, usando _IsPressed, mas toda hora o Windows fica apitando.

Com IrrLicht não tenho esse problema...

#include-once
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <String.au3>
#include <WinAPI.au3>

; WEBGRAFIA
; http://www.autoitscript.com/forum/topic/31708-parallel-port-control/

Global $hGui, $hMsg, $hMsgOld
Global $keyRigFul, $keyRigHal, $keySopt, $keyLefHal, $keyLefFul, $key = 0, $mode = 3, $oldMode
Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
Global $DLLFileAndPath = 'inpout32.dll', $PortAddress = '0x278', $hMsg
If FileExists($DLLFileAndPath) = 0 Then
	MsgBox(0, 'Missing DLL File', 'Parallel Port Control DLL Missing at ' & $DLLFileAndPath & '. Cannot Continue.' & @CRLF & @CRLF & 'Download DLL from http://www.logix4u.net/inpout32.htm')
	_exit()
EndIf
Global $hMod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hMod)
HotKeySet('{ESC}', '_exit')

;$hGui = GUICreate('CNC', 800, 300, -1, -1)
$hGui = GUICreate('Motor de passo', 800, 300, -1, -1, -1, 0x2000000)

Global $led[4], $ledState[4] = [1, 0, 0, 0]
For $xx = 0 To 3
	$led[$xx] = GUICtrlCreateButton('', 50 + 80 * $xx, 10, 80, 80, $BS_ICON)
	GUICtrlSetColor(-1, 0xD4D0C8)
	If $ledState[$xx] == 0 Then
		GUICtrlSetBkColor($led[$xx], 0x6F0202)
	Else
		GUICtrlSetBkColor($led[$xx], 0xFD0202)
	EndIf
Next


$hButton0 = GUICtrlCreateButton('-A', 10, 200, 80, 20)
$hButton1 = GUICtrlCreateButton('-B', 90, 200, 80, 20)
$hButton2 = GUICtrlCreateButton('-C', 170, 200, 80, 20)
$hButton3 = GUICtrlCreateButton('STOP', 250, 200, 80, 20)
$hButton4 = GUICtrlCreateButton('+C', 330, 200, 80, 20)
$hButton5 = GUICtrlCreateButton('+B', 410, 200, 80, 20)
$hButton6 = GUICtrlCreateButton('+A', 490, 200, 80, 20)
GUICtrlSetBkColor($hButton3, 0xB7D364)

GUISetState(@SW_SHOW)
Global $start = TimerInit()
While 1
	If TimerDiff($start) > 10 Then
		Switch $mode
			Case 0
				_lessA()
			Case 1
				_lessB()
			Case 2
				_lessB()
			Case 3
			Case 4
				_moreC()
			Case 5
				_moreB()
			Case 6
				_moreA()
		EndSwitch
		$start = TimerInit()
	EndIf

	$hMsg = GUIGetMsg()
	Switch $hMsg
		Case $GUI_EVENT_CLOSE
			_exit()
		Case $hButton0
			_lessA()
		Case $hButton1
			_lessB()
		Case $hButton2
			_lessC()
		Case $hButton3
		Case $hButton4
			_moreC()
		Case $hButton5
			_moreB()
		Case $hButton6
			_moreA()
	EndSwitch
WEnd

Func _led()
	For $xx = 0 To 3
		If $ledState[$xx] Then
			If $ledState[$xx] == 1 Then GUICtrlSetBkColor($led[$xx], 0xFD0202)
		Else
			If $ledState[$xx] == 0 Then GUICtrlSetBkColor($led[$xx], 0x6F0202)
		EndIf
	Next
	_sendBit()
EndFunc   ;==>_led

Func _lessA()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '0001'
			$read = '0010'
		Case '0010'
			$read = '0100'
		Case '0100'
			$read = '1000'
		Case '1000'
			$read = '0001'
		Case '0011'
			$read = '0100'
		Case '0110'
			$read = '1000'
		Case '1100'
			$read = '1000'
		Case '1001'
			$read = '0001'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_lessA

Func _lessB()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '0001'
			$read = '0011'
		Case '0010'
			$read = '0110'
		Case '0100'
			$read = '1100'
		Case '1000'
			$read = '1001'
		Case '0011'
			$read = '0110'
		Case '0110'
			$read = '1100'
		Case '1100'
			$read = '1001'
		Case '1001'
			$read = '0011'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_lessB

Func _lessC()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '1000'
			$read = '1001'
		Case '1001'
			$read = '0001'
		Case '0001'
			$read = '0011'
		Case '0011'
			$read = '0010'
		Case '0010'
			$read = '0110'
		Case '0110'
			$read = '0100'
		Case '0100'
			$read = '1100'
		Case '1100'
			$read = '1000'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_lessC

Func _stop()
	Return
EndFunc   ;==>_stop

Func _moreA()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '1000'
			$read = '0100'
		Case '0100'
			$read = '0010'
		Case '0010'
			$read = '0001'
		Case '0001'
			$read = '1000'
		Case '1100'
			$read = '0010'
		Case '0110'
			$read = '0001'
		Case '0011'
			$read = '1000'
		Case '1001'
			$read = '0100'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_moreA

Func _moreB()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '1000'
			$read = '1100'
		Case '0100'
			$read = '0110'
		Case '0010'
			$read = '0011'
		Case '0001'
			$read = '1001'
		Case '1100'
			$read = '0110'
		Case '0110'
			$read = '0011'
		Case '0011'
			$read = '1001'
		Case '1001'
			$read = '1100'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_moreB

Func _moreC()
	Local $read = _ArrayToString($ledState, '')
	Switch $read
		Case '1000'
			$read = '1100'
		Case '1100'
			$read = '0100'
		Case '0100'
			$read = '0110'
		Case '0110'
			$read = '0010'
		Case '0010'
			$read = '0011'
		Case '0011'
			$read = '0001'
		Case '0001'
			$read = '1001'
		Case '1001'
			$read = '1000'
	EndSwitch
	$read = StringSplit($read, '', 2)
	For $xx = 0 To 3
		$ledState[$xx] = Int($read[$xx])
	Next
	_led()
EndFunc   ;==>_moreC

Func _sendBit($input = '')
	$WriteAddress = $PortAddress
	Local $arr = _ArrayToString($ledState, ''), $temp = 0
	For $xx = 0 To 3
		If $ledState[$xx] == 1 Then $temp += 2 ^ $xx
	Next
	ConsoleWrite('ledState[' & $arr & '] temp[' & $temp & ']' & @LF)
	DllCall($DLLFileAndPath, 'int', 'Out32', 'int', $WriteAddress, 'int', $temp)
EndFunc   ;==>_sendBit

Func _exit()
	DllCall($DLLFileAndPath, 'int', 'Out32', 'int', $PortAddress, 'int', 0)
	_WinAPI_UnhookWindowsHookEx($hHook)
	DllCallbackFree($hKeyProc)
	DllClose($DLLFileAndPath)
	Exit
EndFunc   ;==>_exit

Func _KeyProc($nCode, $wParam, $lParam)
	Local $tKEYHOOKS, $keyCode
	$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
	If $nCode < 0 Then
		Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
	EndIf
	If WinActive($hGui) Then
		If $wParam = $WM_KEYDOWN Then
			Local $keyCode = DllStructGetData($tKEYHOOKS, 'vkCode')
			Switch $keyCode
				Case 65;A
					If $mode == 3 Then
						$mode = 0
					EndIf
				Case 53;S
					If $mode == 3 Then
						$mode = 1
					EndIf
				Case 44;D
					If $mode == 3 Then
						$mode = 2
					EndIf
				Case 46;F
					If $mode == 3 Then
						$mode = 4
					EndIf
				Case 47;G
					If $mode == 3 Then
						$mode = 5
					EndIf
				Case 48;H
					If $mode == 3 Then
						$mode = 6
					EndIf
			EndSwitch
		ElseIf $wParam = $WM_KEYUP Then
			Local $keyCode = DllStructGetData($tKEYHOOKS, 'vkCode')
			Switch $keyCode
				Case 65;A
					If $mode == 0 Then
						$mode = 3
					EndIf
				Case 53;S
					If $mode == 1 Then
						$mode = 3
					EndIf
				Case 44;D
					If $mode == 2 Then
						$mode = 3
					EndIf
				Case 46;F
					If $mode == 4 Then
						$mode = 3
					EndIf
				Case 47;G
					If $mode == 5 Then
						$mode = 3
					EndIf
				Case 48;H
					If $mode == 6 Then
						$mode = 3
					EndIf
			EndSwitch
		EndIf
	EndIf
	Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc   ;==>_KeyProc

;motores
; http://pdf.directindustry.com/pdf/rta/the-general-catalogue-of-sanyo-denki-stepping-motors/20651-50655-_5.html
; http://sanyo-denki-online.com/nema23.htm

; http://embeddedfortheevil.wordpress.com/2010/07/03/stepper-motor-unipolar-control-via-parallel-port-2/

; http://madan.wordpress.com/parallel-port/

; http://datasheet.seekic.com/datasheet/KH42JM2-902_ETC_[ETC].html

; Sanyo Denki: 42 oz-in
;~ UNIPOLAR connection: Voltage: 6.4 V DC
;~ Current / phase: 1.2 A / phase
;~ Resistance / phase: 5.3 Ohm / phase
;~ Inductance / phase: 4.3 mH / phase
;~ Holding Torque 42 oz-in




;~ 	If _IsPressed('74', $hDLL) And $mode == 2 Then
;~ 		GUICtrlSetBkColor($hButton0, 0xB7D364)
;~ 		GUICtrlSetBkColor($hButton3, 0xD4D0C8)
;~ 		$mode = 0
;~ 	ElseIf Not _IsPressed('74', $hDLL) And $mode == 0 Then
;~ 		GUICtrlSetBkColor($hButton0, 0xD4D0C8)
;~ 		GUICtrlSetBkColor($hButton3, 0xB7D364)
;~ 		$oldMode = 0
;~ 		$mode = 2
;~ 	EndIf

;~ 	If _IsPressed('75', $hDLL) And $mode == 2 Then
;~ 		GUICtrlSetBkColor($hButton1, 0xB7D364)
;~ 		GUICtrlSetBkColor($hButton3, 0xD4D0C8)
;~ 		$mode = 1
;~ 	ElseIf Not _IsPressed('75', $hDLL) And $mode == 1 Then
;~ 		GUICtrlSetBkColor($hButton1, 0xD4D0C8)
;~ 		GUICtrlSetBkColor($hButton3, 0xB7D364)
;~ 		$oldMode = 1
;~ 		$mode = 2
;~ 	EndIf

;~ 	If _IsPressed('76', $hDLL) And $mode == 2 Then
;~ 		GUICtrlSetBkColor($hButton5, 0xB7D364)
;~ 		GUICtrlSetBkColor($hButton3, 0xD4D0C8)
;~ 		$mode = 3
;~ 	ElseIf Not _IsPressed('76', $hDLL) And $mode == 3 Then
;~ 		GUICtrlSetBkColor($hButton5, 0xD4D0C8)
;~ 		GUICtrlSetBkColor($hButton3, 0xB7D364)
;~ 		$oldMode = 3
;~ 		$mode = 2
;~ 	EndIf

;~ 	If _IsPressed('77', $hDLL) And $mode == 2 Then
;~ 		GUICtrlSetBkColor($hButton6, 0xB7D364)
;~ 		GUICtrlSetBkColor($hButton3, 0xD4D0C8)
;~ 		$mode = 4
;~ 	ElseIf Not _IsPressed('77', $hDLL) And $mode == 4 Then
;~ 		GUICtrlSetBkColor($hButton6, 0xD4D0C8)
;~ 		GUICtrlSetBkColor($hButton3, 0xB7D364)
;~ 		$oldMode = 4
;~ 		$mode = 2
;~ 	EndIf
 

 

http://www.youtube.com/watch?v=G119uh8Z0eM

Edited by Luigi

Share this post


Link to post
Share on other sites

Olá!

 

Apesar de preferir usar o Arduino para essas tarefas pois a porta paralela já não faz parte de PCs atuais...

Vou reproduzir em um simulador de circuitos, Proteus por exemplo, e ver os resultados!

 

Até lá,

 

JS

  • Like 2

Share this post


Link to post
Share on other sites

Poxa JS, faz uma hora que eu estou atrás de um programa como esse, e acabo de ler esta sugestão! Bingo!

 

Eu concordo com você, LPT hoje não está mais com essa bola toda, mas eu estou sem grana pra comprar um arduino...

 

Existe o http://www.virtualbreadboard.com que simula uma breadboard com arduino também, é legalzinho... mas as vezes irritante.

 

Tem alguma sugestão pra melhorar a execução das das funções do script? Só alterar o valor do $mode quando pressionada uma tecla e quando liberada volta ao default? Já usei _IsPressed, funciona, mas a droga do Windows fica apitando a todo momento! E tem outra coisa que me incomoda, ele fica em loop secundário até liberar o _IsPressed, acho isso um tanto quanto inconveniente...

 

Obrigado pela dica do Proteus! Me ajudou sem eu pedir.

Edited by Luigi

Share this post


Link to post
Share on other sites

No script do motor de passo, acho legal enquanto você estiver com o botão [w] pressionado, fazendo o motor subir, a tecla de descer não tenha função até que a [w] seja liberada, isso sem parar o loop indicado pelo GUICtrlCreateProgress.

Talvez eu só não esteja sabendo a forma de fazer isso.

Tem um vídeo abaixo mostrando o windows apitando.

Edited by Luigi

Share this post


Link to post
Share on other sites

@Luigi por algum motivo que ainda desconheço os seus scripts não funcionaram aqui mas alterei outro postado pelo @mutley que funcionou nos pinos de 2 a 9 que dá um total de 8 pinos mas eu preciso controlar 10 pinos, vc sabe como ativar os pinos 1, 14, 16 e 17?

 

Script alterado do @mutleey:

#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\Icon Collection Pack 2014\Hardware (14).ico
#AutoIt3Wrapper_Outfile=G:\AUTOIT\Bowling Manager\Gerenciador Boliche.exe
#AutoIt3Wrapper_Res_Comment=Teste LPT
#AutoIt3Wrapper_Res_Description=Script para teste na LPT
#AutoIt3Wrapper_Res_Fileversion=0.0.2.0
#AutoIt3Wrapper_Res_LegalCopyright=mutleey@hotmail.com
#AutoIt3Wrapper_Res_Language=1046
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
;******************************************************
;Autoit v3.3.8.1
;Autor MUTLEEY
;Data 11/02/2012
;Função: Testar os pinos da porta LPT
;******************************************************

Global $Pinos = 0 ; Inicia com todos os pinos desligados
Global $GUI, $InpOut32, $Bit, $Pino, $LigP16, $LigP1, $LigP14
Global $P2_ligado = False, $P3_ligado = False, $P4_ligado = False, $P5_ligado = False
Global $P6_ligado = False, $P7_ligado = False, $P8_ligado = False, $P9_ligado = False
Global $P16_ligado = False, $P1_ligado = False, $P14_ligado = False, $P17_ligado = False
Global $LigP2, $LigP3, $LigP4, $LigP5, $LigP6, $LigP7, $LigP8, $LigP9, $LigP16, $LigP17

; Opções do script
Opt('MustDeclareVars', 1) ; força a declaração das variaveis

#include-once
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <StaticConstants.au3>

Const $LPT1 = 0x378
Const $Branco = 0xffffff ; RGB Branco
Const $Verde = 0x00ff00 ; RGB Verde claro
Const $Preto = 0x000000 ; RGB Preto
Const $vermelho = 0xFF0000 ; RGB Vermelho
Const $azul = 0x0000FF ; RGB Azul

; Abre a InpOut32.dll
$InpOut32 = DllOpen(@ScriptDir & "\inpout32.dll")

; Desliga todos os pinos
DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pinos)

; Cria a Gui
$GUI = GUICreate("DB25 Pinos 2 ao 9 + 1, 14 e 17", 467, 131, -1, -1)
GUISetBkColor($Preto, $GUI) ;troca a cor de fundo da janela

GUICtrlCreateLabel("Endereço da Porta 0x378", 15, 12, 437, 25, $SS_CENTER)
GUICtrlSetFont(-1, 16, 800, 0, "Lucida Console")
GUICtrlSetColor(-1, $Branco)

$LigP2 = GUICtrlCreateButton("Pino 2", 15, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP3 = GUICtrlCreateButton("Pino 3", 90, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP4 = GUICtrlCreateButton("Pino 4", 165, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP5 = GUICtrlCreateButton("Pino 5", 240, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP6 = GUICtrlCreateButton("Pino 6", 315, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP7 = GUICtrlCreateButton("Pino 7", 390, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP8 = GUICtrlCreateButton("Pino 8", 13, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP9 = GUICtrlCreateButton("Pino 9", 90, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP16 = GUICtrlCreateButton("Pino 1", 165, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)

$LigP1 = GUICtrlCreateButton("Pino 14", 240, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $azul)
GUICtrlSetColor(-1, $Branco)
$LigP14 = GUICtrlCreateButton("Pino 16", 315, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $azul)
GUICtrlSetColor(-1, $Branco)
$LigP17 = GUICtrlCreateButton("Pino 17", 390, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $azul)
GUICtrlSetColor(-1, $Branco)

GUISetState(@SW_SHOW)

; Espera o usuario selecionar uma opção
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $LigP2 ; PINO 2
            If $P2_ligado = False Then
                _Liga(1)
                GUICtrlSetBkColor($LigP2, $Verde)
                $P2_ligado = True
            Else
                _Desl(1)
                GUICtrlSetBkColor($LigP2, $vermelho)
                $P2_ligado = False
            EndIf
        Case $LigP3 ; PINO 3
            If $P3_ligado = False Then
                _Liga(2)
                GUICtrlSetBkColor($LigP3, $Verde)
                $P3_ligado = True
            Else
                _Desl(2)
                GUICtrlSetBkColor($LigP3, $vermelho)
                $P3_ligado = False
            EndIf
        Case $LigP4 ; PINO 4
            If $P4_ligado = False Then
                _Liga(4)
                GUICtrlSetBkColor($LigP4, $Verde)
                $P4_ligado = True
            Else
                _Desl(4)
                GUICtrlSetBkColor($LigP4, $vermelho)
                $P4_ligado = False
            EndIf
        Case $LigP5 ; PINO 5
            If $P5_ligado = False Then
                _Liga(8)
                GUICtrlSetBkColor($LigP5, $Verde)
                $P5_ligado = True
            Else
                _Desl(8)
                GUICtrlSetBkColor($LigP5, $vermelho)
                $P5_ligado = False
            EndIf
        Case $LigP6 ; PINO 6
            If $P6_ligado = False Then
                _Liga(16)
                GUICtrlSetBkColor($LigP6, $Verde)
                $P6_ligado = True
            Else
                _Desl(16)
                GUICtrlSetBkColor($LigP6, $vermelho)
                $P6_ligado = False
            EndIf
        Case $LigP7 ; PINO 7
            If $P7_ligado = False Then
                _Liga(32)
                GUICtrlSetBkColor($LigP7, $Verde)
                $P7_ligado = True
            Else
                _Desl(32)
                GUICtrlSetBkColor($LigP7, $vermelho)
                $P7_ligado = False
            EndIf
        Case $LigP8 ; PINO 8
            If $P8_ligado = False Then
                _Liga(64)
                GUICtrlSetBkColor($LigP8, $Verde)
                $P8_ligado = True
            Else
                _Desl(64)
                GUICtrlSetBkColor($LigP8, $vermelho)
                $P8_ligado = False
            EndIf
        Case $LigP9 ; PINO 9
            If $P9_ligado = False Then
                _Liga(128)
                GUICtrlSetBkColor($LigP9, $Verde)
                $P9_ligado = True
            Else
                _Desl(128)
                GUICtrlSetBkColor($LigP9, $vermelho)
                $P9_ligado = False
            EndIf

        Case $LigP1 ; PINO 1 <============== Não consegui encontar o valor para ligar o pino
            If $P1_ligado = False Then
                _Liga(00)
                GUICtrlSetBkColor($LigP1, $Verde)
                $P1_ligado = True
            Else
                _Desl(00)
                GUICtrlSetBkColor($LigP1, $vermelho)
                $P1_ligado = False
            EndIf
        Case $LigP14 ; PINO 14 <============== Não consegui encontar o valor para ligar o pino
            If $P14_ligado = False Then
                _Liga(00)
                GUICtrlSetBkColor($LigP14, $Verde)
                $P14_ligado = True
            Else
                _Desl(00)
                GUICtrlSetBkColor($LigP14, $azul)
                $P14_ligado = False
            EndIf
        Case $LigP16 ; PINO 16 <============== Não consegui encontar o valor para ligar o pino
            If $P16_ligado = False Then
                _Liga(00)
                GUICtrlSetBkColor($LigP16, $Verde)
                $P16_ligado = True
            Else
                _Desl(00)
                GUICtrlSetBkColor($LigP16, $azul)
                $P16_ligado = False
            EndIf
        Case $LigP17 ; PINO 17 <============== Não consegui encontar o valor para ligar o pino
            If $P17_ligado = False Then
                _Liga(00)
                GUICtrlSetBkColor($LigP17, $Verde)
                $P17_ligado = True
            Else
                _Desl(00)
                GUICtrlSetBkColor($LigP17, $azul)
                $P17_ligado = False
            EndIf
    EndSwitch
WEnd

GUIDelete()
DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", 0)
DllClose($InpOut32)
Exit (0)

; Fecha os Pinos
Func _Desl($Pino)
    DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
EndFunc

; Abre os Pinos
Func _Liga($Pino)
    DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
EndFunc
Edited by Belini

Share this post


Link to post
Share on other sites

@Belini, tentando responder de forma rápida... há alguns pinos da porta paralela que são invertidos, isto é, você seta com on, e ele fica off, você seta off, e ele fica on...

Não lembro exatamente quais pinos são... não seria esse o caso?

Share this post


Link to post
Share on other sites

Pelo que eu li no site da rogercom os pinos 14, 16 e 17 são invertidos mas não sei como setar eles em on e em off!

 

 

Quando for trabalhar com o endereço do registrador 37Ah, tenha sempre em mente que para ativar os sinais Slct In, AutoFeed e Strob, será necessário colocar os bits em 0 (zero), porque eles trabalham de forma invetida, 0 (zero) ativa, 1 (um) desativa. Somente o Init trabalha na sua forma normal.

Edited by Belini

Share this post


Link to post
Share on other sites

Testa esse aqui... se não funfar, avisa.

ConsoleWrite(" on.inverse[ " & inverso(True) & " ]" & @LF)
ConsoleWrite("off.inverse[ " & inverso(False) & " ]" & @LF)


Func inverso($bInput = False)
	Return Not $bInput
EndFunc

Share this post


Link to post
Share on other sites

@Luigi tem como dar um exemplo do comando usando a dll para colocar em on e em off? Já estou com o cabo pronto aqui com os led's mas não consigo fazer os pinos destes led's piscarem!

Edited by Belini

Share this post


Link to post
Share on other sites

Acho que fica assim @Belini!

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\Icon Collection Pack 2014\Hardware (14).ico
#AutoIt3Wrapper_Outfile=G:\AUTOIT\Bowling Manager\Gerenciador Boliche.exe
#AutoIt3Wrapper_Res_Comment=Teste LPT
#AutoIt3Wrapper_Res_Description=Script para teste na LPT
#AutoIt3Wrapper_Res_Fileversion=0.0.2.0
#AutoIt3Wrapper_Res_LegalCopyright=mutleey@hotmail.com
#AutoIt3Wrapper_Res_Language=1046
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;******************************************************
;Autoit v3.3.8.1
;Autor MUTLEEY
;Data 11/02/2012
;Função: Testar os pinos da porta LPT
;******************************************************

Global $Pinos = 0 ; Inicia com todos os pinos desligados
Global $GUI, $InpOut32, $Bit, $Pino, $LigP16, $LigP1, $LigP14
Global $P2_ligado = False, $P3_ligado = False, $P4_ligado = False, $P5_ligado = False
Global $P6_ligado = False, $P7_ligado = False, $P8_ligado = False, $P9_ligado = False
Global $P16_ligado = False, $P1_ligado = True, $P14_ligado = True, $P17_ligado = True
Global $LigP2, $LigP3, $LigP4, $LigP5, $LigP6, $LigP7, $LigP8, $LigP9, $LigP16, $LigP17

; Opções do script
Opt('MustDeclareVars', 1) ; força a declaração das variaveis

#include-once
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <StaticConstants.au3>

Const $LPT1 = 0x378
Const $Branco = 0xffffff ; RGB Branco
Const $Verde = 0x00ff00 ; RGB Verde claro
Const $Preto = 0x000000 ; RGB Preto
Const $vermelho = 0xFF0000 ; RGB Vermelho
Const $azul = 0x0000FF ; RGB Azul

; Abre a InpOut32.dll
$InpOut32 = DllOpen(@ScriptDir & "\inpout32.dll")

; Desliga todos os pinos
DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pinos)

; Cria a Gui
$GUI = GUICreate("DB25 Pinos 2 ao 9 + 1, 14 e 17", 467, 131, -1, -1)
GUISetBkColor($Preto, $GUI) ;troca a cor de fundo da janela

GUICtrlCreateLabel("Endereço da Porta 0x378", 15, 12, 437, 25, $SS_CENTER)
GUICtrlSetFont(-1, 16, 800, 0, "Lucida Console")
GUICtrlSetColor(-1, $Branco)

$LigP2 = GUICtrlCreateButton("Pino 2", 15, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP3 = GUICtrlCreateButton("Pino 3", 90, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP4 = GUICtrlCreateButton("Pino 4", 165, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP5 = GUICtrlCreateButton("Pino 5", 240, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP6 = GUICtrlCreateButton("Pino 6", 315, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP7 = GUICtrlCreateButton("Pino 7", 390, 50, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP8 = GUICtrlCreateButton("Pino 8", 13, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP9 = GUICtrlCreateButton("Pino 9", 90, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP16 = GUICtrlCreateButton("Pino 1", 165, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)

$LigP1 = GUICtrlCreateButton("Pino 14", 240, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP14 = GUICtrlCreateButton("Pino 16", 315, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)
$LigP17 = GUICtrlCreateButton("Pino 17", 390, 90, 65, 25)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetBkColor(-1, $vermelho)
GUICtrlSetColor(-1, $Branco)

GUISetState(@SW_SHOW)

; Espera o usuario selecionar uma opção
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $LigP2 ; PINO 2
			If $P2_ligado = False Then
				_Liga(inverso(1))
				GUICtrlSetBkColor($LigP2, $Verde)
				$P2_ligado = True
			Else
				_Desl(inverso(1))
				GUICtrlSetBkColor($LigP2, $vermelho)
				$P2_ligado = False
			EndIf
		Case $LigP3 ; PINO 3
			If $P3_ligado = False Then
				_Liga(2)
				GUICtrlSetBkColor($LigP3, $Verde)
				$P3_ligado = True
			Else
				_Desl(2)
				GUICtrlSetBkColor($LigP3, $vermelho)
				$P3_ligado = False
			EndIf
		Case $LigP4 ; PINO 4
			If $P4_ligado = False Then
				_Liga(4)
				GUICtrlSetBkColor($LigP4, $Verde)
				$P4_ligado = True
			Else
				_Desl(4)
				GUICtrlSetBkColor($LigP4, $vermelho)
				$P4_ligado = False
			EndIf
		Case $LigP5 ; PINO 5
			If $P5_ligado = False Then
				_Liga(8)
				GUICtrlSetBkColor($LigP5, $Verde)
				$P5_ligado = True
			Else
				_Desl(8)
				GUICtrlSetBkColor($LigP5, $vermelho)
				$P5_ligado = False
			EndIf
		Case $LigP6 ; PINO 6
			If $P6_ligado = False Then
				_Liga(16)
				GUICtrlSetBkColor($LigP6, $Verde)
				$P6_ligado = True
			Else
				_Desl(16)
				GUICtrlSetBkColor($LigP6, $vermelho)
				$P6_ligado = False
			EndIf
		Case $LigP7 ; PINO 7
			If $P7_ligado = False Then
				_Liga(32)
				GUICtrlSetBkColor($LigP7, $Verde)
				$P7_ligado = True
			Else
				_Desl(32)
				GUICtrlSetBkColor($LigP7, $vermelho)
				$P7_ligado = False
			EndIf
		Case $LigP8 ; PINO 8
			If $P8_ligado = False Then
				_Liga(64)
				GUICtrlSetBkColor($LigP8, $Verde)
				$P8_ligado = True
			Else
				_Desl(64)
				GUICtrlSetBkColor($LigP8, $vermelho)
				$P8_ligado = False
			EndIf
		Case $LigP9 ; PINO 9
			If $P9_ligado = False Then
				_Liga(128)
				GUICtrlSetBkColor($LigP9, $Verde)
				$P9_ligado = True
			Else
				_Desl(128)
				GUICtrlSetBkColor($LigP9, $vermelho)
				$P9_ligado = False
			EndIf

		Case $LigP1 ; PINO 1 <============== Não consegui encontar o valor para ligar o pino
			If $P1_ligado = False Then
				_Liga(inverso(00))
				GUICtrlSetBkColor($LigP1, $Verde)
				$P1_ligado = True
			Else
				_Desl(inverso(00))
				GUICtrlSetBkColor($LigP1, $vermelho)
				$P1_ligado = False
			EndIf
		Case $LigP14 ; PINO 14 <============== Não consegui encontar o valor para ligar o pino
			If $P14_ligado = False Then
				_Liga(inverso(00))
				GUICtrlSetBkColor($LigP14, $Verde)
				$P14_ligado = True
			Else
				_Desl(inverso(00))
				GUICtrlSetBkColor($LigP14, $azul)
				$P14_ligado = False
			EndIf
		Case $LigP16 ; PINO 16 <============== Não consegui encontar o valor para ligar o pino
			If $P16_ligado = False Then
				_Liga(inverso(00))
				GUICtrlSetBkColor($LigP16, $Verde)
				$P16_ligado = True
			Else
				_Desl(inverso(00))
				GUICtrlSetBkColor($LigP16, $azul)
				$P16_ligado = False
			EndIf
		Case $LigP17 ; PINO 17 <============== Não consegui encontar o valor para ligar o pino
			If $P17_ligado = False Then
				_Liga(inverso(00))
				GUICtrlSetBkColor($LigP17, $Verde)
				$P17_ligado = True
			Else
				_Desl(inverso(00))
				GUICtrlSetBkColor($LigP17, $azul)
				$P17_ligado = False
			EndIf
	EndSwitch
WEnd

GUIDelete()
DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", 0)
DllClose($InpOut32)
Exit (0)

; Fecha os Pinos
Func _Desl($Pino)
	DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
EndFunc   ;==>_Desl

; Abre os Pinos
Func _Liga($Pino)
	DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
EndFunc   ;==>_Liga

Func inverso($bInput = False)
	Return Not $bInput
EndFunc   ;==>inverso
Edited by Luigi

Share this post


Link to post
Share on other sites

@Luigi aqui não funcionou para os 4 pinos que eu falei mas ontem mesmo fiquei até tarde pesquisando e consegui fazer todos acenderem mas no final das contas não resolveu pois acontece de todos os pinos ficarem ligados quando o windows inicia e só consigo desligar quando o programa abre, estou postando para exemplo o script funcionando nos 12 pinos.

     
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\Icon Collection Pack 2014\Hardware (14).ico
    #AutoIt3Wrapper_Outfile=G:\AUTOIT\Bowling Manager\Gerenciador Boliche.exe
    #AutoIt3Wrapper_Res_Comment=Teste LPT
    #AutoIt3Wrapper_Res_Description=Script para teste na LPT
    #AutoIt3Wrapper_Res_Fileversion=0.0.2.0
    #AutoIt3Wrapper_Res_LegalCopyright=mutleey@hotmail.com
    #AutoIt3Wrapper_Res_Language=1046
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;******************************************************
    ;Autoit v3.3.8.1
    ;Autor MUTLEEY
    ;Data 11/02/2012
    ;Função: Testar os pinos da porta LPT
    ;******************************************************
     
    Global $Pinos = 0 ; Inicia com todos os pinos desligados
    Global $GUI, $InpOut32, $Bit, $Pino, $LigP16, $LigP1, $LigP14
    Global $P2_ligado = False, $P3_ligado = False, $P4_ligado = False, $P5_ligado = False
    Global $P6_ligado = False, $P7_ligado = False, $P8_ligado = False, $P9_ligado = False
    Global $P16_ligado = False, $P1_ligado = True, $P14_ligado = True, $P17_ligado = True
    Global $LigP2, $LigP3, $LigP4, $LigP5, $LigP6, $LigP7, $LigP8, $LigP9, $LigP16, $LigP17
     
    ; Opções do script
    Opt('MustDeclareVars', 1) ; força a declaração das variaveis
     
    #include-once
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <StaticConstants.au3>
     
    Const $LPT1 = 0x378
    Const $Branco = 0xffffff ; RGB Branco
    Const $Verde = 0x00ff00 ; RGB Verde claro
    Const $Preto = 0x000000 ; RGB Preto
    Const $vermelho = 0xFF0000 ; RGB Vermelho
    Const $azul = 0x0000FF ; RGB Azul
     
    ; Abre a InpOut32.dll
    $InpOut32 = DllOpen(@ScriptDir & "\inpout32.dll")
     
    ; Desliga todos os pinos
    DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pinos)
     
    ; Cria a Gui
    $GUI = GUICreate("DB25 Pinos 2 ao 9 + 1, 14 e 17", 467, 131, -1, -1)
    GUISetBkColor($Preto, $GUI) ;troca a cor de fundo da janela
     
    GUICtrlCreateLabel("Endereço da Porta 0x378", 15, 12, 437, 25, $SS_CENTER)
    GUICtrlSetFont(-1, 16, 800, 0, "Lucida Console")
    GUICtrlSetColor(-1, $Branco)
     
    $LigP2 = GUICtrlCreateButton("Pino 2", 15, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP3 = GUICtrlCreateButton("Pino 3", 90, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP4 = GUICtrlCreateButton("Pino 4", 165, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP5 = GUICtrlCreateButton("Pino 5", 240, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP6 = GUICtrlCreateButton("Pino 6", 315, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP7 = GUICtrlCreateButton("Pino 7", 390, 50, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP8 = GUICtrlCreateButton("Pino 8", 13, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP9 = GUICtrlCreateButton("Pino 9", 90, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP16 = GUICtrlCreateButton("Pino 1", 165, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
     
    $LigP1 = GUICtrlCreateButton("Pino 14", 240, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP14 = GUICtrlCreateButton("Pino 16", 315, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
    $LigP17 = GUICtrlCreateButton("Pino 17", 390, 90, 65, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetBkColor(-1, $vermelho)
    GUICtrlSetColor(-1, $Branco)
     
    GUISetState(@SW_SHOW)
     
    ; Espera o usuario selecionar uma opção
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $LigP2 ; PINO 2
    			If $P2_ligado = False Then
    				_Liga(inverso(1))
    				GUICtrlSetBkColor($LigP2, $Verde)
    				$P2_ligado = True
    			Else
    				_Desl(inverso(1))
    				GUICtrlSetBkColor($LigP2, $vermelho)
    				$P2_ligado = False
    			EndIf
    		Case $LigP3 ; PINO 3
    			If $P3_ligado = False Then
    				_Liga(2)
    				GUICtrlSetBkColor($LigP3, $Verde)
    				$P3_ligado = True
    			Else
    				_Desl(2)
    				GUICtrlSetBkColor($LigP3, $vermelho)
    				$P3_ligado = False
    			EndIf
    		Case $LigP4 ; PINO 4
    			If $P4_ligado = False Then
    				_Liga(4)
    				GUICtrlSetBkColor($LigP4, $Verde)
    				$P4_ligado = True
    			Else
    				_Desl(4)
    				GUICtrlSetBkColor($LigP4, $vermelho)
    				$P4_ligado = False
    			EndIf
    		Case $LigP5 ; PINO 5
    			If $P5_ligado = False Then
    				_Liga(8)
    				GUICtrlSetBkColor($LigP5, $Verde)
    				$P5_ligado = True
    			Else
    				_Desl(8)
    				GUICtrlSetBkColor($LigP5, $vermelho)
    				$P5_ligado = False
    			EndIf
    		Case $LigP6 ; PINO 6
    			If $P6_ligado = False Then
    				_Liga(16)
    				GUICtrlSetBkColor($LigP6, $Verde)
    				$P6_ligado = True
    			Else
    				_Desl(16)
    				GUICtrlSetBkColor($LigP6, $vermelho)
    				$P6_ligado = False
    			EndIf
    		Case $LigP7 ; PINO 7
    			If $P7_ligado = False Then
    				_Liga(32)
    				GUICtrlSetBkColor($LigP7, $Verde)
    				$P7_ligado = True
    			Else
    				_Desl(32)
    				GUICtrlSetBkColor($LigP7, $vermelho)
    				$P7_ligado = False
    			EndIf
    		Case $LigP8 ; PINO 8
    			If $P8_ligado = False Then
    				_Liga(64)
    				GUICtrlSetBkColor($LigP8, $Verde)
    				$P8_ligado = True
    			Else
    				_Desl(64)
    				GUICtrlSetBkColor($LigP8, $vermelho)
    				$P8_ligado = False
    			EndIf
    		Case $LigP9 ; PINO 9
    			If $P9_ligado = False Then
    				_Liga(128)
    				GUICtrlSetBkColor($LigP9, $Verde)
    				$P9_ligado = True
    			Else
    				_Desl(128)
    				GUICtrlSetBkColor($LigP9, $vermelho)
    				$P9_ligado = False
    			EndIf
     
    		Case $LigP1 ; PINO 1 <============== Não consegui encontar o valor para ligar o pino
    			If $P1_ligado = False Then
    				_Liga(inverso(00))
    				GUICtrlSetBkColor($LigP1, $Verde)
    				$P1_ligado = True
    			Else
    				_Desl(inverso(00))
    				GUICtrlSetBkColor($LigP1, $vermelho)
    				$P1_ligado = False
    			EndIf
    		Case $LigP14 ; PINO 14 <============== Não consegui encontar o valor para ligar o pino
    			If $P14_ligado = False Then
    				_Liga(inverso(00))
    				GUICtrlSetBkColor($LigP14, $Verde)
    				$P14_ligado = True
    			Else
    				_Desl(inverso(00))
    				GUICtrlSetBkColor($LigP14, $azul)
    				$P14_ligado = False
    			EndIf
    		Case $LigP16 ; PINO 16 <============== Não consegui encontar o valor para ligar o pino
    			If $P16_ligado = False Then
    				_Liga(inverso(00))
    				GUICtrlSetBkColor($LigP16, $Verde)
    				$P16_ligado = True
    			Else
    				_Desl(inverso(00))
    				GUICtrlSetBkColor($LigP16, $azul)
    				$P16_ligado = False
    			EndIf
    		Case $LigP17 ; PINO 17 <============== Não consegui encontar o valor para ligar o pino
    			If $P17_ligado = False Then
    				_Liga(inverso(00))
    				GUICtrlSetBkColor($LigP17, $Verde)
    				$P17_ligado = True
    			Else
    				_Desl(inverso(00))
    				GUICtrlSetBkColor($LigP17, $azul)
    				$P17_ligado = False
    			EndIf
    	EndSwitch
    WEnd
     
    GUIDelete()
    DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", 0)
    DllClose($InpOut32)
    Exit (0)
     
    ; Fecha os Pinos
    Func _Desl($Pino)
    	DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
    EndFunc   ;==>_Desl
     
    ; Abre os Pinos
    Func _Liga($Pino)
    	DllCall($InpOut32, "int", "Out32", "int", $LPT1, "int", $Pino)
    EndFunc   ;==>_Liga
     
    Func inverso($bInput = False)
    	Return Not $bInput
    EndFunc   ;==>inverso
     

Share this post


Link to post
Share on other sites

Belini a um tempo atraz tive o mesmo problema que vc com um projeto que estava fazendo na epoca, pesquisei muito a respeito e por fim usei outras soluções...

 

mais nas minhas buscas a solução mais viavel que achei na epoca foi a do regercom, porem não cheguei a fazer e não sei se é 100% e o circuito não é muito complexo.

 

da uma olhada e olha se compensa... http://www.rogercom.com/pparalela/LptInit.htm

Share this post


Link to post
Share on other sites

@mutleey a solução deles se funcionar resolve mesmo o problema mas aqui já encontrei outra alternativa, um amigo que faz placas e que programa microcontroladores vai fazer uma placa que vai precisar de apenas 3 pinos da porta paralela e funcionará assim, quero acionar o motor 1 aí dou um pulso no pino 2 por exemplo e mais 5 no pino 3 aí aciona o motor 1, se quero acionar o motor 2 darei 2 pulsos no pino 2 e mais 5 no pino 3 até chegar em 8 pulsos no pino 2 que no caso acionará o motor 8 ou seja os 5 pulsos no pino 3 não muda e será uma confirmação que a sequência foi finalizada tipo quero acionar o motor 4 se eu der 4 pulsos no pino 2 e não confirmar com mais 5 no pino 3 nada será feito e aí não tem problema a porta paralela iniciar ligada! O terceiro pino será para parar os motores aí determina quantos pulsos serão dados prá ele desligar os motores ou seja apenas por número de pulsos dá prá fazer inúmeras coisas, ele me falou que se eu conseguise enviar letras pela porta paralela ou pela serial ficaria muito mais simples mas se não conseguir ele faz a placa para funcionar desta maneira que eu falei mesmo!

Edited by Belini

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×