Pages: [1] 2   Go Down
Author Topic: Ayuda módulo ethernet Shield verify[solucionado y funcionando]  (Read 2212 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Muchas gracias de antemano...
« Last Edit: December 05, 2011, 04:18:23 am by secu » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
Client client = server.available();
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#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:
client.print("Turning on pin ");
 client.println(pin);
 client.print("<br>");

no compila
« Last Edit: December 04, 2011, 01:03:13 pm by flico » Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Trabajando en ...

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

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

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Trabajando en ...

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

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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... smiley-confuse
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Oye! Que yo lo dije primero

Pues tienes razon @chiva
Logged

Trabajando en ...

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

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

Pages: [1] 2   Go Up
Jump to: