Pages: [1]   Go Down
Author Topic: probando ethernet  (Read 2078 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

perdonar algun codigo para encender y apagar un LED a traves de internet , en red local me funciona bien uno que te envian al instalar en android una aplicacion que se llama "DomoMaster" pero cuando lo quiero ejecutar en internet no pita , quiza no le doy tiempo al navegador , pero con el mismo sistema y la libreria "webServer" va como un tiro , gracias.- 
Logged

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tienes redireccionado el puerto en el router hacia la IP y el puerto del arduino?
Logged


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

Si  redirecciono al puerto 80 la ip de aurdino 192.168.0.110 y luego entro  desde el navegador en la que le asigna internet al router 14.34.56.158 :80 por ejemplo desde otra red,  y con el código webserver cargado va bien indicándome en la página web los valores de los  pines , el problema es cuando quiero hacerlo con el código de la aplicación domomaster de android  , el caso es que sí lo hago  en red local poniendo la ip local funciona bien. Por eso me gustaría un código similar para encender aunque sólo sea un led y luego ir ampliandolo con más funciones, gracias
Logged

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo con android no te puedo ayudar  smiley-sad

Pero si pusieras algún enlace de esa aplicación (domomaster) algo más información, puede que alguien que haya echo algo de android si que pueda smiley-wink
Logged


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

Bueno lo de android , ya sabes esta en el AppStore de Google y luego te mandan el código por correo , pero no necesito que sea de android me serviría controlar los led desde una web con HTML , pero estoy atascado , le cargo el código de webserver y me muestra el estado de los pines , todo Okl , pero como sería el código si quisiese encender un led gracias y perdona mi ignorancia
Logged

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



   He intentado usar este código pero da muchos errores y no lo he llegado a cargar




// unicarlos.dyndns.org:88  (ip de mi router que se actualiza automaticamente
// y funciona con la configuracion del router de abrir puerto e ip
// y se puedan encender y apagar leds (Pines digitales del 2 al 9).
// Pines 10,11,12 y 13 los usa para comunicarse con la ethernet

#include <SPI.h>
#include <WString.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // direccion MAC de tu Ethernet
byte ip[] = {192, 168, 10, 15};  // ip que le pones dentro de tu red como fija y configurada en tu router
Server server(88);  //  88 puerto por el accedemos al servidor. Normalmente seria la 80

int dig[] =  {2,3,4,5,6,7,8,9}; // pines digitales a usar. No uso 0 y 1 que son de transmisin serie
                                // Tampoco uso el 10,11,12 y 13 ya que los uso para la ethernet
int digTotal = 8;  // Numero de pines a usar
int vdig[] = {0,0,0,0,0,0,0,0}; // valores iniciales (Tantos como pines usemos)
int pin;
int nivel;
String cad = String(100);

void setup()
{
  Ethernet.begin(mac, ip); // inicio la Ethernet
  server.begin();          // inicio el servidor
  Serial.begin(9600);      // inicio el serial monitor
  for (int i=0; i < digTotal; i++)
  {
    pinMode(dig, OUTPUT);   // inicializo los pines digitales como salida
    digitalWrite(dig,vdig);  // los pongo a nivel bajo LOW=0
  }
}

void loop()
{
  cad = ""; // inicializo la cad donde almaceno los datos recibidos
  Client cliente = server.available();
  if (cliente)
  {
    while(cliente.connected())
    {
      if(cliente.available())
      {
        char c = cliente.read();
        cad = cad + c;
        Serial.print(c);

        if(c == '\n')
        {
          if (cad.lastIndexOf("dig") > -1) // si la variable cad contiene 'dig' hacer ...
          {
            pin = pinElegido(cad);
            int posicionPin;
            for (int i=0; i <digTotal; i++)
            {
              if (dig == pin)
              {
                posicionPin = i;
                break;
              }
            }
            nivel = nivelElegido(cad);
            vdig[posicionPin] = nivel;
 
            Serial.print(pin);  // comprobamos que el pin elegido es el correcto
            Serial.println(" pin.   --  ");
            Serial.print(nivel); // comprobamos su nivel 0=LOW y 1=HIGH
            Serial.println(" nivel ");
           
            digitalWrite(pin, nivel);  // activamos o desactivamos el pin elegido
           
          }  // ... hasta aqui 'dig'
         
          if (cad.lastIndexOf("apaga") > -1)  // si la variable cad contiene 'apaga' ejecuta
          {                                    // la funcion apagaTodos()
            apagaTodos();
          }
         
          if (cad.lastIndexOf("encender") > -1) // si cad contiene 'encender' ejecuta
          {                                     // la funcion enciendeTodos()
            enciendeTodos();
          }
          // Comienza la transmision de datos desde el servidor al cliente
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();

          for (int i=0; i < digTotal; i++)
          {
              cliente.print("Digital ");
              cliente.print(dig);
              cliente.print(" ");
   
              if (vdig==1)
              {
                cliente.println("<font color='green'>ON</font>");
                cliente.print("<form method=get><input type=hidden name=dig");
                cliente.print(dig);
                cliente.print(" value=0><input type=submit value=OFF></form>");
              }
              if (vdig==0)
              {
                cliente.println("<font color='grey'>OFF</font>");
               // cliente.println("<td>");
                cliente.print("<form method=get>");
                cliente.print("<input type=hidden name=dig");
                cliente.print(dig);
                cliente.print(" value=1>");
                cliente.print("<input type=submit value=ON>");
                cliente.print("</form>");           
              }
          }         
          cliente.print("<form method=get><input type=hidden name=apaga");
          cliente.println(" value=1><input type=submit value=APAGA_TODOS></form>");
               
          cliente.println("<form method=get><input type=hidden name=encender");
          cliente.println(" value=1><input type=submit value=ENCENDER_TODOS></form>");
                 
          cliente.stop();
        }
      }
    }
  }
}



//////////////  FUNCIONES /////////////////7
// Funcion: Extrae el pin del array cad (contiene la lectura de lo que el cliente devuelve)
int pinElegido(String cad)
{

    int pos_dig = cad.lastIndexOf("dig");
    int pos_igual = cad.lastIndexOf("=");
    String vpin1 = cad.charAt(pos_dig+3);
    String vpin2 = cad.charAt(pos_dig+4);
    if (vpin2 != '=')
    {
      vpin1 += vpin2;
    }
   
    int pinElegido = vpin1.toInt();
    return pinElegido;
}
// Funcion: Extrae en nivel de la cadena cad
int nivelElegido(String cad)
{
  int pos_igual =  cad.lastIndexOf("=");
  String v = cad.charAt(pos_igual+1);
  if (v == 0) return 0;
  if (v == 1) return 1;
}
// Funcion para apagar todos los leds al tiempo
void apagaTodos()
{
  for (int i=0; i < digTotal; i ++)
  {
    vdig = 0;
    digitalWrite(dig, vdig);
  }
}
// Funcion para encender todos los leds al tiempo
void enciendeTodos()
{
  for (int i=0; i < digTotal; i ++)
  {
    vdig = 1;
    digitalWrite(dig, vdig);
  }
}
Logged

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

hola, es el mismo que estoy intentando cargar yo, he resuelto casi todos los errores, pero me he atrancado en uno:

String vpin2 = cad.charAt(pos_dig+4);

me dice invalid conversion from char a constante char

es una pena dos lineas mas y acab y lo cargo, pero no encuentro la solucion, charAt, no me lo pone en naranja.
ayudita?
Logged

Pages: [1]   Go Up
Jump to: