Pages: [1]   Go Down
Author Topic: Problemas usando <IRremote.h> y web server  (Read 1027 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Estoy realizando un proyecto en el que necesito almacenar un código por infrarrojo en una memoria, y luego desde un web server acceder a la memoria y retransmitirlo. La parte de capturar y almacenar el código y la programación del web server en el arduino están resueltas de forma separada pero cuando intento realizar un web server y coloco en el programa la librería <IRremote.h>, el arduino no me carga la página o empieza a comportarse erráticamente. Probé con varios IDE, desde el 022 para abajo.
El programa en cuestión es el siguiente:

#if ARDUINO > 18
#include <SPI.h> // needed for Arduino versions later than 0018
#endif

#include <Ethernet.h>
#include <IRremote.h>
#include <EEPROM.h>          //LIBRERÍA PARA MANEJO DE EEPROM (COPIAR DESPUES DENTRO DE LA CARPETA)
#include <Wire.h>            //LIBRERÍA WIRE
#include <TextFinder.h>
#include <avr/pgmspace.h> // for progmem

#define P(name) static const prog_uchar name[] PROGMEM // declare a static string

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,20 };
Server server(80);

char buffer[8]; // make this buffer big enough to hold requested page names

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  delay(3000);
  Serial.println("Ready");
}

void loop()
{
  Client client = server.available();
 
  if (client) {
    TextFinder finder(client );
    int type = 0;
   
    while (client.connected()) {

      if (client.available()) {
     
        // GET, POST, or HEAD
        if( finder.getString("","/", buffer,sizeof(buffer)) )
        { //int getString(char *pre_string,char *post_string,char *buf,int length);

          if(strcmp(buffer, "GET ") == 0 )
            type = 1;

          else if(strcmp(buffer,"POST ") == 0)
            type = 2;

          Serial.print("Type = ");
          Serial.println(type);
         
          // look for the page name
          if(finder.getString( "", "/", buffer, sizeof(buffer) ))
          {//int getString(char *pre_string,char *post_string,char *buf,int length);
         
            Serial.print(buffer);
            Serial.print("|");
             
            if(strcmp(buffer, "control")== 0)
              showcontrol(client, finder, type == 2); 
           
            else
              unknownPage(client, buffer);
          }
        }

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





void showcontrol(Client client, TextFinder finder, boolean isPost)
{
  Serial.println("ir");
  sendHeader(client,"CONTROL REMOTO IR");
  client.print("<body style=background-color:#041531>");
  client.println("<h2><font color=#FFFFFF size=’5′>CONTROL REMOTO IR<p>");
 
  if(isPost){
 
    Serial.println("isPost");
    finder.find("\n\r"); // skip to the body - Salta al cuerpo
    // find parameters starting with "pin" and stop on the first blank line
    Serial.println("searching for parms");
   
    int pin;
    int val;

    while(finder.findUntil("pinD", "\n\r")){
       pin = finder.getValue(); // the pin number
       val = finder.getValue(); // 0 or 1
      Serial.print(pin);
      Serial.print("=");
      Serial.println(val);
      //pinMode(pin, OUTPUT);
      //digitalWrite(pin, val);
     
      //Acciones a realizar...
    }
   
   
    switch( pin ) {
       
      case 1: //Control Remoto 1
         
        switch ( val ){
          case 0:
            Serial.println("Control Remoto 1: Accion 1");
          break;

          case 1:
            Serial.println("Control Remoto 1: Accion 2");
          break;

          default:
            Serial.println("No hubo coinsidencia con alguna accion del control remoto 2");
        }
         
      break;
         
      case 2: //Control Remoto 2

        switch ( val ){
          case 0:
            Serial.println("Control Remoto 2: Accion 1");
          break;

          case 1:
            Serial.println("Control Remoto 2: Accion 2");
          break;

          default:
            Serial.println("No hubo coinsidencia con alguna accion del control remoto 2");
        }
         
      break;
       
      default:
        Serial.println("No hubo coinsidencia con algun Control Remoto"); 
    }



  } // if(isPost){

  client.println("<table border='0' width=""500"">");
  // show output pins 6-9
  // note pins 10-13 are used by the ethernet shield

  for (int i = 1; i < 3 ; i++) {
    client.print("<tr><td width=""100""><font color=#FFFFFF size=’3′>Control Remoto ");
    client.print(i);
    client.print(" </td><td width=""70"" align=""center"">");
    htmlButtonControl(client, "On", "pinD", i, "1");
    client.print(" </td><td width=""70"" align=""center"">");
    htmlButtonControl(client, "Off", "pinD", i, "0");
    client.print(" </td><td width=""60"" align=""center"">");
    client.println("</td></tr>");
  }
 
  client.println("</table>");
 
  client.print("<a href=");
  client.print("http://www.controlethernet.com.ar:1030/");
  client.println("<h2><font color=#FFFFFF size=’3′><br><li>Back<br>");

}




// Crea los botones para la solapa de Controles Remotos
void htmlButtonControl( Client client, char * label, char *name, int nameId, char *value)
{
  //print( "<form action='/' method='POST'><p><input type='hidden'name='pinD9' value='1'><input type='submit' value='On'/></form>" );
 
  P(buttonBegin) = "<form action='/control' method='POST'><p><input type='hidden'name='";
  printP(client, buttonBegin);
  client.print(name);
  client.print(nameId);
  client.print("' value='");
  client.print(value);
  P(buttonType) = "'><input type='submit' value='";
  printP(client, buttonType);
  client.print(label);
  P(buttonEnd) = "'/></form>";
  printP(client, buttonEnd);
}


void unknownPage(Client client, char *page)
{
  Serial.println("index");
  sendHeader(client,"DOMOTICA");
  client.print("<body style=background-color:#041531>");
  client.println("<h2><font color=#FFFFFF size=’5′>DOMOTICA<br>");


  client.print("<a href=");
  client.print("http://192.168.0.20:1030/control");
  client.println("<h2><font color=#FFFFFF size=’3′><br><li>Control Remoto IR<br>");
 
  client.println("</ul></body></html>");
}


void sendHeader(Client client, char *title)
{
  // send a standard http response header
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println();
  client.print("<html><head><title>");
  client.println(title);
  client.println("</title><body>");
}


void printP(Client client, const prog_uchar *str)
{
  // copy data out of program memory into local storage, write out in
  // chunks of 32 bytes to avoid extra short TCP/IP packets
  // from webduino library Copyright 2009 Ben Combee, Ran Talbott
  uint8_t buffer[32];
  size_t bufferEnd = 0;
 
  while (buffer[bufferEnd++] = pgm_read_byte(str++)){
    if (bufferEnd == 32){
      client.write(buffer, 32);
      bufferEnd = 0;
    }
  }
 
  // write out everything left but trailing NUL
  if (bufferEnd > 1)
    client.write(buffer, bufferEnd - 1);
}

Con este programa tengo una página inicial que se titula Domotica y cuando se hace click en el link Control Remoto IR se queda cargando la página y nunca la termina de cargar. Por otro lado, al eliminar una parte del programa o bien comentar <IRremote.h>, la página se carga correctamente.
Me gustaría saber si alguien tuvo problemas similares usando dicha librería y la Ethernet Shield. 
Desde ya, muchas gracias.
Logged

Pages: [1]   Go Up
Jump to: