Go Down

Topic: controlar rele 5v command fusion (Read 137 times) previous topic - next topic

sixrc

boa tarde a todos, eu estou tentando enviar um pulso para o arduino através do command fusion iviewer 4 do android para o arduino conectado a uma placa ethernet shield e um roteador.

A Principio o arduino recebe o comando e envia o pulso, mas a após o primeiro pulso e programa continua em loop por alguns segundos. eu gostaria que ele enviasse o pulso e parasse apenas.

 Se alguem poder me ajudar eu ficaria muito agradecido, sou iniciante estou tentando fazer isso funcionar ja faz um tempo antes de pedir ajuda.



Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

//----ENDEREÇO MAC----------
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 0, 25);
//----- PORTA DO SERVE (80)------
EthernetServer server(80);

//--- AS PORTAS QUE SÃO RESPONSAVEIS PELO ACIONAMENTO DOS RELES (OUTPUTS)--------

int modRele1S1 = 8;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
 
 
  //---start das saidas
  pinMode(modRele1S1, OUTPUT);
  digitalWrite(modRele1S1,HIGH); 
 
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("novo cliente");
    // an http request ends with a blank line
    String vars;
   
    //--variaveis de recebimento de comando dos reles -----------------
   
    int varmodRele1S1 = 0;
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
        vars.concat(c);
        //------recebendo comandos do command fusion -------------------------
       
        if (vars.endsWith("/modRele1S1onoff")) varmodRele1S1 = 1; //----portão------
       
       
   
           
           //-----------ON/OFF DA PRIMEIRA SAIDA DO RELE DE 8 SAIDAS----------------
          if(varmodRele1S1 == 1)
            {
            digitalWrite(modRele1S1,LOW); // pulso do portão
            delay(300);
            digitalWrite(modRele1S1,HIGH); // pulso do portão
            }

      }
    }
  }
}

bubulindo

O que entendes por parasse apenas??
This... is a hobby.

sixrc

quando eu enviar a string /modRele1S1onoff pelo commando fusion apenas um pulso seria enviado ao rele

if(varmodRele1S1 == 1)
            {
            digitalWrite(modRele1S1,LOW); // pulso do portão
            delay(300);
            digitalWrite(modRele1S1,HIGH); // pulso do portão
            }

isto acontecesse apenas uma vez.

bubulindo

Assim?

Code: [Select]


unsigned char statRele = 0; //isto fica fora da função loop

//....

if(varmodRele1S1 == 1 && statRele == 0)
            {
             statRele = 1;
            digitalWrite(modRele1S1,LOW); // pulso do portão
            delay(300);
            digitalWrite(modRele1S1,HIGH); // pulso do portão
            }

if(varmodRele1S1 == 0) statRele = 0;
This... is a hobby.

Go Up