Código falhando do Arduino com o ScadaBR

Como estou começando agora estou com muita dificuldade de utilizar o ScadaBR com o Arduíno, e com minhas pesquisas não consigo encontrar a solução. Estou tentando fazer um código simples primeiro. Um botão Liga, um botão desliga e dois LEDS. Coloquei para o estado inicial que é o desligado o LED vermelho ficar acesso e o verde ficar apagado, se apertar o botão liga troca quais estão acessos e apagado e ele permanece ligado ate que aperte o desliga. Mas não estou conseguindo fazer isso de forma simples que achei que seria. Os LEDS ficam a todo momento acessos juntos ou não apagam. Vou mostrar como está meu código até agora.

#include <SimpleModbusSlave.h>

#define LED_GREEN 9
#define LED_RED 13
#define botaoLiga 5
#define botaoDesliga 6

enum
{
BOTAOLIGA_VAL,
BOTAODESLIGA_VAL,
LEDR_VAL,
LEDG_VAL,
HOLDING_REGS_SIZE
};

unsigned int holdingRegs[HOLDING_REGS_SIZE];

bool ligado = 0;
void botaoDesligaAcionado();

void setup() {

modbus_configure(&Serial, 115200, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(115200, SERIAL_8N1, 1);

pinMode(botaoLiga,INPUT);  
pinMode (LED_GREEN, OUTPUT); 
pinMode (LED_RED, OUTPUT);
attachInterrupt (digitalPinToInterrupt(botaoDesliga), botaoDesligaAcionado, RISING);

}

void loop() {

digitalWrite (LED_GREEN, LOW);
digitalWrite (LED_RED, HIGH);

modbus_update();
holdingRegs[LEDR_VAL]= LED_RED;
holdingRegs[LEDG_VAL]= LED_GREEN;
holdingRegs[BOTAOLIGA_VAL] = digitalRead(botaoLiga);
holdingRegs[BOTAODESLIGA_VAL] = digitalRead(botaoDesliga);

if (digitalRead(botaoLiga)==1){
  ligado=1;
}

if (holdingRegs[BOTAOLIGA_VAL] == 1){
  ligado=1;
}

if(ligado == 1)
{
  digitalWrite (LED_GREEN, HIGH);
  digitalWrite (LED_RED, LOW);
  holdingRegs[LEDG_VAL]= LED_GREEN;
  holdingRegs[LEDR_VAL]= LED_RED;
}

}

void botaoDesligaAcionado(){
ligado = 0;
modbus_update();
holdingRegs[BOTAODESLIGA_VAL] = digitalRead(botaoDesliga);
digitalWrite (LED_GREEN, LOW);
digitalWrite (LED_RED, HIGH);

}

Agradeço muito se puderem me ajudar!

dear hdnet
Você está usando protocolo modbus, em geral o modbus não toma decisões, ele armazena os estados das entradas e saídas no Arduino, e o scadabr lê esses estados e toma decisões de acordo com suas necessidades.

You are using modbus protocol , in general modbus dont make decisions ,it stores the states of inputs and outputs in Arduino, and scadabr reads these states and make decisions according to your needs.

i hope the translation is good.

1 curtida