Go Down

Topic: probando ethernet (Read 2475 times) previous topic - next topic

junco

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

JRodrigo

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

junco

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

JRodrigo

Yo con android no te puedo ayudar  :(

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 ;)

junco

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

junco



   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);
  }
}

jnmanuel

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?

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy