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]

Exibições: 1351

Responder esta

Respostas a este tópico

Se todoo codigo eh esse nao parece estar grande....
Nao sera outro problema ?
Tipo o codigo completo pisca uma lampada que gera ruido e trava tudo ?

Eduardo.

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.

Já fiz um código bem maior que esse usando o wiznet 5100 e pelo menos na rede local funcionava muito bem...

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...

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.

Uma outra dica seria procurar uma biblioteca de expressão regular, para interpretar os parâmetros isto te pouparia os IFs

Valeu a dica vou setar todas as variáveis com o #define e modificar o código utilizando o switch case

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).

Galera, descobri o problema... Isso ocorre porque o Arduino não está aguentando acender todos os leds as mesmo tempo

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço