Go Down

Topic: Ethernet + swich (dúvida) (Read 280 times) previous topic - next topic

yurilima95

Olá pessoal, estou com uma dúvida num pequeno projeto. A partir de um webserver eu consigo controlar alguns leds, porém além disso eu gostaria de opera-los também com o auxilio de um botão físico (swich) como posso fazer isso em meu código? Tentei encaixar de diversas maneiras, até segui alguns tutoriais mas não obtive sucesso, alguém poderia me ajudar? Porque não sei como fazer isso certo. Desde já agradeço. Meu código é o seguinte:


Quote
//Inclusão de bibliotecas
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>

//Criação de Arrays para MAC e IP
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x98, 0x36 };
byte ip[] = { 192, 168, 1, 4 };

//Define Porta
EthernetServer server(8090);

//Define pinos que utilizados
int led1 = 5;
int led2 = 6;
int led3 = 7;

//Define botão e variáveis de estado
int leitura = 0;
int botao = 8;
int estado = 1;

//String que armazena estações da página web
String readString = String(30);

//Variável de status do led do tipo string

String statusLed;

// Setup
void setup() {
  //Inicializa interface web
  Ethernet.begin(mac, ip);

  //Definindo pinos utilizados
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);

  pinMode(botao, INPUT);
 

}

void loop() {
  //Criando conexão com cliente
  EthernetClient client = server.available();

  //Verifica se tem cliente conectado
  if(client){
    //Enquando estiver conectado
    while(client.connected()){
     
      if(client.available()){

        // Váriável para checar conexão
        char c = client.read();
       
        if(readString.length() < 30 ){
          readString += (c);
        }

        if(c == "\n"){

          if(readString.indexOf("led1") >= 0){
            digitalWrite(led1, !digitalRead(led1));
          }
          if(readString.indexOf("led2") >= 0){
            digitalWrite(led2, !digitalRead(led2));
          }
          if(readString.indexOf("led3") >= 0){
            digitalWrite(led3, !digitalRead(led3));
          }


          // Parte do botao
          /* */
           leitura = digitalRead(botao);
           if (leitura != 0){
            while(digitalRead(botao) != 0){
              delay(100);
            }
            //Inverte o estado da porta
            estado = !estado;
            //Comandos para led1
            digitalWrite(led1, estado); 
            }/* */




          //Cabeçalho HTTP padrão
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          //Código em html para página web:

          //Cabeça
          client.println("<!doctype html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<title>Teste</title>");
          client.println("<meta name=\"viewport\" content=\"width=320\">");
          client.println("<meta name=\"viewport\" content=\"width=device-width\">");
          client.println("<meta charset=\"utf-8\">");
          client.println("<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\">");
          client.println("</head>");

          //Corpo
          client.println("<body>");
          client.println("<center>");

          // Condição para mudar o status do pino
          if(digitalRead(led1)){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led1\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 1 - "+statusLed+"</button>");
          client.println("</form> <br />");

          if(digitalRead(led2)){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led2\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 2 - "+statusLed+"</button>");
          client.println("</form> <br />");

          if(digitalRead(led3)){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led3\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 3 - "+statusLed+"</button>");
          client.println("</form> <br />");

          client.println("</center>");
          client.println("</body>");
          client.println("</html>");

          readString = "";

          client.stop();
        }
      }
    }
  }

}

tecdiego

Testa esse código e depois me fala, ajeitei o código sem testar, fiz de cabeça mesmo.

Code: [Select]

//Inclusão de bibliotecas
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>

//Criação de Arrays para MAC e IP
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x98, 0x36 };
byte ip[] = { 192, 168, 1, 4 };

//Define Porta
EthernetServer server(8090);

//Define pinos que utilizados
int led1 = 5;
int led2 = 6;
int led3 = 7;

//Define botão e variáveis de estado
int leitura = 0;
int botaoLed1 = 8;
int botaoLed2 = 9;   //Não lembro se pode usar estar portas na Etherhet Shield
int botaoLed3 = 10; //Qualquer coisa é só alterar as portas.

int estadoLed1 = 0;
int estadoLed2 = 0;
int estadoLed3 = 0;

//String que armazena estações da página web
String readString = String(30);

//Variável de status do led do tipo string

String statusLed;

// Setup
void setup() {
  //Inicializa interface web
  Ethernet.begin(mac, ip);

  //Definindo pinos utilizados
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);

  pinMode(botaoLed1, INPUT);
  pinMode(botaoLed2, INPUT);
  pinMode(botaoLed3, INPUT);
  

}

void loop() {
  //Criando conexão com cliente
  EthernetClient client = server.available();

  //Verifica se tem cliente conectado
  if(client){
    //Enquando estiver conectado
    while(client.connected()){
      
      if(client.available()){

        // Váriável para checar conexão
        char c = client.read();
        
        if(readString.length() < 30 ){
          readString += (c);
        }

        if(c == "\n"){

          if(readString.indexOf("led1") >= 0){
          
            estadoLed1 = !estadoLed1;
            digitalWrite(led1, estadoLed1);
          }

          if(readString.indexOf("led2") >= 0){
            estadoLed2 = !estadoLed2;
            digitalWrite(led2, estadoLed2);
          }

          if(readString.indexOf("led3") >= 0){
            estadoLed3  = !estadoLed3;
            digitalWrite(led3, estadoLed3);
          }


         /* // Parte do botao
           if(digitalRead(botaoLed1) == HIGH) {
               
              estadoLed1 = !estadoLed1;
             
              while(digitalRead(botaoLed1) == HIGH) {
               
              }
             digitalWrite(led1, estadoLed1);
           }
         
           // Led2
            if(digitalRead(botaoLed2) == HIGH) {
               
              estadoLed2 = !estadoLed2;
             
              while(digitalRead(botaoLed2) == HIGH) {
               
              }
              digitalWrite(led2, estadoLed2);
            }
             
          //Led3
            // Led2
            if(digitalRead(botaoLed3) == HIGH) {
               
              estadoLed3 = !estadoLed3;
             
              while(digitalRead(botaoLed3) == HIGH) {
               
              }
              digitalWrite(led3, estadoLed3);
            }

          




          //Cabeçalho HTTP padrão
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          //Código em html para página web:

          //Cabeça
          client.println("<!doctype html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<title>Teste</title>");
          client.println("<meta name=\"viewport\" content=\"width=320\">");
          client.println("<meta name=\"viewport\" content=\"width=device-width\">");
          client.println("<meta charset=\"utf-8\">");
          client.println("<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\">");
          client.println("</head>");

          //Corpo
          client.println("<body>");
          client.println("<center>");

          // Condição para mudar o status do pino
          if(estadoLed1 > 0){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led1\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 1 - "+statusLed+"</button>");
          client.println("</form> <br />");

          if(estadoLed2 >0){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led2\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 2 - "+statusLed+"</button>");
          client.println("</form> <br />");

          if(estadoLed3 > 0){
            statusLed = "Ligado";
          }else{
            statusLed = "Desligado";
          }
          client.println("<form action=\"led3\" method=\"get\">");
          client.println("<button type=submit style=\"width:200px;\">Led 3 - "+statusLed+"</button>");
          client.println("</form> <br />");

          client.println("</center>");
          client.println("</body>");
          client.println("</html>");

          readString = "";

          client.stop();
        }
      }
    }
  }

}

yurilima95

Não, ainda não alterou o estado dos leds :/

leandro1301

 Amigo, olhando seu codigo bem rapido achei esse trecho que trata da mudança de estado(nesse caso apenas do led1) certo, logo apenas adicionei uma sugestão de uma OR(OU) lendo a entrada do switch (para que possa usar um OU outro para aciona) que deseja ler em forma de variavel para que possa alterar. Segue abaixo:


        // Parte do botao
          /* */
           leitura = digitalRead(botao);
           if (leitura != 0 || digitalRead(PINSWITCH) != 0 )// apenas adicionei um OU na condição para mudança deestado
{
            while(digitalRead(botao) != 0){
              delay(100);
            }
            //Inverte o estado da porta
            estado = !estado;
            //Comandos para led1
            digitalWrite(led1, estado); 
 }/* */

Go Up