xapu escribió:bueno.. voy a liberar este proyecto sin haberlo acabado.. ya que con el bachiller y entrenar no tengo tiempo para hacer todo lo que me gustaria..
me da mucha pena no acabarlo, no lo dejo abandonado del todo y realmente espero que alguien le interese el tema y lo mejore.. se que la manera de la que e establecido la comunicacion entre au3 y arduino podria mejorarse XD.
en navidades me pondre ha hacer un invernadero controlado por autoit via tcp y email si tengo tiempo, pero are funciones especificas para cada cosa..
bueno mucha suerte con esto!
http://filebeam.com/3faedca3250dac1b190feb4f5c9e030d
Ya le eche un vistazo y está bastante bien, usa el fichero commg.dll que hay que retocar la ruta en los ejemplos, y luego unas funciones de lectura y escritura de datos externos (hasta de temperatura, me imagino que dependiendo de la temperatura, se pone a funcionar o el riego, o se abre alguna compuerta).
Tienes un form sencillo de ejemplo para según en que boton hagas el click, se escriban datos hacia el exterior (un dispositivo, electrónico),
analogwrite($pin,$datos)
analogeread($pin)
digitalwrite($pin,$datos)
digitalread($pin)
No tengo la placa para probarlo, pero tiene buena pinta, si tienes más ejemplos comentalo. ¿Para que usas los archivos *.pde?
Salu22:)
Código de la librería principal tomada del archivo.rar de Xapu:
Código: Seleccionar todo
#include <CommMG.au3>
_CommSetDllPath("C:\rutadll\commg.dll")
Func conecta($port,$baud)
If $baud = "" Then $baud = 9600
Local $sportSetError
ConsoleWrite(_CommListPorts(0))
_CommSetPort($port, $sportSetError, 9600, 8, "none",2,1)
if $sportSetError = '' Then
Return 1
ConsoleWrite("using " & _CommGetVersion(1)))
Else
ConsoleWrite("error")
return $sportSetError
EndIf
EndFunc
;=====================================================================================
;
; Function Name: analogwrite($pin,$stat)
; Description: le da un valor analogico $stat al pin $pin
; Parameters: $pin : el pin al que se envia el valor
; $stat : el valor analogico a enviar al pin
;
; Returns: on success- 1
; on failure - @error llamando a la Dll del commMG.au3
;======================================================================================
Func analogwrite($pin,$stat)
dim $valorx, $valores
If $pin > 13 Then SetError(1,"pin no existe",-1)
If $stat < 0 Or $stat > 255 Then SetError(2,"valor mallor que 255 o menor que 0",-2)
If $pin > 9 Then
$pin = cambia($pin)
EndIf
_CommSendstring("b"&$pin&$stat)
Return 1
EndFunc
;=====================================================================================
;
; Function Name: analogread($pin)
; Description: lee el valor analogico del pin $pin
; Parameters: $pin : pin del arduino del que se va a leer el valor
;
; Returns:
; on success- el valor
; on failure - @error llamando a la dll del commMG.au3
;======================================================================================
Func analogread($pin)
If $pin > 13 Then SetError(1,"pin no existe",-1)
If $pin > 9 Then
$pin = cambia($pin)
EndIf
_CommSendstring("a"&$pin)
Sleep(100)
$valu=_CommGetstring()
Return $valu
EndFunc
;=====================================================================================
;
; Function Name: digitalread($pin,$stat)
; Description: lee el valor analogico de un pin del arduino
; Parameters: $pin: el pin a leer
;
; Returns:
; on success- el valor analogico del pin 1 o 0
; on failure - @error set to -2 si el valor de stat no es low o high
; on failure - @error llamando a la dll del commMG.au3
;======================================================================================
Func digitalread($pin)
If $pin > 13 Then SetError(1,"pin no existe",-1)
If $pin > 9 Then
$pin = cambia($pin)
EndIf
_CommSendstring('c'&$pin)
sleep(125)
Return _CommGetstring()
EndFunc
;=====================================================================================
;
; Function Name: digitalwrite($pin,$stat)
; Description: activa o desactiva un pin de arduino
; Parameters: $pin: suma de dos numeros menores que 9 que sumen el numero de tu Ping
; ejemplo: mi pin es el 12 pues $pin sera = a 6+6 o 7+5
; $stat- 0:desactiva 1:activa
; Returns: always 1
; on success- 1
; on failure - @error set to -2 si el valor de stat no es low o high
; on failure - @error llamando a la dll del commMG.au3
;======================================================================================
Func digitalwrite($pin,$stat)
dim $valorx, $valores
If $pin > 13 Then SetError(1,"pin no existe",-1)
If $stat <> 1 Or $stat <> 0 Then SetError(2,"digital write no es HIGH o LOW",-2)
If $pin > 9 Then
$pin = cambia($pin)
EndIf
$stat = 'd'&$pin&$stat
_CommSendstring($stat)
Return 1
EndFunc
;funcion para enviar el numero de pin en un solo bit
Func cambia($let)
Switch($let)
Case 10
Return "a"
Case 11
Return "b"
Case 12
Return "c"
Case 13
Return "d"
EndSwitch
EndFunc
Ejemplo de lectura desde el exterior (un pin o entrada input) tomado del archivo rar de Xapu!
FORM
Código: Seleccionar todo
#include <arduinx.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("TEST", 169, 83, 184, 125)
$Group1 = GUICtrlCreateGroup("Temperatura", 8, 8, 153, 65)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("24", 24, 24, 124, 38)
GUICtrlSetFont(-1, 24, 800, 0, "Neuropol")
GUISetState(@SW_SHOW)
conecta(3,9600)
Sleep(1000)
Código de lectura que modifica un label del form:
Código: Seleccionar todo
While 1
$temp = analogRead(3)
If $temp <> '' And $temp > 10 then
$temp = ((5*$temp)*100)/1024
GUICtrlSetData($label1,$temp)
EndIf
WEnd
Otro ejemplo de Xapu en arduinotest.au3 :
Enciende el interruptor o salida 2: digitalwrite(2,"1")
Apaga el interruptor o salida 2: digitalwrite(2,"0")