LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: ricard0g0mes em 19 de Fevereiro de 2014, 17:12

Título: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 19 de Fevereiro de 2014, 17:12
Boas,

Tenho andado a brincar com um módulo ethernet para arduino e estava sempre com muito trabalho a fazer o código html pois temos sempre de inserir o client.println(".... etc etc...

Sendo assim, fiz uma simples folha excel para ajudar na conversão, que disponibilizo cá para a malta.

Está sujeito a alterações que queiram sugerir ;)

Abraço

http://ricardogomes.eu/html_ard.xlsx (http://ricardogomes.eu/html_ard.xlsx)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fricardogomes.eu%2F1.png&hash=8dfca5f4454940abe26955ae3c400f6a449d1a77)
Título: Re: Conversor de código HTML para Arduino
Enviado por: CBX em 19 de Fevereiro de 2014, 18:20
porque é que não colocas o html todo dentro de uma string e fazes print dessa string? é muito mais simples...
Título: Re: Conversor de código HTML para Arduino
Enviado por: metRo_ em 19 de Fevereiro de 2014, 19:21
e poupas alguma memória penso eu de que...
Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 19 de Fevereiro de 2014, 19:30
porque nem sempre escrevo o mesmo.
por vezes tenho necessidade de imprimir algumas linhas dependentes de variaveis, ou algo do genero.

a mim... isto dá bastante jeito... pode ser que dê a mais alguém ;)
Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 19 de Fevereiro de 2014, 19:31
além disso... isto já altera os " para '
Título: Re: Conversor de código HTML para Arduino
Enviado por: senso em 19 de Fevereiro de 2014, 20:01
Já agora, esse client.println usa progmem ou isso é tudo enfiado na ram?
Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 19 de Fevereiro de 2014, 23:48
acho que nao entenderam bem para que serve este ficheiro...
é simplesmente para adicionar o client.println(" no inicio, o "); no final e alterar as " para '
assim, podem fazer a vossa pagina em qualquer editor html, testar o aspecto da pagina em qualquer explorador e depois, é só escrever directo no arduino.

Título: Re: Conversor de código HTML para Arduino
Enviado por: tarquinio em 20 de Fevereiro de 2014, 00:35
Eu tenho um programazinho que faz uma coisa parecida, mas é para criar variáveis em progmem.
Como o senso já tinha referido (ou melhor questionado), se não metes as coisas em progmem vais ter os programas a rebentar não tarda nada... Por exemplo o código que tens o teu exemplo no XLS ocupa praí 1.2k de RAM no arduino... Junta-lhe mais umas centenas de Kb para os buffers de serial e de ethernet, e ficas perigosamente perto dos 2k (que é a memoria total do arduino).

Outro detalhe é que tambem seria fixe usares escape characters em vez de substituires os " por ', porque às vezes dá jeito usar ambos no html (se tiveres certas cenas de Javascript, por exemplo).
Título: Re: Conversor de código HTML para Arduino
Enviado por: tarquinio em 20 de Fevereiro de 2014, 01:24
Deixo aqui o meu programazito se alguem quiser usar já agora...
No caso do teu input ricard0g0mes ele pega num txt e cria outro txt com o seguinte:
Código: [Seleccione]
P(htmlFullPageBegin) =
"<html>\n"
"<head>\n"
"<meta content=\"text/html; charset=ISO-8859-1\"\n"
"http-equiv=\"content-type\">\n"
"<title>Missao Suicida</title>\n"
"</head>\n"
"<style type=\"text/css\">\n"
"body {\n"
"background-repeat: no-repeat;}\n"
"</style>\n"
"<body background=\"http://ricardogomes.eu/geocaching/background.jpg\">\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><big><big><big><big><big><span style=\"color: rgb(249, 65, 24); font-weight: bold;\">Missao Suicida</span></big></big></big></big></big>\n"
"<br></br>\n"
"<br></br>\n"
"<br></br>\n"
"<form name=\"myform\" action=\"http://missao.ricardogomes.eu:155\" method=\"get\">\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input size=\"5\" name= \"codigo\" value=\"\" type=\"text\">\n"
"<input value=\"Enviar\" type=\"submit\">\n"
"</form>\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style=\"color: rgb(255, 204, 0); font-weight: bold;\">Temperatura: 22.70 C</span>\n"
"<br></br>\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></BODY>\n"
"</HTML>\n" ;

Tem algumas vantagens que às vezes dão jeito:
Mantem a identação com tabs, se ela existir.
Mantem as quebras de linha originais na mesma
Mantem todos os caracteres (" e ') iguais
Poupa MUITA memória ;)

Para imprimir uso uma coisa deste tipo:
Código: [Seleccione]
void printProgmem(const char *data)
{
int length = strlen_P(data);
uint8_t buffer[32];
size_t bufferEnd = 0;

while (length--)
{
if (bufferEnd == 32)
{
client.write(buffer, 32);
bufferEnd = 0;
}
buffer[bufferEnd++] = pgm_read_byte(data++);
}
if (bufferEnd > 0)
client.write(buffer, bufferEnd);
}

Este define é usado só para conveniencia, para tornar o codigo mais curto:
Código: [Seleccione]
#define P(name)   static const prog_uchar name[] PROGMEM

Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 20 de Fevereiro de 2014, 08:54
Deixo aqui o meu programazito se alguem quiser usar já agora...
No caso do teu input ricard0g0mes ele pega num txt e cria outro txt com o seguinte:
Código: [Seleccione]
P(htmlFullPageBegin) =
"<html>\n"
"<head>\n"
"<meta content=\"text/html; charset=ISO-8859-1\"\n"
"http-equiv=\"content-type\">\n"
"<title>Missao Suicida</title>\n"
"</head>\n"
"<style type=\"text/css\">\n"
"body {\n"
"background-repeat: no-repeat;}\n"
"</style>\n"
"<body background=\"http://ricardogomes.eu/geocaching/background.jpg\">\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><big><big><big><big><big><span style=\"color: rgb(249, 65, 24); font-weight: bold;\">Missao Suicida</span></big></big></big></big></big>\n"
"<br></br>\n"
"<br></br>\n"
"<br></br>\n"
"<form name=\"myform\" action=\"http://missao.ricardogomes.eu:155\" method=\"get\">\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input size=\"5\" name= \"codigo\" value=\"\" type=\"text\">\n"
"<input value=\"Enviar\" type=\"submit\">\n"
"</form>\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style=\"color: rgb(255, 204, 0); font-weight: bold;\">Temperatura: 22.70 C</span>\n"
"<br></br>\n"
"<span font-weight: bold;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></BODY>\n"
"</HTML>\n" ;

Tem algumas vantagens que às vezes dão jeito:
Mantem a identação com tabs, se ela existir.
Mantem as quebras de linha originais na mesma
Mantem todos os caracteres (" e ') iguais
Poupa MUITA memória ;)

Para imprimir uso uma coisa deste tipo:
Código: [Seleccione]
void printProgmem(const char *data)
{
int length = strlen_P(data);
uint8_t buffer[32];
size_t bufferEnd = 0;

while (length--)
{
if (bufferEnd == 32)
{
client.write(buffer, 32);
bufferEnd = 0;
}
buffer[bufferEnd++] = pgm_read_byte(data++);
}
if (bufferEnd > 0)
client.write(buffer, bufferEnd);
}

Este define é usado só para conveniencia, para tornar o codigo mais curto:
Código: [Seleccione]
#define P(name)   static const prog_uchar name[] PROGMEM

thanks!!!!

vou experimentar! ;)
Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 21 de Fevereiro de 2014, 13:36
Já funciona!!!
Excelente!!!

Não está a página toda assim, pois algumas linhas são só disponibilizadas conforme o estado de algumas variáveis do programa... mas a maior parte está, e realmente diminuiu bastante o espaço ocupado ;)

Thanks
Título: Re: Conversor de código HTML para Arduino
Enviado por: tarquinio em 21 de Fevereiro de 2014, 13:42
No problem.
Já agora, se não sabias, podes tambem usar a macro F(), que ja vem com o arduino.

Em vez de:
Código: [Seleccione]
Serial.print("ola");

podes usar:
Código: [Seleccione]
Serial.print(F("ola"));

Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 21 de Fevereiro de 2014, 13:52
No problem.
Já agora, se não sabias, podes tambem usar a macro F(), que ja vem com o arduino.

Em vez de:
Código: [Seleccione]
Serial.print("ola");

podes usar:
Código: [Seleccione]
Serial.print(F("ola"));

e usa também o PROGMEM, é isso?
isso ainda era melhor então :D
Título: Re: Conversor de código HTML para Arduino
Enviado por: tarquinio em 21 de Fevereiro de 2014, 14:36
Sim é a mesma coisa. A desvantagem do F() é que só usas a variável naquele sitio. É fixe para coisas que não se repetem. Mas quando queres guardar uma string para depois poderes usar em vários sitios diferentes, ou se quiseres ter o html e o código do arduino separados, a 1a maneira é melhor.
Título: Re: Conversor de código HTML para Arduino
Enviado por: ricard0g0mes em 21 de Fevereiro de 2014, 15:10
Sim é a mesma coisa. A desvantagem do F() é que só usas a variável naquele sitio. É fixe para coisas que não se repetem. Mas quando queres guardar uma string para depois poderes usar em vários sitios diferentes, ou se quiseres ter o html e o código do arduino separados, a 1a maneira é melhor.

hmmm... sendo assim, tenho de usar a primeira hipótese na maior parte das vezes...

thanks!!