Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #5 on: November 05, 2012, 08:32:30 am » |
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); } }
|