While no arduino/ Elipse E3

Saudações amigos, estou realizando um programa para meu TCC e estou com um problema.
Consegui realizar a comunicação perfeitamente do Arduino MEGA/Elipse E3, porem, ao adicionar um WHILE na programação, o sofware trava dentro do while e nao consigo sair mais dele, mesmo desativando a condição que eu programei para entrar.
Em baixo segue uma programação de teste, a onde coloquei para ligar 3 LEDS e uma botao de emerg para entrar numa equação.É apenas um programa para testar as funcionalidades do Elipse/arduino

#include <Modbusino.h>

/* Indica o endereço do arduino no sistema /
ModbusinoSlave modbusino_slave(1);
/
Indica quantos tags existem no sistema,na versão demo o maximo é 20 tags */
uint16_t tab_reg[15];

/* Declaração das variaveis do processo /
int botao_led ;
int botao_teste ;
int botao_led2 ; /
Definindo a variavel do nosso botão de emergencia */
int botao_emerg;
int equacao;
int a;

void setup() {
/* define a taxa de transferencia do arduino com o elipse, é necessario se configurar na mesma taxa ambos */
modbusino_slave.setup(38400);

/* Define as entradas e saidas dos pinos do arduino */
pinMode(53,OUTPUT); /* Definindo o pino do led como saida */
pinMode(31,OUTPUT); /* Definindo o pino do led como saida */
pinMode(22,OUTPUT);

}

void loop() {

botao_emerg = tab_reg[0];
while (botao_emerg != 0){

a = tab_reg[1];
equacao = a + 50;
tab_reg[2] = equacao;

/* Função que atualiza o modbus */
modbusino_slave.loop(tab_reg, 15);

}
botao_emerg = 0;
botao_teste = tab_reg[3];
if (botao_teste <= 0) digitalWrite (51,LOW);
if (botao_teste >= 1) digitalWrite (51,HIGH);

botao_led = tab_reg[4];

if (botao_led <= 0) digitalWrite (31,LOW);
if (botao_led >= 1) digitalWrite (31,HIGH);

botao_led2 = tab_reg[5];
if (botao_led2 <= 0) digitalWrite (22,LOW);
if (botao_led2 >= 1) digitalWrite (22,HIGH);

/* Função que atualiza o modbus */
modbusino_slave.loop(tab_reg, 15);
}

NOTA: ao colocar o botao de emerg = 1, se os LEDS estiverem ligados, eles nao desligam, e se eu colocar o botao novamente para 0, nao tenho mais controle no processo

Agradeço a todos pela ajuda.

Pelo seu código, quando seu programa entra no while o seu botao_emergnunca mais tem um valor atribuído a ele, por isso ele ficará preso neste laço. Você pode corrigir isso trocando por um if, ou atribuindo o novo valor ao botao_emerg.

void loop()
{
  // Seu código.
  if (botao_emerg != 0) {
    // ...
  }
  /* botao_emerg = 0; */
  // Restante do seu código.
}
1 Like