Problema na Pagina de Login, para ligar LEDs! [HTML]

Olá pessoal ! Estou implementando um programa para ligar/desligar led, com pagina de login e etc…

Problema: Tenho a pagina de login quase pronta, mas o problema é quando mudo a cor ou a fonte da palavra “Senha:” na pagina de login e tento digitar a senha novamente ele não reconhece mais a senha…

Alguém sabe me dizer o que está acontecendo ? Abaixo o código:

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

byte mac = { 0x90, 0xA2, 0xDA, 0x00, 0x49, 0xD6 };
byte ip = {192,168,1,111};
byte gateway = {192,168,1,1};
byte subnet = {255,255,255,0};

int tries = 0;
boolean proceed = true;
EthernetServer server(8080);

String state = String(3);

String readString = String(30);

int LED = 3,LED2=4;
int PIR = 2;
int LDR = 5;
int PIRstate = 0;
float photocell = 0;
char c = 0;
char command[2] = “\0”;

void Portada();

void setup(){
//start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
//Set pin 4 to output
pinMode(LED,OUTPUT);
pinMode(LED2,OUTPUT);
digitalWrite(LED,LOW);
digitalWrite(LED2,LOW);
state = “OFF”;
String state = String(3);
//enable serial datada print
Serial.begin(9600);
}

void loop(){
// Create a client connection

EthernetClient client = server.available();
if (client) {
while (client.connected()){
char c = client.read();
if (readString.length() < 30){
readString += c;
}
Serial.print(c);
if (c == ‘\n’) {
readString.trim();
if(readString == (“GET /?pwd=123 HTTP/1.1”)){
//client.println(“

Clave Ok

”);
proceed = true;
Portada();
}else{
//Pagina de login
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html; charset=utf-8”);
client.println();
client.print("

“);
client.print(”<span style=“color:#b22222;”><span style=“font-family:lucida sans unicode,lucida grande,sans-serif;”><span style=“font-size:48px;”>Casa Automatizada");
client.print("

“);
client.print(”");
client.println("");
client.println(“Senha:”);//<— Mudança na palavra Senha nessa linha causa meu problema.
client.println("");
client.print("");
client.println("");

}

readString="";
//stopping client
client.stop();
}
}
}
}

void Portada(){
while(proceed){
EthernetClient client = server.available();
// detect if current is the first line
boolean current_line_is_first = true;

if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if we’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if (c == ‘\n’ && current_line_is_blank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();

// auto reload webpage every 5 second
// client.println("<META HTTP-EQUIV=REFRESH CONTENT=5 URL=>");

// webpage title

client.print("

“);
client.println(”<span style=“color:#b22222;”><span style=“font-family:lucida sans unicode,lucida grande,sans-serif;”><span style=“font-size:48px;”>Painel de Controle Com Botoes");

// button functions

client.print("

“);
client.println(”");
client.println("");
client.println(“Liga LED”);
client.println("Desliga LED
“);
client.println(“Liga LED2”);
client.println(“Desliga LED2”);
client.print(”

“);
client.println(“logoff”);
client.println(”");
client.println("
");

break;
}
if (c == ‘\n’) {
// we’re starting a new line
current_line_is_first = false;
current_line_is_blank = true;
}
else if (c != ‘\r’) {
// we’ve gotten a character on the current line
current_line_is_blank = false;
}
// get the first http request
if (current_line_is_first && c == ‘=’) {
for (int i = 0; i < 1; i++) {
c = client.read();
command[ i ] = c; //<-- command[ i ]
}
// LED control
if (!strcmp(command, “1”)) {
digitalWrite(LED, HIGH);
}
else if (!strcmp(command, “2”)) {
digitalWrite(LED, LOW);
}
else if (!strcmp(command, “3”)) {
digitalWrite(LED2, HIGH);
}
else if (!strcmp(command, “4”)) {
digitalWrite(LED2, LOW);
}
else if (!strcmp(command, “5”)) {
proceed = false;
client.print("");
client.print("");
client.println("<META HTTP-EQUIV=REFRESH CONTENT=0.001 URL=>");
client.print("");
client.print("");

}

}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
}

Tente usar ’ no lugar de #

Onde está assim:
client.print("<center><strong><span style=\"color:#b22222;\"><span style=\"font-family:lucida sans

mude para:
client.print("<center><strong><span style=\"color:'b22222';\"><span style=\"font-family:lucida sans

infelizmente nao resolveu ! mas obrigado pela tentativa !

Substituiu nos 2 colors que tem no código?

sim substitui nos 2, e ele nao reconhece como comando de mudar de cor quando tiro # e boto '.. a letra fica na cor padrão preta..

Tente colocar o \ antes do #.

color:#b22222

Ou o nome da cor:

//drawing simple table
          client.println("<font color='green'>Simple table: ");
          client.println("
");
          client.println("<table border=1><tr><td>row 1, cell 1</td><td>row 1, cell 2</td></tr>");
          client.println("<tr><td>row 2, cell 1</td><td>row 2, cell 2</td></tr></table>");
          client.println("
");
          client.println("<hr />");
          //printing some link
          client.println("<font color='blue' size='5'>Link: ");

cara tive olhando aqui, e se meu programa passar de 15400 Bytes, a pagina nao carrega, se for abaixo disso funciona. ja aconteceu algo parecido ?

Provavelmente estás a ficar sem memória no chip??

creio que nao pois é um arduino UNO r3 e ele tem disponivel 32kbytes - 2Kbytes boot loader(nao tenho certeza) = 30Kbytes livres para programa ! deve ser algum erro no meu codigo html, que nao conheço muito e nao consegui achar ainda.

ou vc estaria falando da memoria SRAM(Onde são criadas e modificadas as variáveis ao longo da execução do sketch) ?

Com uma matemática dessa... acho que não devias discutir numeros... 32-2 = 30 != 33...

Se tivesses código a mais, nem sequer conseguias fazer download do programa para o chip... e assim de repente, apesar de já ter sido há 10 anos, tenho ideia que o programa nem sequer compilaria se passasse dos 30kB.

Eu estava a referir-me à memória RAM. É bastante comum em aplicacões no Arduino (onde a gestão de memória é, no melhor dos casos inexistente) que os programas bloqueiem por falta de memória RAM. Normalmente o que também acontece é o chip reiniciar sempre que chega a essa situacão. Reparaste se o chip reiniciou?

Já agora... não ajuda estares a criar a mesma variável (state) duas ou três vezes...

erro nao digitação, ja corrigido! quanto a reiniciar, nao tem acontecido, ele apenas nao carrega a pagina html, provavel que por falta de memoria o chip nao executa o programa corretamente, há como resolver esse problema sem diminuir as funções do programa ?

Pode ser por outro motivo... já meteste uns Serial.print para ver se o programa está a correr tudo certinho?

fala pessoal, resolvi o problema! realmente era falta de SRAM, implementei um verificador de memoria no programa para verificar e realmente tinha 140 bytes livres, muito baixo e quando o programa tentava executar isso nao permitia!

o codigo usado para verificar a memoria foi(junto claro com o programa desenvolvido) :

#include <MemoryFree.h>

void setup(){
Serial.begin(9600);  
 }

void loop(){
//habilitar teste de memoria
Serial.print("freeMemory()=");
  Serial.println(freeMemory());
  delay(2000);
 }

A solução foi puxar os comandos de html na memoria FLASH liberando assim ram na execução, acrescentando a biblioteca:

#include <avr/pgmspace.h>

e mudando os comandos de:

 client.println(" ");

para:

 client.println(F(" "));

após isso a memoria livre subiu para 1411 bytes, sim aumentou consideravelmente, pois eram duas paginas html.

Fico muito grato a todos que tentaram ajudar de alguma maneira! ja dei um positivo ae em vcs ! hehe

valeu!

FilipeMacedo

Valeu por compartilha a solução =)