Ethernet-Shield LED SERVER (4 / 5 steg)
Steg 4: Programmet
Arduino skiss är baserad på det webserver.pde exemplet med några ändringar. En kopia av min skiss är inlägget ovan för enkel nedladdning.Jag måste använda några trick för att ladda en webbsida med mer information. HTML-koden lagras i programminnet, så har vi tillräckligt med RAM för andra saker. Frågor om koden fråga bara.
Tips: efter ladda ner filen, döp om den från tmp till .ino om det behövs
Här är koden:
#include < Ethernet.h >
#include < SPI.h >
#include < avr/pgmspace.h >
prog_char string_0 [PROGMEM] = "< html >< kropp >< h2 > Controle de LED pela Internet < / h2 >< teckenstorlek = 4 >< bilda metod = få >";
prog_char string_1 [PROGMEM] = "< br >< ingång typ = lämna namn = b1 värde = Led1 >";
prog_char string_2 [PROGMEM] = "< br >< ingång typ = lämna namn = b2 värde = Led2 >";
prog_char string_3 [PROGMEM] = "< br >< ingång typ = lämna namn = b3 värde = Led3 >";
prog_char string_4 [PROGMEM] = "< br >< ingång typ = lämna namn = b4 värde = Led4 >";
prog_char string_5 [PROGMEM] = ""; "< br > Infoga ditt namn här:";
prog_char string_6 [PROGMEM] = ""; "< input namn = msg värde = no_name MAXLENGTH = 20 >";
prog_char string_7 [PROGMEM] = "< / form >< / body >< / html >";
prog_char string_8 [PROGMEM] = "Ligada (på)";
prog_char string_9 [PROGMEM] = "Desligada (OFF)";
prog_char string_10 [PROGMEM] = "< meta http-equiv = refresh content = 30 >"; om automatisk uppdatering
PROGMEM const char * string_table [] = / / ändra "string_table" namn som passar
{
string_0,
string_1,
string_2,
string_3,
string_4,
string_5,
string_6,
string_7,
string_8,
string_9,
string_10
};
char buffer [85]. se till att detta är tillräckligt stor för största strängen det måste hålla
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 1, 134};
byte gateway [] = {192, 168, 1, 1};
byte undernät [] = {255, 255, 255, 0};
InString sträng = String(35);
EthernetServer server(8246);
booleska led1 = false;
booleska led2 = false;
booleska led3 = false;
booleska led4 = false;
Sträng msg = "";
int tam = 0;
int st1 = 9, st2 = 9, st3 = 9, st4 = 9.
void setup()
{
Serial.BEGIN(9600);
Ethernet.BEGIN (mac, ip, gateway, undernät);
Server.BEGIN();
Serial.println ("Serial READY");
Serial.println ("Ethernet READY");
Serial.println ("Server READY");
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);
}
void loop()
{
EthernetClient klient = server.available();
int ledde = 0;
om (klient) {
en http-förfrågan avslutas med en tom rad
booleska current_line_is_blank = sant;
samtidigt (client.connected()) {
om (client.available()) {
char c = client.read();
om vi har fått till slutet av raden (fick en newline
karaktär) och raden är tom, http-begäran har avslutats,
så vi kan skicka ett svar
om (inString.length() < 35) {
inString.concat(c);
}
om (c == '\n' & & current_line_is_blank) {
IF(inString.indexOf("B1") > 0) {
IF(LED1==false) {
St1 = 8.
LED1 = sant;
digitalWrite(4,HIGH);
}
annat {
St1 = 9.
LED1 = false;
digitalWrite(4,LOW);
}
LED = 1;
}
IF(inString.indexOf("B2") > 0) {
IF(LED2==false) {
ST2 = 8.
LED2 = sant;
digitalWrite(5,HIGH);
}
annat {
ST2 = 9.
LED2 = false;
digitalWrite(5,LOW);
}
led = 2;
}
IF(inString.indexOf("B3") > 0) {
IF(LED3==false) {
ST3 = 8.
LED3 = sant;
digitalWrite(6,HIGH);
}
annat {
ST3 = 9.
LED3 = false;
digitalWrite(6,LOW);
}
LED = 3;
}
IF(inString.indexOf("B4") > 0) {
IF(LED4==false) {
ST4 = 8.
LED4 = sant;
digitalWrite(7,HIGH);
}
annat {
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);
}
*/
Skicka ett standard http-svarshuvud
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
strcpy_P (buffert, (char *) pgm_read_word (&(string_table[0]))); Nödvändiga avgjutningar och avrefereringen, kopiera bara.
client.println (buffert);
för (int jag = 1; jag < 8; i ++)
{
strcpy_P (buffert, (char *) pgm_read_word (&(string_table[i]))); Nödvändiga avgjutningar och avrefereringen, kopiera bara.
client.println (buffert);
Switch(i) {
fall 1: strcpy_P (buffert, (char *) pgm_read_word (&(string_table[st1]))); client.println (buffert); bryta;
fall 2: strcpy_P (buffert, (char *) pgm_read_word (&(string_table[st2]))); client.println (buffert); bryta;
fall 3: strcpy_P (buffert, (char *) pgm_read_word (&(string_table[st3]))); client.println (buffert); bryta;
fall 4: strcpy_P (buffert, (char *) pgm_read_word (&(string_table[st4]))); client.println (buffert); bryta;
}
Delay(30);
}
IF(digitalRead(8)==High) {
client.println ("< br > Botao 1, ON");
} annat {
client.println ("< br > Botao 1, OFF");
}
IF(digitalRead(9)==High) {
client.println ("< br > Botao 2, ON");
} annat {
client.println ("< br > Botao 2, OFF");
}
strcpy_P (buffert, (char *) pgm_read_word (&(string_table[10]))); client.println (buffert);
bryta;
}
om (c == "\n") {
Vi startar en ny rad
current_line_is_blank = sant;
} else om (c! = '\r') {
Vi har fått en karaktär på den aktuella raden
current_line_is_blank = false;
}
}
}
de web webbläsare möjlighet att ta emot data
Delay(1);
inString = "";
client.stop();
}
}