Go Down

Topic: Ayuda módulo ethernet Shield verify[solucionado y funcionando] (Read 2662 times) previous topic - next topic

secu

Hola amigos,

El motivo de mi mensaje es por lo siguiente:

He adquirido un módulo arduino uno con un shield de Ethernet, tengo algo de experiencia en microcontroladores, pero los módulos arduinos son nuevos para mí. El problema es el siguiente, he probado algún programilla como encender un led y apagarlo con el puerto serie y me ha funcionado a la primera, pero luego estoy intentando hacer lo mismo pero a través del módulo shield y me estoy volviendo loco. Resulta que tengo el siguiente código:

-----------------------------------
#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;

////////////////////////////////////////////////////////////////////////
//CONFIGURE
////////////////////////////////////////////////////////////////////////
 byte ip[] = { 192, 168, 0, 199 };   //ip address to assign the arduino
 byte gateway[] = { 192, 168, 0, 1 }; //ip address of the gatewa or router

 //Rarly need to change this
 byte subnet[] = { 255, 255, 255, 0 };

 // if need to change the MAC address (Very Rare)
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

 Server server = Server(80); //port 80
////////////////////////////////////////////////////////////////////////

void setup(){
 //Pins 10,11,12 & 13 are used by the ethernet shield

 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);

 Ethernet.begin(mac, ip, gateway, subnet);
 server.begin();
}

void loop(){

 // listen for incoming clients, and process qequest.
 checkForClient();

}

void checkForClient(){

 Client client = server.available();

 if (client) {

   // an http request ends with a blank line
   boolean currentLineIsBlank = true;
   boolean sentHeader = false;

   while (client.connected()) {
     if (client.available()) {

       if(!sentHeader){
         // send a standard http response header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         sentHeader = true;
       }

       char c = client.read();

       if(reading && c == ' ') reading = false;
       if(c == '?') reading = true; //found the ?, begin reading the info

       if(reading){
         Serial.print(c);

          switch (c) {
           case '2':
             //add code here to trigger on 2
             triggerPin(2, client);
             break;
           case '3':
           //add code here to trigger on 3
             triggerPin(3, client);
             break;
           case '4':
           //add code here to trigger on 4
             triggerPin(4, client);
             break;
           case '5':
           //add code here to trigger on 5
             triggerPin(5, client);
             break;
           case '6':
           //add code here to trigger on 6
             triggerPin(6, client);
             break;
           case '7':
           //add code here to trigger on 7
             triggerPin(7, client);
             break;
           case '8':
           //add code here to trigger on 8
             triggerPin(8, client);
             break;
           case '9':
           //add code here to trigger on 9
             triggerPin(9, client);
             break;
         }

       }

       if (c == '\n' && currentLineIsBlank)  break;

       if (c == '\n') {
         currentLineIsBlank = true;
       }else if (c != '\r') {
         currentLineIsBlank = false;
       }

     }
   }

   delay(1); // give the web browser time to receive the data
   client.stop(); // close the connection:

 }

}

void triggerPin(int pin, Client client){
//blink a pin - Client needed just for HTML output purposes.  
 client.print("Turning on pin ");
 client.println(pin);
 client.print("<br>");

 digitalWrite(pin, HIGH);
 delay(25);
 digitalWrite(pin, LOW);
 delay(25);
}

---------------------------------Pues bien cuando le doy a verificar (Verify) me sale el siguiente error, y el problema no es solo con éste sino con cualquier ejemplo que cargo de la red, excepto los que vienen de ejemplo con el programa arduino 1.0.

