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");
}
}
Tags:
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
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...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por