Stap 4: Het programma
De arduino schets is gebaseerd op het voorbeeld van de webserver.pde met enkele wijzigingen. Een kopie van mijn schets is post hierboven voor makkelijk downloaden.Ik heb met sommige trucs te laden van een webpagina met meer informatie. De HTML-code wordt opgeslagen in het programmageheugen, dus hebben we genoeg RAM voor andere dingen. Vragen over de code vragen gewoon.
TIP: na het downloaden van het bestand, hernoem het van .tmp naar Ino indien nodig
Hier is de code:
#include < Ethernet.h >
#include < SPI.h >
#include < avr/pgmspace.h >
prog_char string_0 [PROGMEM] = "< html >< lichaam >< h2 > Controle de LED pela Internet < / h2 >< tekengrootte = 4 >< vormen van de methode GET = >";
prog_char string_1 [PROGMEM] = "< br >< input type = naam = waarde van b1 Led1 = >";
prog_char string_2 [PROGMEM] = "< br >< input type = naam = waarde van b2 Led2 = >";
prog_char string_3 [PROGMEM] = "< br >< input type = naam b3-waarde = Led3 = >";
prog_char string_4 [PROGMEM] = "< br >< input type = naam b4-waarde = Led4 = >";
prog_char string_5 [PROGMEM] = ""; "< br > Insert uw naam hier:";
prog_char string_6 [PROGMEM] = ""; "< input naam = waarde van de msg no_name MAXLENGTH = 20 = >";
prog_char string_7 [PROGMEM] = "< / form >< / body >< / 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 >"; voor automatisch vernieuwen
PROGMEM const char * [string_table] = / / wijzigen van de naam van de "string_table" om te passen
{
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]; Zorg ervoor dat dit is groot genoeg voor de grootste tekenreeks die het moet houden
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 1, 134};
byte gateway [] = {192, 168, 1, 1};
byte subnet [] = {255, 255, 255, 0};
InString koord = String(35);
EthernetServer server(8246);
Booleaanse led1 = false;
Booleaanse led2 = false;
Boole led3 = false;
Boole led4 = false;
Koord msg = "";
int tam = 0;
int st1 = 9, st2 = 9, st3 = 9, st4 = 9;
VOID Setup
{
Serial.begin(9600);
Ethernet.begin (mac, IP-gateway, subnet);
server.begin();
Serial.println ("seriële 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 client = server.available();
int geleid = 0;
Als (client) {}
een http-verzoek eindigt met een lege regel
Boole current_line_is_blank = waar;
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Als we aan het einde van de lijn hebben gekregen (ontvangen een newline
teken) en de regel is leeg, de http-aanvraag is beëindigd,
Zo kunnen wij een antwoord sturen
Als (inString.length() < 35) {}
inString.concat(c);
}
Als (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);
}
geleid = 1;
}
if(inString.indexOf("B2") > 0) {}
if(LED2==false) {}
ST2 = 8;
LED2 = true;
digitalWrite(5,HIGH);
}
else {}
ST2 = 9;
LED2 = false;
digitalWrite(5,LOW);
}
geleid = 2;
}
if(inString.indexOf("B3") > 0) {}
if(LED3==false) {}
ST3 = 8;
LED3 = true;
digitalWrite(6,HIGH);
}
else {}
ST3 = 9;
LED3 = false;
digitalWrite(6,LOW);
}
geleid = 3;
}
if(inString.indexOf("B4") > 0) {}
if(LED4==false) {}
ST4 = 8;
LED4 = true;
digitalWrite(7,HIGH);
}
else {}
ST4 = 9;
LED4 = false;
digitalWrite(7,LOW);
}
geleid = 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);
}
*/
verzenden van een standaard http-antwoordheader
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[0]))); Nodige afgietsels en dereferencing, kopiëren gewoon.
client.println (buffer);
for (int i = 1; ik < 8; i ++)
{
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[i]))); Nodige afgietsels en dereferencing, kopiëren gewoon.
client.println (buffer);
switch(i) {}
geval 1: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st1]))); client.println (buffer); breken;
geval 2: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st2]))); client.println (buffer); breken;
Case 3: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st3]))); client.println (buffer); breken;
geval 4: strcpy_P (buffer, (char *) pgm_read_word (&(string_table[st4]))); client.println (buffer); breken;
}
delay(30);
}
if(digitalRead(8)==High) {}
client.println ("< br > elkadrey 1, ON");
} else {}
client.println ("< br > elkadrey 1, OFF");
}
if(digitalRead(9)==High) {}
client.println ("< br > elkadrey 2, ON");
} else {}
client.println ("< br > elkadrey 2, OFF");
}
strcpy_P (buffer, (char *) pgm_read_word (&(string_table[10]))); client.println (buffer);
breken;
}
Als (c == '\n') {}
We beginnen een nieuwe regel
current_line_is_blank = true;
} else if (c! = '\r') {}
We hebben gekregen een teken op de huidige regel
current_line_is_blank = false;
}
}
}
de web browser tijd geven om te ontvangen van de gegevens
delay(1);
inString = "";
client.stop();
}
}