Órdenes a arduino desde html en SD (Resuelto)

Hola!!

Vengo con un proyecto en mente para controlar un sistema de riego con arduino desde hace algún tiempo. Más o menos tengo controlado el tema, pero me he quedado atascado en una cosa, como dar órdenes a arduino desde un html almacenado en una SD.

Estoy siguiendo este ejemplo de diymakers: http://diymakers.es/crear-servidor-web-con-arduino/

El problema es que ellos programan el html en el código de arduino. He intentando imitar lo que ellos hacen programando el html y almacenandolo en una SD, pero aunque el botón funciona a la hora de pulsarlo no envía ningúna información. No se si es que al estar el html almacenado en otra parte que no sea el código de arduino no responde igual, o hay que hacerlo de otra forma.

Os paso el código del html para ver si se os ocurre algo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
</head>
<body>
<button onclick="location.href='./?LED=ON\'">&nbsp;Abrir
</button>

</body></html>

El html está programado en Kompozer y he modificado la parte del botón con el código de diymakers. Es una página con un botón simplemente para probar. Cuando encuentre el fallo lo programaré todo.

Gracias por la ayuda!!!

Por cierto, la forma de hacerlo no tienen porque ser estrictamente como la de diymakers. Acepto cualquier sugerencia para hacer lo mismo aunque haya que programar de otra forma.

Saludos!!

simple lees la cadena almacenada en el SD y lo pasas a una variable que lo envias segun la peticion.

Explicate mejor. No me ha quedado claro.

google no muerde: con poner html arduino me sale esto:

http://www.ladyada.net/learn/arduino/ethfiles.html

Sinceramente, creo que ni te has leído mi post antes de responder. Si estoy siguiendo el proyecto de diymakers es porque he usado google bastante antes de preguntar aquí, de hecho la página web que enlazas también la conozco, pero el proyecto que ahí se expone es para navegar por directorios en la SD, no para mandar una órden con un botón.

Entiendo el código con el que se envía una órden desde html, pero me da la impresión de que para hacerlo desde un código almacenado en la SD hay que introducir alguna modificación o tener en cuenta algo que desconozco.

yo lo he leido pero tu no estudias.

el la pagina te da esta linea:

client.println("<button onClick=location.href='./?LED=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");

si lo reemplazas todas las codificaciones por lecturas a la sd:

String Lin = Read();
client.println(Lin);

depende de que libreria uses, pero la idea es esa, cargas en memoria la lectura de la sd, fraccionas tu codigo en varios archivo y puedes reemplazar parte del texto con tus datos luego de leerlo.
Ten en cuenta la capacidad de memoria

Mucho más sencillo:

Se introduce este script en la cabecera del html

<script>
        function nombrefunción()
       {
            var request = new XMLHttpRequest();
            request.open("GET", "valor a enviar", true);
            request.send(null);        
        }
    </script>

Y luego el botón se programa de la siguiente manera en el cuerpo del html:

<button onclick=nombrefunción() type=button>nombre que queramos darle al botón</button>

Al pinchar en el botón se activa el script correspondiente y envía el valor que hayamos programado.

Todo esto está sacado de un ejemplo de programación con Ajax. Pongo el enlace: http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-AJAX-web-server/

Lo bueno además es que no hace falta recargar la página para interactuar con ella, lo cuál ahorra tiempo y hace la comunicación entre cliente y servidor arduino más fluida.

Esto puede ser muy interesante. Lo doy por resuelto.

@gcp900 en el ejemplo que pones de startin electronics, tengo un problema... como puedo hacer para digamos establecer 2 modos: uno automatico y otro manual? me explico...actualmente tengo funcionando mi codigo que en base a cierta temperatura, humedad etc se activan desactivan unos reles..(eso seria de forma automatica) y luego tengo en otro codigo aparte, la forma en lo que lo hace con el lenguaje ajax, pudiendo yo encender y apagar dichos reles, como podria juntar todo sin que sea algo contradictorio? si lo junto se enciende/apaga los reles al segundo todo el rato obviamente, gracias

Lo que yo hago es establecer una comunicación entre un archivo html almacenado en una SD y el arduino. Lo que tu quieres hacer es activar un relé en función de unos valores de un termómetro o un accionamiento manual. Lo que yo haría sería declarar una variable booleana que controlara la apertura y cierre de los relés y establecer condicionales para modificar esa variable. Me explico, si el termómetro da cierta temperatura digo que la variable booleana (vamos a llamarla rele) es verdadera (rele=true), entonces pongo un condicional que abra el relé cuando la variable rele=true, y al contrario cuando rele=false. Haz que las órdenes que des de manera manual modifiquen también es variable, de este modo tanto el accionamiento automático como el manual estarán trabajando sobre la misma variable y serán complementarios.

Saludos!

@gcp900 puedes darnos un ejemplo del codigo para encender un led desde la web en la SD??