Imagine poder controlar a rotação de um motor elétrico, nível de luminosidade em determinado ambiente, abrir e fechar circuitos, acionar alarmes, trabalhar com diversos sensores como de temperatura, de presença usando o ERP Protheus. Com o arduino, isso é possível. E para começar a mostrar as possibilidades, irei iniciar com um projeto bem simples aonde uma tela em advpl terá botões que irão controlar o acendimento de leds.
Para começar, segue abaixo o código usado na IDE do Arduino:
const int LEDa = 13;
const int LEDb = 12;
const int LEDc = 11;
const int LEDd = 10;
void setup() {
Serial.begin(9600); //configura comunicação serial com 9600 bps
pinMode(LEDa,OUTPUT); //configura pino do led como saída
pinMode(LEDb,OUTPUT); //configura pino do led como saída
pinMode(LEDc,OUTPUT); //configura pino do led como saída
pinMode(LEDd,OUTPUT); //configura pino do led como saída
}
void loop() {
if (Serial.available()) //se byte pronto para leitura
{
apagaTudo();
switch(Serial.read()) //verifica qual caracter recebido
{
case 'A': //caso 'A'
digitalWrite(LEDa,HIGH); //inverte estado do LED
break;
case 'B': //caso 'B'
digitalWrite(LEDb,HIGH); //inverte estado do LED
break;
case 'C': //caso 'C'
digitalWrite(LEDc,HIGH); //inverte estado do LED
break;
case 'D': //caso 'D'
digitalWrite(LEDd,HIGH); //inverte estado do LED
break;
}
}
}
void apagaTudo()
{
digitalWrite(LEDa,LOW);
digitalWrite(LEDb,LOW);
digitalWrite(LEDc,LOW);
digitalWrite(LEDd,LOW);
}
Agora, a tela Protheus que irá controlar os leds:
#INCLUDE "rwmake.ch"
#INCLUDE 'PROTHEUS.CH'
#include "topconn.ch"
#INCLUDE 'FONT.CH'
#INCLUDE 'COLORS.CH'
User Function intARDU()
SetPrvt("oDlg1","oBtn1","oBtn2","oBtn3","oBtn4")
oDlg1 := MSDialog():New( 092,232,225,748,"INTEGRAÇÃO PROTHEUS VS ARDUINO",,,.F.,,,,,,.T.,,,.T. )
oBtn1 := TButton():New( 012,032,"LED A",oDlg1,{|| SendMSG('A')},037,012,,,,.T.,,"",,,,.F. )
oBtn2 := TButton():New( 012,080,"LED B",oDlg1,{|| SendMSG('B')},037,012,,,,.T.,,"",,,,.F. )
oBtn3 := TButton():New( 012,128,"LED C",oDlg1,{|| SendMSG('C')},037,012,,,,.T.,,"",,,,.F. )
oBtn4 := TButton():New( 012,176,"LED E",oDlg1,{|| SendMSG('D')},037,012,,,,.T.,,"",,,,.F. )
oDlg1:Activate(,,,.T.)
Return
Static Function SendMSG(cMSG)
Local cCfg := "COM3:9600,n,8,1"
Local nH := 0
lRet := msOpenPort(nH,cCfg)
if(!lRet)
Alert("Falha ao conectar com a porta serial")
Return
EndIf
msWrite(nH,cMSG)
Return
A tela no Protheus deverá ficar assim:
O esquema da placa ficaria assim:
Por último, o resultado: