Pages: 1 [2] 3 4   Go Down
Author Topic: Servidor domotico con ethernet shield  (Read 17414 times)
0 Members and 2 Guests are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mmm te da error?? ami me compila bien, quizás tengas que bajarte la librería WString.h

el código es sencillo defines la MAC, la IP y el puerto, luego defines los pines de entradas / salidas y una variable booleana para saber si esta activo o no.
luego por medio de GET pasas comandos a la url de la pagina, y el arduino atrapa esos comandos, los verifica y si esta en la lista de acciones simplemente hace lo que le pides. la pagina web muestra el botón ON en caso q este apagado y OFF en caso q este prendido. aparte de eso no mucho mas, cualquier duda me avisas
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Acabo de bajarme la librería que me comentas en http://arduino.cc/en/uploads/Tutorial/String.zip la he incluído y sigue sin compilarme, no se si será la versión adecuada de la librería la que me he bajado.

Me dá los siguientes errores:

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:31: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:31: error: ISO C++ forbids declaration of 'Ethernet' with no type

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp: In function 'int Ethernet()':

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:31: error: 'int Ethernet()' redeclared as different kind of symbol

C:\arduino-0018\libraries\Ethernet\/Ethernet.h:20: error: previous declaration of 'EthernetClass Ethernet'

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp: At global scope:

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:34: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:38: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:43: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:47: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:51: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:55: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:60: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:64: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:68: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:72: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:77: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:81: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:85: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:89: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:93: error: 'Ethernet' is not a class or namespace

C:\arduino-0018\libraries\Ethernet\Ethernet.cpp.cpp:97: error: 'Ethernet' is not a class or namespace



Luego lo he probado con la versión 019 y a parte de incorporar la librería SPI que me pide al compilar, me da los siguientes errores:

C:\arduino-0019\libraries\String\WString.cpp:34: error: prototype for 'String::String(int)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:39: error: candidates are: String::String(long unsigned int, int)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:38: error:                 String::String(long int, int)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:37: error:                 String::String(unsigned int, int)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:36: error:                 String::String(int, int)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:35: error:                 String::String(unsigned char)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:34: error:                 String::String(char)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:33: error:                 String::String(const String&)
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:32: error:                 String::String(const char*)
C:\arduino-0019\libraries\String\WString.cpp: In constructor 'String::String(const char*)':
C:\arduino-0019\libraries\String\WString.cpp:50: error: '_array' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:52: error: 'setArray' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp: In copy constructor 'String::String(const String&)':
C:\arduino-0019\libraries\String\WString.cpp:60: error: '_array' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:61: error: 'clear' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:62: error: 'const class String' has no member named '_array'
C:\arduino-0019\libraries\String\WString.cpp:62: error: 'setArray' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp: In member function 'const String& String::operator=(const String&)':
C:\arduino-0019\libraries\String\WString.cpp:77: error: '_array' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:83: error: 'clear' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:84: error: 'const class String' has no member named '_array'
C:\arduino-0019\libraries\String\WString.cpp:84: error: 'setArray' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp: At global scope:
C:\arduino-0019\libraries\String\WString.cpp:90: error: prototype for 'const String& String::operator=(const char*)' does not match any in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:70: error: candidate is: const String& String::operator=(const String&)
C:\arduino-0019\libraries\String\WString.cpp:107: error: prototype for 'const String& String::operator+=(const char*)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:44: error: candidate is: const String& String::operator+=(const String&)
C:\arduino-0019\libraries\String\WString.cpp:127: error: prototype for 'const String& String::operator+=(char)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:44: error: candidate is: const String& String::operator+=(const String&)
C:\arduino-0019\libraries\String\WString.cpp:145: error: prototype for 'const String& String::operator+=(int)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:44: error: candidate is: const String& String::operator+=(const String&)
C:\arduino-0019\libraries\String\WString.cpp:159: error: prototype for 'const String& String::operator+=(long int)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:44: error: candidate is: const String& String::operator+=(const String&)
C:\arduino-0019\libraries\String\WString.cpp: In member function 'const String& String::operator+=(const String&)':
C:\arduino-0019\libraries\String\WString.cpp:176: error: '_array' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:179: error: 'setArray' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:183: error: '_array' was not declared in this scope
C:\arduino-0019\libraries\String\WString.cpp:183: error: 'const class String' has no member named '_array'
C:\arduino-0019\libraries\String\WString.cpp: At global scope:
C:\arduino-0019\libraries\String\WString.cpp:191: error: no 'const String& String::append(char)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:196: error: no 'const String& String::append(char*)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:201: error: no 'const String& String::append(const String&)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:206: error: no 'const String& String::append(int, int)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:217: error: no 'const String& String::append(long int, int)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:226: error: no 'const String& String::append(int)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:234: error: no 'const String& String::append(long int)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:323: error: prototype for 'char String::charAt(int)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:57: error: candidate is: char String::charAt(unsigned int) const
C:\arduino-0019\libraries\String\WString.cpp:339: error: prototype for 'void String::setCharAt(int, char)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:71: error: candidate is: void String::setCharAt(unsigned int, char)
C:\arduino-0019\libraries\String\WString.cpp:355: error: prototype for 'boolean String::equals(char*)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:60: error: candidate is: unsigned char String::equals(const String&) const
C:\arduino-0019\libraries\String\WString.cpp:366: error: prototype for 'boolean String::equals(const String&)' does not match any in class 'String'
C:\arduino-0019\hardware\arduino\cores\arduino/WString.h:60: error: candidate is: unsigned char String::equals(const String&) const
C:\arduino-0019\libraries\String\WString.cpp:372: error: no 'boolean String::contains(char*)' member function declared in class 'String'
C:\arduino-0019\libraries\String\WString.cpp:380: error: prototype for 'byte* String::getBytes()' does not match any in class 'String'
C:\arduino-0019\hardware\................
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ya salio la 019 woow, voy a tener q actualizar yo tengo la 018.

el error q te da con la 018 es algo en la librería ethernet, la modificaste ?? o es la original, trata de bajártela nuevamente, sino me avisas y te subo la mía.

te dejo una cap de mi código compilado.

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mira subí el código en pde y las librerías necesarias a mediafire, no se cuanto tiempo estará activo el link así q bájalas rápido  ;D

http://www.mediafire.com/file/ppyu04gj1y7d02c/Arduino.rar
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues algo debí tocar en la librería de ethernet porque la he borrado y la he vuelto a meter y ahora por fin me compila con la 018, antes lo hice también pero en vez de borrarla entera conbiné archivos y por eso persistían los errores.

Gracias por los archivos, he podido confirmar que tienes los mismos que yo smiley-wink , por cierto, el pde creo que no estaba en el rar.

Unas cosillas mas, podrías subir, si puedes, un pantallazo de como se ve en el navegador tu código? tengo curiosidad, ya que como no tengo esa shield no puedo probarlo  ;D

Cuántos botones se podrían llegar a poner?
Has probado a poner varias páginas enlazadas entre si o enlazar a otra ip?

Saludos
« Last Edit: September 14, 2010, 05:11:08 pm by 111---111 » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

DRicote en este momento no tengo la shield porq se me quemo  :-[ pero te comento lo probé con 5 botones y funcionaba (tardaba 1 segundo mas en cargar q con 4 botones). te dejo una captura de la web. pero ahora me pase a otra forma de hacerlo con un servidor con php.

esta es la captura de como quedaría la web en arduino(la q deje el código en este post).



si quieres ver la nueva pagina web es esta:

http://www.domotica23.260mb.com
Usuario: user
Password: pass

te aclaro q todavía esta en construcción y es solo una demo, asi que puedes modificarle lo que quieras :smiley
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buscando por internet he encontrado varias librecerías modificadas para funcionar con la tarjeta basada en el enc28j60.
En algunas de ellas la programación es similar a la tarjeta standar.
Lo malo es que siempre hay alguna instrucción no compatible entre unas librerías y otras y los ejemplos que funcionan con una librería hay que depurarlos para que funcionen con otra y en este punto me pierdo.
El problema es que la mayoría modifica la librería y se sigue llamando "etherShield" por lo que no puedes tenerlas simultáneamente en la ruta de búsqueda.
Por ejemplo en OpenEnergyMonitor hay ejemplos.


Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Para Maverik:

Yo he notado que el chip de la ethernet se pone muy caliente también, incluso tuve que ponerle un miniradiador para que disipara algo con sólo 6 botones, en cuanto que le pides algo de mas se enciende ;D

Está muy chulo como se ve en web, supongo que las imágenes son enlaces exteriores, en el móvil se tiene que ver de lujo.

Por cierto, como has hecho para controlar las salidas de arduino a través de php con un servidor externo, yo empecé con la shield de ethernet por no tener un ordenador encendido las 24h, pero si no da de sí tendré que buscar otras formas como tu, aunque sea un ordenador las 24h o un servidor externo.

Por cierto, he intentado entrar en el servidor que me dices pero me sale una página de error. :-?



Para pacojarcia:

No conocía la página que comentas, le he hechado un vistado pero no he logrado ver los ejemplos, de todas maneras, algo se debería poder hacer con esa shield ya que he llegado a ver sevidores de voIP que utilizan el enc28j60, no se en que web lo ví; una o unas páginas siempre y cuando no supere la memoria del arduino no debería ser problema para este chip, pero está decidido a darnos problemas.


Saludos
« Last Edit: September 17, 2010, 03:38:58 pm by 111---111 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esharle un Ojillo a esto:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284455681
« Last Edit: September 19, 2010, 11:57:17 am by venomio » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Y ahi creo que esta la madre del cordero... Resulta mucho mas trabajoso, sobre todo para la internet shield, que te devuelva la interface toda pintadita para que tu pulses... es mas facil dejarlo programado para que sepa lo que tiene que hacer y que la interface te la hagas tu en otro dispositivo. No tiene por que ser tan trabajoso. Le pasas por get lo que necesitas.

por ejemplo si lo quisieras en el movil pues en vez de currarte un programa como el nota este te guardasunos cuantos enlaces como favoritos en carpetas.

Carpeta "luz de la entrada" contiene 2 Bookmarks
uno ke sea http://ip_arduino?dispositivo=luz_entrada&accion=on
y otro ke sea http://ip_arduino?dispositivo=luz_entrada&accion=off

de manera que tu ves
LUZ ENTRADA
 - ENCENDER
 - APGAR

Y listo.no?
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues la verdad, que de esta manera se puede hacer una interface mas bonita y currada y no se saturaría la shield.

Se puede probar a ver.
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Adjunco codigo Dricote modificado para que funcionen los 6 botones
¿alquien me dice como pasar también valores analógicos del arduino a la página web y viceversa.
codigo 1/2
Code:
#include "etherShield.h"

static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t myip[4] = {192,168,2,205};
static char baseurl[]="http://192.168.2.205/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)

// Relay status. Start Off.
byte on_off1;
byte on_off2;
byte on_off3;
byte on_off4;
byte on_off5;
byte on_off6;

#define BUFFER_SIZE 1500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off1, byte on_off2, byte on_off3, byte on_off4, byte on_off5, byte on_off6);
int8_t analyse_cmd(char *str);

// 6 relays connected to output
#define SW1  2
#define SW2  3
#define SW3  4
#define SW4  5
#define SW5  6
#define SW6  7

void setup(){
Serial.begin(9600); //PACO para depurar el programa
  /*initialize enc28j60*/
   es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2);
   delay(10);
        es.ES_enc28j60PhyWrite(PHLCON,0x880);
      delay(250);
      es.ES_enc28j60PhyWrite(PHLCON,0x990);
      delay(250);
      es.ES_enc28j60PhyWrite(PHLCON,0x880);
      delay(250);
      es.ES_enc28j60PhyWrite(PHLCON,0x990);
      delay(250);
        delay(100);
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,mywwwport);
  // Init outputs
       pinMode(SW1, OUTPUT);
       digitalWrite(SW1, LOW);  // switch off LED
       pinMode(SW2, OUTPUT);
       digitalWrite(SW2, LOW);  // switch off LED
        pinMode(SW3, OUTPUT);
       digitalWrite(SW3, LOW);  // switch off LED
        pinMode(SW4, OUTPUT);
       digitalWrite(SW4, LOW);  // switch off LED
        pinMode(SW5, OUTPUT);
       digitalWrite(SW5, LOW);  // switch off LED
        pinMode(SW6, OUTPUT);
       digitalWrite(SW6, LOW);  // switch off LED
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

// Ethernet Mode
  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

  if(plen!=0){  /*plen will ne unequal to zero if there is a valid packet (without crc error) */
              // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
            if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
              es.ES_make_arp_answer_from_request(buf);
              return;    }
            // check if ip packets are for us:
            if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){return;}
            if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
                    es.ES_make_echo_reply_from_request(buf,plen);
                    return;    }
            
            // tcp port www start, compare only the lower byte
      if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
             if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
                     es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
                     return;}
             if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
                    es.ES_init_len_info(buf); // init some data structures
                    dat_p=es.ES_get_tcp_data_pointer();
                    if (dat_p==0){ // we can possibly have no data, just ack:
                            if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){es.ES_make_tcp_ack_from_any(buf);}
                            return;}
                    if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
                            // head, post and other methods for possible status codes see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
                            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
                            goto SENDTCP;}
                    // If "get /" without parameters
                       if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                            plen=print_webpage(buf, on_off1, on_off2, on_off3, on_off4, on_off5, on_off6);
                            goto SENDTCP;}
                    cmd=analyse_cmd((char *)&(buf[dat_p+5]));
                    
                    // Process commands
                    switch (cmd) {
                    case 'A':      //PACO: cambio los números por letras
                            on_off1=1;
                              digitalWrite(SW1, HIGH);  // switch on LED1
                            break;
                    case 'B':
                            on_off1=0;
                                 digitalWrite(SW1, LOW);  // switch off LED1
                            break;
                    case 'C':
                            on_off2=1;
                              digitalWrite(SW2, HIGH);  // switch on LED2
                            break;
                    case 'D':
                            on_off2=0;
                              digitalWrite(SW2, LOW);  // switch off LED2
                            break;
                    case 'E':
                            on_off3=1;
                              digitalWrite(SW3, HIGH);  // switch on LED3
                            break;
                    case 'F':
                            on_off3=0;
                              digitalWrite(SW3, LOW);  // switch off LED3
                            break;
                    case 'G':
                            on_off4=1;
                              digitalWrite(SW4, HIGH);  // switch on LED4
                            break;
                    case 'H':
                            on_off4=0;
                              digitalWrite(SW4, LOW);  // switch off LED4
                            break;
                    case 'I':
                            on_off5=1;
                              digitalWrite(SW5, HIGH);  // switch on LED5
                            break;
                    case 'J':
                            on_off5=0;
                              digitalWrite(SW5, LOW);  // switch off LED5
                            break;
                    case 'K':
                            on_off6=1;
                              digitalWrite(SW6, HIGH);  // switch on LED6
                            break;
                    case 'L':
                            on_off6=0;
                              digitalWrite(SW6, LOW);  // switch off LED6
                            break;                
                        }
                    plen=print_webpage(buf, on_off1, on_off2, on_off3, on_off4, on_off5, on_off6);
                    
          SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
                    es.ES_make_tcp_ack_with_data(buf,plen); // send data      
    } } } }
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

codigo 2/2
Code:
  // The returned value is stored in the global var strbuf
    uint8_t find_key_val(char *str,char *key)
    {
            uint8_t found=0;
            uint8_t i=0;
            char *kp;
            kp=key;
            while(*str &&  *str!=' ' && found==0){
                    if (*str == *kp){
                            kp++;
                            if (*kp == '\0'){
                                    str++;
                                    kp=key;
                                    if (*str == '='){ found=1;}
                            }
                    }else{kp=key;}
                    str++;
            }
            if (found==1){
                    // copy the value to a buffer and terminate it with '\0'
                    while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                            strbuf[i]=*str;
                            i++;
                            str++;}
                    strbuf[i]='\0';
            }
            return(found);
}


int8_t analyse_cmd(char *str)
{      int8_t r=-1;
         if (find_key_val(str,"cmd")){
                if (*strbuf < 0x4f && *strbuf > 0x40){   //PACO antes era:   if (*strbuf < 0x3a && *strbuf > 0x2f) ahora permito de la 'A' a la 'N'
                        // is a ASCII number, return it
                        r=*strbuf;               // PACO antes era:   r=(*strbuf-0x30);  ahora esto 40 A->0 ; B -> 1 ; ....
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off1, byte on_off2, byte on_off3, byte on_off4, byte on_off5, byte on_off6)
{       int i=0;
        uint16_t plen;
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<FONT FACE=\"arial\"><center><p><A HREF=\"/\"><b>SERVIDOR DOMOTICO</b></A></p>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<table bgcolor=\"#f7f7f7\"><tr><td align=center>"));
 switch (on_off1) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 1: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=B>")); // B apaga; A enciende
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 1: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=A>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td><td align=center>"));
 switch (on_off2) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 2: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=D>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 2: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=C>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td></tr><tr><td align=center>"));
 switch (on_off3) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 3: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=F>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 3: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=E>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td><td align=center>"));
 switch (on_off4) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 4: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=H>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 4: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=G>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td></tr><tr><td align=center>"));
 switch (on_off5) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 5: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=J>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 5: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=I>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td><td align=center>"));
 switch (on_off6) {
          case 1:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 6: <font color=\"#00FF00\">On</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=L>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
                break;
          case 0:
               plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Out 6: <font color=\"#CC0000\">Off</font><br>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<form METHOD=get action=\""));
              plen=es.ES_fill_tcp_data(buf,plen,baseurl);
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=K>"));
              plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
                break;
          }
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</td></tr></table></center><hr>Ethernet Shield Arduino 1.0"));

        return(plen);
}
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muy acertado si señor, curioso el cambio a las letras y funcionando, a demás muy bien y con 1500 de buffer.

Lo he estado probando y va de lujo, pero en cuanto que le he metido el 7º botón (admitiendo hasta "N") me ha dicho que nanai ;D, ni subiendo el buffer... smiley-sad

Se podrían conseguir los 7 u 8 botones?

Sobre lo que comentas de los valores analógicos, si lo que quieres es visualizar por ejemplo temperatura en la web, hay un ejemplo que se puede sacar algo en la librería de la ethershield, si me equivoco creo que yo no te podría responder sobre ello... :-[
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

para pasar más letras cambia por ejemplo:
if (*strbuf < 0x4f && *strbuf > 0x40){  
a esto:
if (*strbuf < 0x58 && *strbuf > 0x40){
con esto tienes hasta la "V")
¿hasta cuanto puedes crecer el buffer? ¿por qué es tan crítico?
Logged

Pages: 1 [2] 3 4   Go Up
Jump to: