Olá galera.
Estou criando um projeto de automação residêncial, com ethenet shield v1.1, com poucas lampadas ele funciona mas a medida que aumento o tamanho do código ele carrega mas nao abre e depois da falha.
Alguém sabe um modo de otimizar esse código?
[code]
#include "etherShield.h"
#include "ETHER_28J60.h"
int PinoLed7 = 7;
int PinoLed6 = 6;
int PinoLed5 = 5;
int PinoLed4 = 4;
int PinoLed3 = 3;
int PinoLed2 = 2;
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {10,0,0,7};
static uint16_t port = 80;
ETHER_28J60 ethernet;
void setup()
{
ethernet.setup(mac, ip, port);
pinMode(PinoLed7, OUTPUT);
pinMode(PinoLed6, OUTPUT);
pinMode(PinoLed5, OUTPUT);
pinMode(PinoLed4, OUTPUT);
pinMode(PinoLed3, OUTPUT);
pinMode(PinoLed2, OUTPUT);
}
void loop()
{
char* params;
if (params = ethernet.serviceRequest())
{
ethernet.print("<h1><a href='http://localhost/TCC/Principal.php'>Arduino Web Remote</a></h1>");
//pino7
if (strcmp(params, "?led1=on")== 0)
{
digitalWrite(PinoLed7,LOW);
ethernet.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led1=off") == 0)
{
digitalWrite(PinoLed7, HIGH);
ethernet.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
//pino 6
if (strcmp(params, "?led6=on")== 0)
{
digitalWrite(PinoLed6,LOW);
ethernet.print("<a href='?led6=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led6=off") == 0)
{
digitalWrite(PinoLed6, HIGH);
ethernet.print("<a href='?led6=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
//PINO 5
if (strcmp(params, "?led5=on")== 0)
{
digitalWrite(PinoLed5,LOW);
ethernet.print("<a href='?led5=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led5=off") == 0)
{
digitalWrite(PinoLed5, HIGH);
ethernet.print("<a href='?led5=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
// PINO 4
if (strcmp(params, "?led4=on")== 0)
{
digitalWrite(PinoLed4,LOW);
ethernet.print("<a href='?led4=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led4=off") == 0)
{
digitalWrite(PinoLed4, HIGH);
ethernet.print("<a href='?led4=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
//PINO 3
if (strcmp(params, "?led3=on")== 0)
{
digitalWrite(PinoLed3,LOW);
ethernet.print("<a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led3=off") == 0)
{
digitalWrite(PinoLed3, HIGH);
ethernet.print("<a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
//PINO 2
if (strcmp(params, "?led2=on")== 0)
{
digitalWrite(PinoLed2,LOW);
ethernet.print("<a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
}
else if (strcmp(params,"?led2=off") == 0)
{
digitalWrite(PinoLed2, HIGH);
ethernet.print("<a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
}
ethernet.respond();
}
}
[\code]
Tags: Arduino, Automação, Ethernet, Residencial, Shield
Permalink Responder até Eduardo H. Marcondes em 12 outubro 2012 at 10:32
Permalink Responder até GUSTAVO D. MARTINS em 12 outubro 2012 at 11:44
Pior que não, não sei se ele não aguenta a quantidade de tráfego e demora a responder não completando a solicitação.
Permalink Responder até Hugo Bernard Armond Vieira em 12 outubro 2012 at 12:43
Já fiz um código bem maior que esse usando o wiznet 5100 e pelo menos na rede local funcionava muito bem...
Permalink Responder até Gustavo Frainer em 12 outubro 2012 at 16:55
Cara... Não sei como é o processamento interno no microcontrolador, mas em processadores normais, em geral, usar tantos if-else não é nada bom... Tente usar switch-case. Vai dar um pouco de trabalho para alterar a lógica, mas acho que já ajuda.
Alias, sugiro que só deixe o tratamento de um pino e teste, pra ver se funciona. Tu estas testando as condições usando métodos que verificam strings do início ao fim... isso pode não ajudar muito...
Permalink Responder até Rodrigo Pinheiro Matias em 12 outubro 2012 at 22:24
uma dica.
No declare variaveis para valores fixos utilize defines por exemplo
int ledA = 9;
Como estamos trabalhando com dispositivos com pouca memoria isto ai já vai ocupar o tamnho de um inteiro na memoria do MCU seria mais vantajoso utilizar um define
#define LED_A 9
Assim não estará utilizando memoria alem de que toda vez que o compilador encontra o uso de uma define ele a substitui pelo proprio valor isto também economiza linhas no assembly que indiretamente tornará seu aplicativo mais rápido (talvez vc não perceba) e menor.
Permalink Responder até Rodrigo Pinheiro Matias em 12 outubro 2012 at 22:25
Uma outra dica seria procurar uma biblioteca de expressão regular, para interpretar os parâmetros isto te pouparia os IFs
Permalink Responder até GUSTAVO D. MARTINS em 13 outubro 2012 at 11:13
Valeu a dica vou setar todas as variáveis com o #define e modificar o código utilizando o switch case
Permalink Responder até Vittorio Obrali Campanini em 13 outubro 2012 at 11:44
o problema não é o tamanho do codigo no arduino e sim o tamanhos dos dados que vc esta enviando ao client, tive este mesmo problema fazendo o mesmo projeto que vc esta tentando....
Solução: trabalhar com iframes dividindo a carga de dados (HTML).
Permalink Responder até GUSTAVO D. MARTINS em 15 outubro 2012 at 22:12
Galera, descobri o problema... Isso ocorre porque o Arduino não está aguentando acender todos os leds as mesmo tempo
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 54,00
Ou em até 12x de
R$ 5,10
Por: R$ 195,00
Ou em até 18x de
R$ 13,00
Válvula Solenóide de 12V - 3/4"
Por: R$ 36,00
Ou em até 7x de
R$ 5,56
© 2013 Criado por Marcelo Rodrigues.