Não funciona parte da Web sozinha...

Sou leigo mas dou minhas cabeçadas.
O código até que funciona o sensor de Decibeis arma meu relé quando bate que desejo.
Mas via Web não consigo acionar clicando..
Somente consigo controle se o relé acionar pelo código do decibel..
Poderiam me dar uma luz pra ambos funcionarem?
Gostaria de poder ligar o relé ou desligar mesmo se o sensor de decibeis acionar.
Tipo um comando mestre por segurança.

Parte da temperatura ainda não coloquei em uso pois preciso ajustar isso primeiro kkkk
Segue meu código.
Se puderem auxiliar agradeço.

Obrigado

#include <SPI.h>
#include <Ethernet.h>
/* Código para mostrar valor em dB */
const int PinoSensor = A0; //pino Anlógico de Entrada 0
const int PinoDigital = 0;
//int Estado = 0;
int ValorSensor = 0;
int valorMaior = 0;
float tensao = 0;
int dB = 0;
int cont = 0;

// Codigo Relay
int relay = 3;

// Codigo Placa de Rede
byte mac[] = { 0xDE, 0xAD, 0xB7, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 77, 23 };
byte gateway[] = { 192, 168, 77, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
String readString;

void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
pinMode(0, INPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
}

void loop() {
EthernetClient client = server.available();
{
while(cont < 10000)
{
ValorSensor = analogRead(PinoSensor);
if(ValorSensor > valorMaior)
{
valorMaior = ValorSensor;
}
cont++;
}
cont = 0;
tensao = valorMaior/1023.04.53;
//dB = 103.1
tensao - 115,4;
dB = 87.1*tensao - 75,4;
if(dB < 0)
{
dB = 0;
}
if(dB > 30)
{
Serial.println("Aumento +30 = Relay On");
digitalWrite(relay, LOW);
}
else if (dB < 30) {
Serial.println("Menor 30 = Relay Off");
digitalWrite(relay, HIGH);
}
if(dB < 30)
valorMaior = 0;
}
delay(200);
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n') {
Serial.println(readString);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
client.println("");
client.println("");
client.println("");
client.println("

Sistema Gerador Ventilacao

");
client.println("
");
client.println("
");
client.println("<a href="/?venton"">Exaustores On ");
client.println("<a href="/?ventoff"">Exaustores Off
");
client.println("

");
client.println("Temperatura C:

");
client.println("

");
client.println("Humidade:

");
client.println("");
client.println("");
delay(1);
client.stop();
if (readString.indexOf("?venton") >0){
digitalWrite(relay, LOW);
}
if (readString.indexOf("?ventoff") >0){
digitalWrite(relay, HIGH);
}
readString="";
}
}
}
}
}

Como saber se o ON/OFF é por causa do sensor ou da web?

A página web precisa de uma terceira opção: ON/OFF/AUTO.

Quando estiver em AUTO, vai ser o sensor que controla, se não, vai ser a web, manualmente.

Defina uma variável booleana para esse controle e cheque antes de acionar o relé por causa do sensor, caso seja AUTO, nem precisa ler o sensor e fazer a lógica.

Seu código tem alguns trechos bloqueantes, por exemplo o while() e o delay(), precisaria ser reescrito para ter um tempo de resposta melhor. Porém vamos trabalhar na parte dos estados primeiro.

Opa! show obrigado!
Você conseguiria me mostrar? To perdido aqui.

Muito agradecido.

Testa isso aqui:

#include <SPI.h>
#include <Ethernet.h>
/* Código para mostrar valor em dB */
const int PinoSensor = A0; //pino Anlógico de Entrada 0
const int PinoDigital = 0;
//int Estado = 0;
int ValorSensor = 0;
int valorMaior = 0;
float tensao = 0;
int dB = 0;
int cont = 0;
boolean local= true;
// Codigo Relay
int relay = 3;

// Codigo Placa de Rede
byte mac[] = { 0xDE, 0xAD, 0xB7, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 77, 23 };                   
byte gateway[] = { 192, 168, 77, 1 };               
byte subnet[] = { 255, 255, 255, 0 };               
EthernetServer server(80);                                  
String readString;

void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
pinMode(0, INPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
}

void loop() {
EthernetClient client = server.available();
{
while(cont < 10000)
{
ValorSensor = analogRead(PinoSensor);
if(ValorSensor > valorMaior)
{
valorMaior = ValorSensor;
}
cont++;
}
cont = 0;
tensao = valorMaior/1023.0*4.53;
//dB = 103.1*tensao - 115,4;
dB = 87.1*tensao - 75,4;
if(dB < 0)
{
dB = 0;
}
if((dB > 30) && (local == true))
{
Serial.println("Aumento +30 = Relay On");
digitalWrite(relay, LOW);
}
else if ((dB < 30) && (local == true)) {
Serial.println("Menor 30 = Relay Off");
digitalWrite(relay, HIGH);
}
if(dB < 30)
valorMaior = 0;
}
delay(200);
if (client) {
  while (client.connected()) {  
    if (client.available()) {
      char c = client.read();
      if (readString.length() < 100) {
         readString += c;
        }
         if (c == '\n') {          
         Serial.println(readString);
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();    
         client.println("<HTML>");
         client.println("<HEAD>");
         client.println("</HEAD>");
         client.println("<BODY>");
         client.println("<H1>Sistema Gerador <font color=red> Ventilacao </font></H1>");
         client.println("<hr />");
         client.println("
");  
        
         if(local){ 
              client.println("Comando está selecionado para Local 
");
              client.println("<a href=\"/?remoto\"\">Comando Remoto</a>");
         } else if ( local = false){
           client.println("<a href=\"/?venton\"\">Exaustores On </a>");
           client.println("<a href=\"/?ventoff\"\">Exaustores Off </a>
");
            client.println("Comando está selecionado para Remoto
");
        client.println("<a href=\"/?local\"\">Comando Local</a>");
           client.println("

");
         }
     client.println("
         client.println("<font color=white><a>Temperatura C: </a>

</font>");
         client.println("

");
         client.println("<font color=white><a>Humidade: </a>

</font>");
         client.println("</BODY>");
         client.println("</HTML>");
         delay(1);
         client.stop();
             if (readString.indexOf("?venton") >0){
             digitalWrite(relay, LOW);
                }
             if (readString.indexOf("?ventoff") >0){
             digitalWrite(relay, HIGH);
                }
         if (readString.indexOf("?remoto) >0){
               local = false;
              } 
         if (readString.indexOf("?local) >0){
               local = true;
              } 
       }
     }
  }
}

Testa ai

Recomendo usar esse exemplo: Exemplo

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.