Paso 4: El programa
El sketch de arduino está basado en el ejemplo de webserver.pde con algunas modificaciones. Una copia de mi boceto es post anterior para su fácil descarga.Tengo que utilizar algunos trucos para cargar una página web con más información. El código HTML se almacena en la memoria del programa, por lo tanto, tenemos suficiente RAM para otras cosas. Pregunte cualquier duda sobre el código.
Consejo: después de descargar el archivo, cámbiele el nombre de .tmp a .ino si es necesario
Aquí está el código:
#include < Ethernet.h >
#include < SPI.h >
#include < avr/pgmspace.h >
prog_char string_0 [] PROGMEM = "< html >< cuerpo >< h2 > control de LED pela Internet < / h2 >< tamaño de la fuente = 4 >< método del formulario = GET >";
prog_char string_1 [] PROGMEM = "< br >< tipo de entrada = enviar nombre = valor b1 = Led1 >";
prog_char string_2 [] PROGMEM = "< br >< tipo de entrada = enviar nombre = valor b2 = Led2 >";
prog_char string_3 [] PROGMEM = "< br >< tipo de entrada = enviar nombre = valor de b3 = Led3 >";
prog_char string_4 [] PROGMEM = "< br >< tipo de entrada = enviar nombre = valor b4 = Led4 >";
prog_char string_5 [] PROGMEM = ""; "< br > Insertar aquí su nombre:";
prog_char string_6 [] PROGMEM = ""; "< nombre de entrada = valor msg = no_name MAXLENGTH = 20 >";
prog_char string_7 [] PROGMEM = "< / forma >< cuerpo / >< / html >";
prog_char string_8 [] PROGMEM = "Ligada (ON)";
prog_char string_9 [] PROGMEM = "Desligada (OFF)";
prog_char string_10 [] PROGMEM = "< meta http-equiv = refresh content = 30 >"; para la actualización automática
Const char PROGMEM * string_table [] = / / cambiar el nombre de "string_table" para adaptarse a
{
string_0,
string_1,
string_2,
string_3,
string_4,
string_5,
string_6,
string_7,
string_8,
string_9,
string_10
};
buffer de Char [85]; Asegúrese de que este es suficientemente grande para que la cadena más grande que debe contener el
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192 168 1, 134};
puerta de entrada de bytes [] = {192, 168, 1, 1};
subred de bytes [] = {255, 255, 255, 0};
InString de cadena = String(35);
Server(8246) de EthernetServer;
led1 boolean = false;
led2 boolean = false;
led3 boolean = false;
led4 boolean = false;
String msg = "";
int tam = 0;
int st1 = 9, st2 = 9, st3 = 9, st4 = 9;
void setup()
{
Serial.Begin(9600);
Ethernet.Begin (mac, ip, puerta de enlace, subred);
Server.Begin();
Serial.println ("Serial listo");
Serial.println ("Ethernet listo");
Serial.println ("servidor listo");
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);
}
void loop()
{
Cliente EthernetClient = server.available();
led int = 0;
Si {} (cliente)
una solicitud http termina con una línea en blanco
Boolean current_line_is_blank = true;
mientras (client.connected()) {}
Si (client.available()) {}
char c = client.read();
Si hemos llegado al final de la línea (recibió una nueva línea
carácter) y la línea está en blanco, ha terminado la solicitud http,
para que podamos enviarle una respuesta
Si (inString.length() < 35) {}
inString.concat(c);
}
Si (c == '\n' & & current_line_is_blank) {}
if(inString.IndexOf("B1") > 0) {}
{if(LED1==false)}
ST1 = 8;
LED1 = true;
digitalWrite(4,HIGH);
}
Else {}
ST1 = 9;
LED1 = false;
digitalWrite(4,LOW);
}
LED = 1;
}
if(inString.IndexOf("B2") > 0) {}
{if(LED2==false)}
ST2 = 8;
LED2 = true;
digitalWrite(5,HIGH);
}
Else {}
ST2 = 9;
LED2 = false;
digitalWrite(5,LOW);
}
LED = 2;
}
if(inString.IndexOf("B3") > 0) {}
{if(LED3==false)}
ST3 = 8;
LED3 = true;
digitalWrite(6,HIGH);
}
Else {}
ST3 = 9;
LED3 = false;
digitalWrite(6,LOW);
}
LED = 3;
}
if(inString.IndexOf("B4") > 0) {}
{if(LED4==false)}
ST4 = 8;
LED4 = true;
digitalWrite(7,HIGH);
}
Else {}
ST4 = 9;
LED4 = false;
digitalWrite(7,LOW);
}
LED = 4;
}
/*
if(inString.IndexOf("msg") > 0) {}
char charBuf1 [50];
char charBuf2 [50];
strcpy (msg,(char*) inString.substring (inString.indexOf ("g") +2,inString.indexOf ("H")));
Serial.Print ("msg:");
Serial.println(MSG);
}
*/
Enviar un encabezado de respuesta http estándar
Client.println ("HTTP/1.1 200 OK");
Client.println ("tipo de contenido: texto/html");
Client.println();
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[0]))); Modelos necesarios y la eliminación de referencias, sólo tienes que copiar.
Client.println (buffer);
para (int i = 1; i < 8; i ++)
{
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[i]))); Modelos necesarios y la eliminación de referencias, sólo tienes que copiar.
Client.println (buffer);
{Switch(i)}
caso 1: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st1]))); Client.println (buffer); rotura;
caso 2: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st2]))); Client.println (buffer); rotura;
caso 3: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st3]))); Client.println (buffer); rotura;
caso 4: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st4]))); Client.println (buffer); rotura;
}
Delay(30);
}
{if(digitalRead(8)==High)}
Client.println ("< br > 1 Botao, ON");
} else {}
Client.println ("< br > Botao 1, OFF");
}
{if(digitalRead(9)==High)}
Client.println ("< br > 2 Botao, ON");
} else {}
Client.println ("< br > 2 Botao, OFF");
}
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[10]))); Client.println (buffer);
rotura;
}
Si (c == '\n') {}
Estamos empezando una nueva línea
current_line_is_blank = true;
} else if (c! = '\r') {}
hemos conseguido un carácter en la línea actual
current_line_is_blank = false;
}
}
}
darle tiempo al navegador de web para recibir los datos
Delay(1);
inString = "";
Client.STOP();
}
}