16 Aralık 2014 Salı

Arduino ile Bootloader İşlemi



Merhabalar, bu yazımızda atmel işlemcilerin arduino geliştirme kartı kullanarak nasıl boot edildiğini anlatmaya çalışacağım. Video desteği ile konunun net bir şekilde anlaşılmasını umut ediyorum.

Peki nedir bu bootloader işlemi ?  Boot işlemi tıpkı bilgisayarların biosu gibi düşünülebilir. İşlemcinin temel fonksiyonlarını yerine getirmesi için gereklidir. Yani boot edilmemiş bir işlemci ÇALIŞMAYACAKTIR. Dolayısıyla alınan ve boot edilmeden gönderilen tüm işlemcilere bu yöntem uygulanır. Arduino boot işlemi videoda detaylıca anlatılmaktadır. Pin bağlantıları alttaki resimlerde mevcuttur. 

Bir kere yapılması yeterlimidir ? Boot işlemini, işlemcinize bir kere yapmanız yeterlidir. Tabi bazı özel durumlar yada hata giderme durumları dışında. Çünkü boot kodunuz işlemcinin flash belleğine yüklenir ve silinmez. Flaşh belleğin daima 5492 byte lık alanı boot işlemi için işgal edilmiş olur. Hatırlayacağınız üzere atmega 328 flash kapasitesi 32 kb idi. 


Arduino Uno ile atmega 328 işlemcisini bootloader yapabilmek için gerekli pin bağlantıları

Arduino Uno ile Atmega 328 bootloader devre şeması


atmega 328 pin daigram

Arduino uno pin diagramı




11 Aralık 2014 Perşembe

C# Uygulamaları - C# Seri Port , C# Arduino

C# dili ile yapılmış 2 farklı uygulamanın kurulum linkleri aşağıda mevcuttur.
Bu programlardan ilki seri porttan verilerin okunmasını ve kaydedilmesini sağlamaktadır. Arduino ile yapacağınız projelerde faydalı olabilecektir.
İkinci proje ise seri porttan gönderilen sıcaklık değerinin ekranda bastırılmasını sağlamaktadır. Yani basit bir termometredir.

1- https://drive.google.com/folderview?id=0Byup25DcTDi1enJSM3lqV1VYcDQ&usp=sharing
2- https://drive.google.com/folderview?id=0Byup25DcTDi1NTRsUUJWVXdJckU&usp=sharing


c# seri port programı ile arduino haberleşmesi
1. program ekran görüntüsü


2. program ekran görüntüsü

C# dili ile yapılmış bazı çalışmalara ait videolara şu linklerden ulaşabilirsiniz:


2 Aralık 2014 Salı

5- C Uygulama 5 ( C programlama ile kelimedeki harf sayısı bulan, farklı harfleri bulan ... program )

Çalışma ekran görüntüsü:

c programlama ile kelimedeki harf sayısını bulma


Çalışma kaynak kodu:

4- C Uygulama 4 ( C kodu ile girilen sayıların max min ve modunu bulan program )

Çalışma ekran görüntüsü:

c max min mod bulma code


Çalışma kaynak kodu :

3- C Uygulama 3 ( C kodu ile şekil çizme programı )

Çalışma ekran görüntüsü:



Çalışma kodu:


#include<stdio.h>
#include<conio.h>//getch komutuyla ekranda tutmak için hata vermemesi için kullandim

int main(){

 int a,b,c,d,e,f,g;//degiskenleri tanimladim
 char z=0;
 
 while (z!='q'){//bu döngüyü q yani çýkýþ girilene kadar çýkmamasý için kullandým  
  fflush(stdin);//enter etkisini yok etmek yani program hata verdikten sonra hafýzayý sifýirlamak hatayýi bir kez verdirmek için kullandým
 
  printf("\n\n\t##########################################################\n");//ekranda gözüken seçim seçeneklerini burada yazdým
  printf("\t>>>>>>                                              <<<<<<\n");
  printf("\t>>>>>>      DRAWING MATHEMATICAL SIGNALS SHAPE      <<<<<<\n");
  printf("\t>>>>>>                                              <<<<<<\n");
  printf("\t>>>>>>      a : Draw a summation shape              <<<<<<\n");
  printf("\t>>>>>>      b : Draw a division shape               <<<<<<\n");
  printf("\t>>>>>>      c : Draw a multiplication shape         <<<<<<\n");
  printf("\t>>>>>>      q : Terminate the program               <<<<<<\n");
  printf("\t>>>>>>                                              <<<<<<\n");
  printf("\t##########################################################\n\n");

  printf("\tChoose one of them,please:\n");//burada seçilecek seçimi istedim ve aldýrdým
  scanf("%c",&z); 
  
  while((z=='a')||(z=='b')||(z=='c')){//seçim bu koþullar içinde olduðu sürece devamlýlýðý saðlamak için bunun sebebi a deðiþkenine rakam yerine karakter girince döngüyü saðlamak için
  
  if (z=='a'){//z karakteri a olunca toplama iþlemini seçtirmek için
   printf("\nEnter width of the summation shape(as an odd number):\n");//burada toplamýn boyutunu istiyor ve alýyor
   scanf("%d",&a);
   
   if (0==a%2){//girilen sayý çiftse hata vermemesi için koydum tek sayý girilmezse yanlýþ çýktý vermesin diye
    b=a/2;//integerýn yarýsýný alýp
    f=b-1;//integerin yarýsýndan 1 çýkardýk ki aþaðýdaki for döngüsü için o kadar boþluk býraksýn diye
    
    for (d=0;b>d;){//bu döngü de alttaki döngünün ayný integer deðeri kadar tekrarlanmasý için koydum
     for(c=0;f>c;){//bu döngü sayýnýn yarýsý kadar boþluk býraktýrýr ve sonuna  * koyar
      printf(" ");
      c=c+1;}
     printf("*\n");//boþluklardan sonra yýldýzý koyup yeni satýra geçer
     d=d+1;}
    
    for(e=0;a>e;){//artý iþaretinin orta kýsmýndaki uzun iþareti girilen deðer kadar girmesini saðladým
     printf("*");
     ++e;}
    printf("\n");//artýnýn orta kýsmý tamamlanýnca yeni satýra geçip üstteki döngünün aynýsýný oluþturmasýný saðladým
  
    for (d=1;b>d;){//bu döngü de alttaki döngünün ayný integer deðeri kadar tekrarlanmasý için koydum d nin üstte 3 for döngüsünden farklý deðil ama d=1 olmasýnýn sebebi orta kýsýmda 1 tane * kullanýlmýþ olmasý
     for(c=0;f>c;){//bu döngü sayýnýn yarýsý kadar boþluk býraktýrýr ve sonuna  * koyar
      printf(" ");
      c=c+1;}
     printf("*\n");//boþluklardan sonra yýldýzý koyup yeni satýra geçer
     d=d+1;}}
   else {//girilen sayý tekse toplam sembolünü ona göre yaptým
    e=a-1;//sayýnýn tek olmasý durumunda 1 çýkarark float olmasýný engellemek istedim geri kalan kýsým üstteki artý iþareti döngüsünün ayný daha net anlatmak için ayrý ayrý yazdým
    b=e/2;
    for (d=0;b>d;){
     for(c=0;b>c;){
      printf(" ");
      c=c+1;}
   
     printf("*\n");
     d=d+1;}
  
    for(e=0;a>e;){
     printf("*");
     ++e;}
  
    printf("\n");
  
    for (d=0;b>d;){
     for(c=0;b>c;){
      printf(" ");
      c=c+1;}
   
     printf("*\n");
     d=d+1;}}}
 
  if (z=='b'){//burada bölme sembolünü yaptým aþaðýda geniþliðini istiyor ve ona göre yerleþtiriyor üstteki ve alttaki yýldýzlarý
   printf("\nEnter width of the division shape(as an odd number):\n");
   scanf("%d",&a);
   printf("\n");

   if(0==a%2){//sayýnýn çift girilince hata vermemesi amacýyla koydum
    b=a/2;//sayý çiftse 2 ye böler ve o kadar boþluk verir ve yýldýz koyarak orta kýsýma geçer
    
    for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
     printf(" ");
     ++c;}
    printf("*\n");
    
    for(d=0;a>d;){//bölme iþleminin orta kýsmý yani burada girilen sayý kadar * iþareti koyuyor
     printf("*");
     ++d;}
    printf("\n");
    
    for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
     printf(" ");
     ++c;}
    printf("*\n");}

 else{//integer a tek olursa yerleþtirme iþleminde hata olmasýn diye 2. bir seçenek koydum
  e=a-1;//sayý tekse 1 çýkarýr ki float olmasýn
  b=e/2;
  for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
   printf(" ");
   ++c;}
  printf("*\n");
  
  for(d=0;a>d;){//bölme iþleminin orta kýsmý yani burada girilen sayý kadar * iþareti koyuyor
   printf("*");
   ++d;}
  printf("\n");
  
  for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
   printf(" ");
   ++c;}
  printf("*\n");}}
 
  if (z=='c'){//burada çarpma iþlemi için a yý istiyor ve ona göre çarpma iþaretini yazýyor
  
   printf("\nEnter width of the multiplication shape(as an odd number):\n");
   scanf("%d",&a);
   
   b=a;//a yý ve b yi ayrý ayrý kullanacaðýmdan çoðalttým da denilebilir
   e=a-1;//burada orta kýsým hariç bulunan deðerin yarýsý kadar V þeklinde * iþareti koyar
   e=e/2;//sayýnýn yarýsýný da burada alýyor
   for(d=0;e>d;){
    printf("*");//ilk baþta * koyar
    b=b-2;//burada saynýn her seferinde 2 azaltarak orta kýsýma gelecek boþluk sayýsýný bulurlar
    
    for(c=0;b>c;){//boþluk bu döngüde konulur
     printf(" ");
     ++c;}
    printf("*");// boþluk konulduktan sonra * iþareti koyarlar
    ++d;
    printf("\n");//yeni satýra geçerler
    
    for(f=0,g=((a-b)+1)/2;g>f;){//bu döngüde orta kýsma gelecek olan boþluk sayýsýný bulup tekse veya çiftse ona göre * iþareti koyuyor
     printf(" ");
     ++f;}}
   if (1==a%2){//çarpma iþleminin orta kýsýmýna eðer girilen deðer tekse tek yýldýz 
    printf("*\n");}
   
   else{//girilen deðer çiftse orta kýsma 2 tane yýldýz koyuyor ki kayma belli olmasýn yani sayý çift girerse hatayý gizlesin diye
    printf("**\n");
    
    for(f=0,g=((a-b)+1)/2;g>f;){//orta kýsýma gelecekboþluðu tekrar koyuyor ve alttaki döngüde X in kalan kýsmý olan ters V yi çiziyor burada o orta kýsmýný yaptým
     printf(" ");
     ++f;}
    printf("**\n");}
   
   for(d=0;e>d;){//burada üstteki iþlemi her defasýnda 2 arttýrarak tam tersini yaptým
    for(f=0,g=((a-b)-1)/2;g>f;){
     printf(" ");
     ++f;}
    printf("*");//birinci kýsma ayni * karakterine kadar ki boþluk sayýsýný bulup o kadar boþluk koydum ve * ý koydum
    b=b+2;
    
    for(c=2;b>c;){//burada da * iþaretinden sonraki 2. yýldýzýn konulacaðý yere kadar olan boþluk miktarýný girdim
     printf(" ");
     ++c;}
    printf("*");//ve * iþaretini koyup
    ++d;
    printf("\n");}}//yeni satýra geçtim
  a=0;//burada iþlem yapýlýnca a yý sýfýrlayýp hafýzada kalan kýsmýný sonraki iþlemde karakter girerse hafýzada kalaný yazmasýn diye yaptým
  break;}

  if (z=='q'){//eðer z karakterine q deðeri girilirse çýkýþ yaparken bunu belirtmesi için koydum ve breakle de döngü dýþýna attým gerçi döngü koþulu z!='q' ama garantiye almak için
   printf("\n\n\t##########################################################\n");
   printf("\t<<<<<                program terminates              >>>>>");
   printf("\n\t##########################################################\n");
   break;}
  
  if (((z!='a')&&(z!='b')&&(z!='c')&&(z!='q'))||((a==0)&&(b==0))){//bunlarýn koþullarýn dýþýnda hata vermesi için kullandým yani z nin 'a','b','c','q' olmadýðýnda ve a ya sayý harici giriþlerde iþlem yapmaz ve hata verir
   printf("\t----------------------------------------------------------------\n");
   printf("\t!!!<<<<<           you assign wrong try again           >>>>>!!!\n");
   printf("\t----------------------------------------------------------------\n");}}
 
   getch();//programýn açýk kalmasý için kullandým çýkýþtan sonra
}

3- C Uygulama 2 ( Girilen sayının artarak matrisini alan program )

Program Çıktısı :


Çalışma kodu:,


#include<stdio.h>
int main()

{
    int c,n,j;
    char i;
    i=1;
    printf("enter an integer:");
    scanf("%d",&n);

    while(i<=n)
    {
        c=i;
        j=1;

        while(j<=n)
        {
            if(c==0 || c<0)
             printf("0  ");//ekrana 0 yazilacak

            else if(c>0)//k nin sifirdan buyuk olmasi durumunda ekrana
                printf("%d  ",i);//once girilen rakam ve sonra her satir atlayarak sayinin bir fazlasi yazacak
                c--;//k degerini 1 azaltir
                j++;//j degerini 1 artirir

        }
    printf("\n");//new line yapar
    i++;//i degerini 1 artirir

    }
    return 0;
}





2- C Uygulaması 1


Çalışma kodu :

#include <stdio.h>

int main()
{
int i,j,k;
int n;//programýn devamýnda rakam olarak deger girilecek
char c;//inputa 2 degeri verildginde  girilecek harf c dir. input giris.
char input;//bizden istedigi giris
double f=1;//faktoriyel
double z;
i=1;

while( input<'1' || input>'3')//input 1 ve 3 arasýnda olursa program devam edecek eger e girilirse program bitecek
{
printf("1: Constituting a specific structure of numbers\n");
printf("2: Constituting a specific structure of letter\n");
printf("3: Making factorial, division and summation operations\n");
printf("e: Ending the program\n");
printf("Please enter one of these numbers(1,2,3) or enter letter e to exit:\n");
scanf("%s", &input);
if(input=='e')
{
    printf("*************************\n");
    printf("|The program ends        |\n");
    printf("*************************\n");
    break;//programin bitmesi icin yazildi
}
}

if(input=='1')//input 1 oldugunda rakamlarla matrise benzeyen ozel yapý olusacak
{

printf("Please enter a positive integer:");//pozitif bir rakam girilmesini istiyoruz
scanf("%d",&n);

while(i<=n)
{
    k=i;//i sayisini k ya atiyoruz
    j=1;//j degerine 1 atiyoruz

    while(j<=n)
    {
        if(k==0 || k<0)//k nin sifir olmasi yada sifirden kucuk olmasi durumunda
        printf("0  ");//ekrana 0 yazilacak

        else if("k>0")//k nin sifirdan buyuk olmasi durumunda ekrana
        printf("%d  ",i);//once girilen rakam ve sonra her satir atlayarak sayinin bir fazlasi yazacak
        k--;//k degerini 1 azaltir
        j++;//j degerini 1 artirir

    }
    printf("\n");//new line yapar
    i++;//i degerini 1 artirir


}
}

 else if(input=='2')//input degeri 2 girilirse bizden
{
    printf("Enter a character:");//harf ve
    scanf("%s",&c);

    printf("\nEnter an integer:");//rakam girmemizi ister
    scanf("%d",&n);
//girilen harf ve rakami kullanarak özel bir yapi olusturur

    while(i<=n)
    {
        j=1;
        while(j<=n)
        {
            if(j==i)
            putchar(c);//ekrana girilen harfi yazmayi saglar
            else
            printf("  ");

            j++;//j degerini 1 artirir

        }
        c++;//c degerini 1 artirir

        printf("\n");//new line yapar
        i++;//i degerini 1 artirir

    }
}
else if(input=='3')//input degeri 3 girilirse faktoriyel alma bolme ve toplama islemi yapilir
{
    printf("Please enter a positive integer:");//pozitif bir sayi girmemizi ister
    scanf("%d",&n);

    while(i<=n)
    {
        f=1/(f*i);

        i++;

    }

    printf("result:%f",1+f);
}
return 0;
}

1- Klavyeden Girilen Sayı Kadar Yanan Led

Merhaba arkadaşlar,
Bu ve bundan sonraki birkaç çalışmamda sadece kod paylaşımında bulunacağım. Yazılımla ilgilenmeye başladığım zamanlardan bu zamana kadar elimde arşivlediğim, bazıları ders ödevim olan, bazıları çeşitli projelerin belli kısımlarında kullandığım bu kodların sizlere çalışmalarınızda yardımcı olmasını dilerim.

Sadece bu amaç ile paylaşacağım çalışmaların başına sıra numarası ekleyeceğim.


Çalışma videosu :  http://www.youtube.com/watch?v=5QbkOOdJQ0Y&feature=youtu.be

Kaynak Kodu:


void setup(){
 
Serial.begin(9600);
pinMode(13, OUTPUT);
 
}
 
void loop (){
 
if (Serial.available()) { // seri porttan değer girilip girilmediğini anlamak için yazdık
  // eğer değer girilirse bu değer alttaki kod ile okunup ser isimli int
int deger = Serial.read();
 

if(deger >= 48 && deger <= 57) { // girileecek sayi eğer rakam ise if blogu çalışır.
//0-9 arasindaki sayiların ascii karşılıkları 48-57 arasıdır
   int flash = deger - 48;
   Serial.print("Flash sayisi  ");
   Serial.println(flash,DEC);
   TooglePin(13,flash); //toogle devresi diye isimlendirilen devreden aldım fonksiyon ismini
   //bu fonksiyon pinin bir öncekini durumunun zıttını yapmaktadır.
   //Yani pin high (lojik1) ise low (lojik 0) yapar
   }
 }
 
}
 
void TooglePin(int pin,int n){
 
   for (int i = 0; i < n; i++) {
   digitalWrite(pin, HIGH);
   delay(500);
   digitalWrite(pin, LOW);
   delay(500);
  }
}

27 Kasım 2014 Perşembe

Arduino ile Telefon Yapma ( GSM GPRS Shield Arduino )


Bu çalışmamızda GSM GSPRS shieldın arduino ile nasıl kullanılacağını, bağlantıların nasıl yapılacağını ve kodun nasıl yazılacağını inceleyeceğiz. GSM GPRS shieldlar AT komutları ile çalışmaktadır. Haberleşme modüllerine göre farklı AT komutları ile farklı işlemler yapılabilir.

Bu çalışmada SIM900 GSM GPRS shieldı kullanılmıştır.SIM 900 haberleşme modülünü kullanan bu sheild sayesinde bir telefonun yaptığı temel görevler yerine getirilebilmektedir. Örneğin arduino ile bir numara aranabilmekte, mesaj atılabilmekte ve internete girilebilmektedir.

GSM GPRS shield ile arduino bağlantısı oldukça basittir. Shield üzerindeki Tx, Rx pinleri sırasıyla arduinonun Rx, Tx pinlerine bağlanır. Haberleşme bu şekilde sağlanmış olur. Ancak birçok GSM GPRS shield 5V üzeri gerilimle ve 200mA - 1.5 A arası çalışma akımı ile çalışabilmektedir. Bu yüzden harici bir kaynaktann beslenmelidir. Bu kaynak ile arduino da aynı zamanda beslenebilir. Ancak arduinonun ve sheildın aynı kaynakla beslenmediği durumlarda groundlar birleştirilir.

arduino gsp/gprs code

Arduino GSM GPRS baglantısı



GSM GPRS Shield                Arduino

RX                                           TX
TX                                           RX
GROUND                            GROUND

Çalışma videosunu buradan izleyebilirsiniz: http://www.youtube.com/watch?v=BfiY58e4OQM&feature=youtu.be

Arduino ile bir telefonun aranması ; 



#include <SoftwareSerial.h> 
 
SoftwareSerial  Sim900Serial(2, 3); // sim900 gprs shield 
//rx-tx sırasıyla 2 ve 3 e takılır
 
void setup()
{
  Sim900Serial.begin(115200);               // GPRS baud rate  
  delay(2000);
  Sim900Serial.println("AT+IPR=19200");  // bu değer tüm gprs 
  //shieldlarında aynı değildir manuellerden bakılmalıdır
  delay(500);
  Sim900Serial.begin(19200);            // bu değer tüm gprs 
  //shieldlarında aynı değildir manuellerden bakılmalıdır   
  delay(1000); 
}
void loop()
{
  Sim900Serial.println("ATD05425420000;"); // aranmasını istediğiniz 
  //numara girlir. ATD komutu sim900'ün AT komut manueli incelendiğinde 
  //arama için kullanıldığı görülür
  //Örnek: Sim900Serial.println("ATD05425420000;"); vodafone müşteri 
  //hizmetlerinin numarası
  while(1);
}


Arduino ile bir telefona mesaj atılması ; 


#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);
void setup()
{
  Sim900Serial.begin(115200);               // GPRS baud rate  
  delay(500);
  Sim900Serial.println("AT+IPR=19200");
  delay(500);
  Sim900Serial.begin(19200);               // GPRS baud rate , Tüm shieldlarda aynı değildir 
  delay(1000);
  Serial.begin(9600);               // bilgisayar seri port baud rate
 Serial.println("SMS gondermek icin g tusuna basiniz: "); 
}
void loop()
{   
   if (Serial.available())
    switch(Serial.read())
   {
     case 'g':
       SendTextMessage();
       break;
    } 
   if (Sim900Serial.available())
    Serial.write(Sim900Serial.read());
}
void SendTextMessage()
{
  Sim900Serial.print("AT+CMGF=1\r");    //SMS text halde gönderilir. Bu komutun ne iş yaptığı sim900 AT komut manuelinden bakılır
  delay(100);
  Sim900Serial.println("AT + CMGS = \"05425420000\"");//mesajın gönderileceği numara
  delay(100);
  Sim900Serial.println("golmuhendis.blogspot.com.tr");//gönderilecek mesaj
  delay(100);
  Sim900Serial.println((char)26);
  delay(100);
  Sim900Serial.println();
}





13 Ekim 2014 Pazartesi

Arduino ile İnternet Üzerinden Led Kontrolü


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");
    }
       
}