Olá,

Possuo um esquema para controlar uma lampada atraves da Shield Ethernet e fazer o acionamento/desacionamento atraves de uma pagina php. Agora estou tentando implementar mais algumas coisas.. agora quero ligar/desligar pela web ou por um interruptor. Para isso estou usando o esquema three way mas ae no caso a pagina web não atualiza o status da lampada se caso eu acione a lampada pelo interruptor.. Uma ideia que eu tive foi usar um LDR para ficar checando se a lampada estaria ou nao ligada mas ae no caso quando eu vou enviar o status para o php.. ele acaba travando.. Caso eu aperte em algum botao ele nao responde

#include <SPI.h>
#include <Ethernet.h>

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 129 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,0, 1 };  // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };


// String que representa o estado dos dispositivos

EthernetServer server(80); // Cria o servidor na porta 8081

// String onde é guardada as msgs recebidas
char Luz[5] = "00L#";
char msg[5] = "00L#";
int sensor = 0;
int valorSensor = 0;

void setup() {
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.begin(9600);
  Serial.println("Comunicacao");
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
}

void loop() {
  EthernetClient client = server.available();
  while(client.connected()){
  if (client) {
    msg[1]=msg[2]; 
    msg[2]=msg[3]; 
    msg[3]=msg[4]; //msg[4]=msg[5]; msg[5]=msg[6];
    msg[4] = client.read();
    Serial.println("Conectado");
    Serial.print(msg[3]);
    Serial.print(msg[4]);    
    if (msg[4]=='#') {
      switch(msg[3]) {
        case 'R':
          // Se receber o comando 'R#' envia de volta o status dos
          //   dispositivos. (Que é a string 'Luz')
          client.write(Luz);
        break;
        case 'L':
          // Caso L#, ele copia os 4 bytes anteriores p/ a
          //   string 'Luz' e cada byte representa um
          // dispositivo, onde '1'=ON e '0'=OFF
          Luz[0]=msg[1];
          Luz[1]=msg[2];
          if (Luz[0]=='1') digitalWrite(9,HIGH); else digitalWrite(9,LOW);
          if (Luz[1]=='1') digitalWrite(8,HIGH); else digitalWrite(8,LOW);
        break;
        
      }
    }
  }
    int valorSensor = analogRead(sensor);
    if(valorSensor < 750){
      Serial.println("Está com pouca Luminosidade!");
      Luz[0]='0';
      client.write(Luz);
      Serial.println(Luz);
    }
    else{
      Serial.println("Está com alta luminosidade!");
      Luz[0]='1';
      client.write(Luz);
      Serial.println(Luz);
    }
    Serial.println(valorSensor);
    delay(5000);
 }

}

Teria alguma maneira de que assim que eu enviar Luz para o client.. eu liberar o canal para que o arduino possa receber dados que o php esteja possivelmente enviando?

p.s: se alguem tiver alguma outra ideia para eu ficar verificando se a lampada foi acionada pelo interruptor sou grato

Exibições: 93

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço