Bir önceki çalışmamızda oluşturduğumuz web server üzerine arduino analog pinlerinin değerlerini yazmıştık. Yani sadece sayfa üzerine veri yazdırdık.
Bu çalışmamızda hem sayfaya veri yazdıracağız hemde sayfadaki komuta göre arduino üzerine takdığımız ledi kontrol edeceğiz.
Aşağıdaki kod üzerinde gerekli açıklamalar mevcut. Bu linkten çalışma videosunu izleyebilirsiniz.
Çalışma kaynak kodu:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177); // yerel ağ bağlantısına göre değiştirilmesi gereken ip adresi
EthernetServer server(80);
String HTTP_req;
boolean led_durum = 0; // ledin ON yada OFF olduğunu tutan değişken
int led=8; // ledin bağlanacağı arduino pini
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void loop()
{
EthernetClient net_alc = server.available();
if (net_alc) {
boolean satir_kontrol = true;
while (net_alc.connected()) {
if (net_alc.available()) {
char c = net_alc.read();
HTTP_req += c;
if (c == '\n' && satir_kontrol) {
// Alttaki satrlar HTML programlama ile ilgilidir.
// HTML kaynak kodlarına bakmanızda fayda var.
net_alc.println("HTTP/1.1 200 OK");
net_alc.println("Content-Type: text/html");
net_alc.println("Connection: close");
net_alc.println();
net_alc.println("<!DOCTYPE html>");
net_alc.println("<html>");
net_alc.println("<head>");
net_alc.println("<title>Arduino Internet Led Kontrol</title>");
net_alc.println("</head>");
net_alc.println("<body>");
net_alc.println("<h1>ADUINO ILE INTERNET UZERINDEN LED YAKIP SONDURME</h1>");
net_alc.println("<p>Ledi acip kapatmak icin kutucuga tiklayiniz.</p>");
net_alc.println("<form method=\"get\">");
LedKontrol(net_alc);
net_alc.println("<p>Blogu ziyaret ediniz:</p>");
net_alc.println("<div style=\"font-size:25px;\">golmuhendis.blogspot.com.tr</div>");
net_alc.println("</form>");
net_alc.println("</body>");
net_alc.println("</html>");
Serial.print(HTTP_req);
HTTP_req = "";
break;
}
if (c == '\n') {
satir_kontrol = true;
}
else if (c != '\r') {
satir_kontrol = false;
}
}
}
delay(1);
net_alc.stop();
}
}
void LedKontrol(EthernetClient deger)
{
if (HTTP_req.indexOf("LED=1") > -1) {
if (led_durum) {
led_durum = 0;
}
else {
led_durum = 1;
}
}
if (led_durum) {
digitalWrite(led, HIGH);
deger.println("<input type=\"radio\" name=\"LED\" value=\"1\" \
onclick=\"submit();\" checked>LED");
}
else {
digitalWrite(led, LOW);
deger.println("<input type=\"radio\" name=\"LED\" value=\"1\" \
onclick=\"submit();\">LED");
}
}