error:
sketch_dec04b:1: error: cannot declare parameter 'client' to be of abstract type 'Client'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:7: note:   because the following virtual functions are pure within 'Client':
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:12: note:    virtual size_t Client::write(uint8_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:13: note:    virtual size_t Client::write(const uint8_t*, size_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:14: note:    virtual int Client::available()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:15: note:    virtual int Client::read()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:17: note:    virtual int Client::peek()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:18: note:    virtual void Client::flush()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:10: note:    virtual int Client::connect(IPAddress, uint16_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:11: note:    virtual int Client::connect(const char*, uint16_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:16: note:    virtual int Client::read(uint8_t*, size_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:19: note:    virtual void Client::stop()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:20: note:    virtual uint8_t Client::connected()
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:21: note:    virtual Client::operator bool()
sketch_dec04b:16: error: cannot allocate an object of abstract type 'Server'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Server.h:4: note:   because the following virtual functions are pure within 'Server':
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: note:    virtual size_t Print::write(uint8_t)
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Server.h:6: note:    virtual void Server::begin()
sketch_dec04b:16: error: cannot declare variable 'server' to be of abstract type 'Server'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Server.h:4: note:   since type 'Server' has pure virtual functions
sketch_dec04b.cpp: In function 'void checkForClient()':
sketch_dec04b:44: error: 'class Server' has no member named 'available'
sketch_dec04b:44: error: cannot declare variable 'client' to be of abstract type 'Client'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:7: note:   since type 'Client' has pure virtual functions
sketch_dec04b:74: error: cannot allocate an object of abstract type 'Client'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:7: note:   since type 'Client' has pure virtual functions
sketch_dec04b:78: error: cannot allocate an object of abstract type 'Client'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:7: note:   since type 'Client' has pure virtual functions
sketch_dec04b:82: error: cannot allocate an object of abstract type 'Client'
/Users/secu/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Client.h:7: note:   since type 'Client' has pure virtual functions
sketch_dec04b:86: error: cannot allocate an object of abstract type 'Client'
(....) da mas errores...

Por lo que estoy ahí estancado, alguien me podría decir que puede ser??? cargo mal las librerias?? hay error en el código??, estoy desesperado porque luego le cargo un ejemplo que viene con el programa con el webserver y no me da error... =(

Muchas gracias de antemano...

chiva

Revisa esta línea, porque no le encuentro mucho sentido:

Code: [Select]
Client client = server.available();
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

secu

Muchas gracias por tu atención, puede ser que no esté correcta, pero me pasa con cualquier código que le meta que lleve las librerias ETHERNET y SPI, menos los ejemplos que vienen con el App de arduino uno. Puede ser que no cargué bien las librerias???

Un saludo.

chiva

Si estás usando la v1 del Arduino IDE, la API de ethernet cambia completamente, por lo que son incompatibles los sketches pre-1.0 con los v1.0
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

karagos

una confirmacion tonta el chip de la shield es el w5001?

secu

Gracias de nuevo, me imaginaba que podria ser algo de eso, por lo que cambiare de version. Lo que quiero es interactuar con el iphone, con un programilla que desarrollado para iOS5 y poder asi para empezar atacar a una o dos salidas digitales, para abrir o cerrar puertas o motores, no se lo que se me ocurra. Luego despues seguir con analogicas, existe una red que se llama paraimpu que te genera los skecht automaticamente.

Saludos.

secu


una confirmacion tonta el chip de la shield es el w5001?


No te lo puedo decir ahora, ya que estoy fuera de casa, pero la placa shield me llego el jueves, pero el problema por ahora no es de hardware, es de software, ya que el error me lo da al verificar, no al cargar el programa en el chip arduino UNO. Lo que si que te puedo decir es que mi placa arduino es la UNO en version SMD, una pasada.

Gracias

flico

Con el IDE de arduino v22 compila bien, el fallo es con la version 1.0. Voy a mirarlo.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

flico

#8
Dec 04, 2011, 06:36 pm Last Edit: Dec 04, 2011, 07:03 pm by flico Reason: 1
Code: [Select]

#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;

////////////////////////////////////////////////////////////////////////
//CONFIGURE
////////////////////////////////////////////////////////////////////////
IPAddress ip(192,168,1,20);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255, 255, 255, 0);

 
 // if need to change the MAC address (Very Rare)
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


 EthernetServer server(80); //port 80
////////////////////////////////////////////////////////////////////////

void setup(){
 //Pins 10,11,12 & 13 are used by the ethernet shield

 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);

 Ethernet.begin(mac, ip);
 server.begin();
}

void loop(){

 // listen for incoming clients, and process qequest.
 checkForClient();

}



void checkForClient(){

 EthernetClient client = server.available();

 if (client) {

   // an http request ends with a blank line
   boolean currentLineIsBlank = true;
   boolean sentHeader = false;

   while (client.connected()) {
     if (client.available()) {

       if(!sentHeader){
         // send a standard http response header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         sentHeader = true;
       }

       char c = client.read();

       if(reading && c == ' ') reading = false;
       if(c == '?') reading = true; //found the ?, begin reading the info

       if(reading){
         Serial.print(c);

          switch (c) {
           case '2':
             //add code here to trigger on 2
            triggerPin(2);
             break;
           case '3':
           //add code here to trigger on 3
           triggerPin(3);
             break;
           case '4':
           //add code here to trigger on 4
           triggerPin(4);
             break;
           case '5':
           //add code here to trigger on 5
           triggerPin(5);
             break;
           case '6':
           //add code here to trigger on 6
           triggerPin(6);
             break;
           case '7':
           //add code here to trigger on 7
          triggerPin(7);
             break;
           case '8':
           //add code here to trigger on 8
          triggerPin(8);
             break;
           case '9':
           //add code here to trigger on 9
          triggerPin(9);
             break;
         }

       }

       if (c == '\n' && currentLineIsBlank)  break;

       if (c == '\n') {
         currentLineIsBlank = true;
       }else if (c != '\r') {
         currentLineIsBlank = false;
       }

     }
   }

   delay(1); // give the web browser time to receive the data
   client.stop(); // close the connection:

 }

}


void triggerPin(int pin){
//blink a pin - Client needed just for HTML output purposes.  
//  client.print("Turning on pin ");
// client.println(pin);
// client.print("<br>");

 digitalWrite(pin, HIGH);
 delay(25);
 digitalWrite(pin, LOW);
 delay(25);
}


No se porque al poner esto

Code: [Select]

client.print("Turning on pin ");
client.println(pin);
client.print("<br>");


no compila
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

flico

Como estas lineas están en otra función que no es checkForClient() no puede ir en la vida.

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

secu

Bueno chicos, ya funciona correctamente, al final por si os pasa a alguno, daba error al compilar porque estaba utilizando la v1. Lo he compilado con la 0022 y ha corrido perfectamente.

El código funciona a la perfección, y ahora ya puedo modificarlo como quiera. Os cuento, mi idea es conectarlo a una aplicación nativa de iphone (desarrollada por mí) que al pulsar uno de los botones active las salidas que yo le ordene, y esto ya me funciona. Prepararé un artículo y lo publicaré cuando lo tenga listo. Acostumbrado a trabajar con PIC hace años, el Arduino es coser y cantar, qué gusto dá...

Gracias a todos.!!

flico


Con el IDE de arduino v22 compila bien, el fallo es con la version 1.0. Voy a mirarlo.


Porque sera que hecho de falta en tu post un GRACIAS, hay que ver ....
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

chiva


Si estás usando la v1 del Arduino IDE, la API de ethernet cambia completamente, por lo que son incompatibles los sketches pre-1.0 con los v1.0

Oye! Que yo lo dije primero XD
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

secu


Con el IDE de arduino v22 compila bien, el fallo es con la version 1.0. Voy a mirarlo.


Muchas Gracias, perdona por no haberme dado cuenta antes... :~

flico

Quote
Oye! Que yo lo dije primero


Pues tienes razon @chiva
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Go Up