Problemas com acionamento de lâmpada pela internet com um só botão ON/OFF

Pessoal, estou com um probleminha aqui que parece simples de resolver, mas que ta me tirando o sono. Estou brincando com o Arduino de ligar/desligar lampadas pela internet. Cada vez que digitar /onoff no navegador, depois do endereço da pagina, quero que apague ou acenda a lampada, dependendo do estado anterior (depois pretendo criar um botão pra isso). O problema eh que quando eu acesso pelo navegador, a variável "buff" não complementa de jeito algum (em vermelho). Alguem sabe por que?
O código está abaixo:

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,199);

EthernetServer server(8888);

int lamp=8;
boolean buff=true;

void setup() {
pinMode (lamp,OUTPUT);
Serial.begin(9600);

// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());

}

void loop() {

EthernetClient client = server.available();

if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
String vars;


while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
vars.concat(c); // adiciona na variavel" vars" o ultimo caracter do navegador e concatena todos eles

if (vars.endsWith("/onoff")) {
buff=!buff;
}

if (c == '\n' && currentLineIsBlank) {


client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("<body style=background-color:blue>");
client.println("<font color='red'><h1 align=center>Seja Bem Vindo Lucas</font></h1>");
client.println("<body background='https://dl.dropboxusercontent.com/u/35749425/tecnologia.jpg'");


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

client.println("<img src='https://dl.dropboxusercontent.com/u/35749425/sao-paulo-ganha-museu-da-lampada.jpg' style=\"position:fixed;left:25px;top:80px;width:63px;height:43px;z-index:1;padding:0;\">");
client.println("<br />");
client.println("<br />");


//client.println("<meta http-equiv=\"refresh\" content=\"5\">");


client.println("<br />");
//
//
//
if(buff==1){
digitalWrite(lamp,HIGH);
//client.println("<font color='green'size='3'>ON");
////
//


}
else if (buff==0){
//client.println("<font color='red'size='3'>OFF");

//client.println("desligado");

digitalWrite(lamp,LOW);

}


client.println("</html>");
Serial.println(buff);
break;
}

if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
//Serial.println("client disonnected");
}
}

Exibições: 910

Responder esta

Respostas a este tópico

Cara, dê uma olhada neste link: http://startingelectronics.com/tutorials/arduino/ethernet-shield-we...  Acho que tem tudo o que voce precisa. Eu reproduzi exatamente como apresentado e depois comecei a trocar os LEDs por circuitos com Reles e funcionou perfeitamente. Estou ligando e desligando lampadas e aparelhos elétricos em geral pela internet de qualquer lugar que eu esteja.

Um abraço!

Vou olhar com calma sim amigo, muito obrigado!
Abraços

Adelcio, você pode fornecer seu codigo ? 

Veja se consegue pegar em: ftp://srv-portoinfo.ddns.com.br/Automacao qquer coisa, me chame novamente. Obs: o arquivo HTML deve ser gravado no SD card do Ethernet Shield

Puxa Adelcio, muito obrigado por fornecer o codigo.. Sinto que não tenho o conhecimento necessario para desenvolve-lo mas aos poucos vou tentando.. Este projeto foi você quem criou ? A pagina html e tudo.. 

Como eu disse acima, comecei tentando entender aquele projeto do link: http://startingelectronics.com/tutorials/arduino/ethernet-shield-we... e fui acrescentando funcionalidades e desenvolvendo os relés e sensores de temperatura, luminosidade na protoboard mesmo. Tenho a intenção de implantar pra valer algum dia na minha casa. Quem sabe um dia . . .

Tenho a mesma intenção.. Quem sabe ne hahahahah!! 

Abraços, obrigado

Adelcio, parabéns pelo trabalho, minha pergunta é a se vc pretende colocar botões de pulso no projeto para acionar as lâmpadas, estou trabalhando num projeto justamente para ter acionamento web e por pulsadores mas não estou conseguindo.
Outra pergunta, no seu projeto onde esta setado o estado inicial dos reles? Meu relê tem acionamento invertido, quando liga ele entra fechado.

Abraço

Aih vai meu chute ! nem li todo o programa...

Tenta colocar um // no lugar da / em vermelho.

Acontece que a "/" eh um caracter especial, pode estar sendo interpretada como  "/o".

"//" gera um caracter "/".

 

Obrigado pela resposta Eduardo, mas não é isso. Monitorando pela Serial consigo visualizar que ao digitar no navagador ele recebe o "/onoff". Inclusive se eu colocar dentro do if em vermelho buff=1, ele executa essa condição. Ele só não executa quando tento complementar a variável. É bem estranho.

Nao sei... 

Mas tente usar char normal. 0 ou 1. Aih vc faria buf=1-buf.

O Boolean nesse compilador eh sem graça... pq ocupa 1 byte. Em outros microcontroladores ocupa 1 bit. Acaba nao sendo tanta vantagem. Mais uma questao de organizacao. Se tiver bug entao...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço