1. Bu site çerez kullanmaktadır. Siteyi kullanmaya devam etmeniz halinde çerez kullanımı ile ilgili site koşullarını kabul etmiş sayılırsınız. Daha Fazlasını Öğren.
  2. Forum İllegal Uyarısı Forum kuralları gereği forumda video ve illagal paylaşım yapmak yasaktır.Program Arşivimizde ise kısıtlanmış sürüm yada dağıtımı serbest olan (trial - freeware) yazılımlar yayınlayınız..Aksi takdirde mesajlarınız silinecektir..

Arduino Öğreniyorum Çalışmaları

Konusu 'Pic Uygulama Ve Devreleri' forumundadır ve guclusat tarafından 15 Mart 2016 başlatılmıştır.

  1. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    [​IMG]

    Merhaba arkadaşlar, bu yazımda sizlere arduino ile ilk tanıştığımda yapmış olduğum ve bilgisayarı karıştırırken bulduğum birkaç örnek programı anlatacağım.

    1- Arduino Karaşimşek Programı:

    Kod:
    // Karasimsek programı
    //2,3,4,5,6,7,8,9,10,11,12 pinlerine takili ledlerin
    //bastan sona ve sondan basa dogru yakilmasi
    const byte ledPin[11]={2,3,4,5,6,7,8,9,10,11,12}; //Pinlerin
    //takilacagi portlar belirlendi
    int gecikme=40; //delay fonksiyonunda kullanilacak gecikme
    //suresi tanimladi
    int pinSayisi=0;
    int i=0,k;
    void setup()
    {
      for(pinSayisi=0;pinSayisi<11;pinSayisi++)
      {
        pinMode(ledPin[pinSayisi],OUTPUT); //LEDLERİN TAKİLDİGİ PİNLER CİKİS OLARAK TANİMLANDİ
        //for fonksiyonu ve dizi tanimlamasi sayesinde
        //led pinlerinin cikis olarak tanimlama islemi 10 satir yerine
        //3 satirde yapilmistir
      }
    }
    void loop()
    {
      for(pinSayisi=0;pinSayisi<10;pinSayisi++)
      {
        digitalWrite(ledPin[pinSayisi],HIGH);
        delay(gecikme);
        digitalWrite(ledPin[pinSayisi+1],HIGH);
        delay(gecikme);
        digitalWrite(ledPin[pinSayisi],LOW);
      }
      for(pinSayisi=11;pinSayisi>0;pinSayisi--)
      {
        digitalWrite(ledPin[pinSayisi],HIGH);
        delay(gecikme);
        digitalWrite(ledPin[pinSayisi-1],HIGH);
        delay(gecikme);
        digitalWrite(ledPin[pinSayisi],LOW);
      }
    }
     
  2. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    Açıklama satırlarında hangi kodun ne iş yaptığı yazmaktadır. Ancak yine yeni başlayanlara yardımcı olmak açısından kısa kodumuzdaki komutları tanıyalım.

    const byte ledPin[11]={2,3,4,5,6,7,8,9,10,11,12}; Bu kodda ledlerin artı uçlarının takılacağı pin numaraları verilmiştir. Daha doğrusu const byte tipinde bu numaralar ledPin değişkenine atanmıştır. ledPin değişkeni 11 elemana sahip tek boyutlu dizidir.

    byte veri türü işlemci belleğinde 8 bitlik yani 1 byte lık alanı işgal eder.

    const tür belirleyicisi ise tanımlanan nesnenin bir sabit olduğunu belirtir. Yani const tür belirleyicisi ile tanımlanmış bir değişkenin değeri programın sonuna kadar değiştirilemez ve programın en başında tanımlanır. Peki neden buna ihtiyaç duyduk ? Bu sorunun cevabı aslında oldukça uzun ancak kısaca ve anlaşılır bir şekilde şöyle anlatayım.

    Arduino kartlarında (Due hariç) 3 tip memory vardır. Bunlar Flash, SRAM( static random access memory) ve EEPROM (erasable programmable read only memory) memory tipleridir. İşlemcinin enerjisi kesildiğinde sadece SRAM deki bilgiler kaybolur. Arduinoda SRAM memory nin görevi sketch oluşturmak ve değişkenleri çalıştırmaktır.

    Arduino sketchi Flash memory e kaydedilir. Bunu, kartınıza IDE kullanarak program attığınızda en altta göreceksiniz ( Şekil 1).
     
  3. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    [​IMG]

    Şekil 1

    EEPROM ise programlamacı için ayrılmış bir alandır. İstenilen verilerin kaydedilmesi durumunda kod yazanlar tarafından kullanılır.

    Bunları anlatmamın const tür belirleyicisi ile ne alakası var diyebilirsiniz. Ancak çok alakası var. Arduino geliştirme kartlarının sahip olduğu bu memory tipleri kısıtlı alanlara sahip. Dolayısıyla siz üst düzey kompleks bir kod yazacaksanız sahip olduğunuz hafıza alanını iyi kullanmalısınız. Bunun içinde hafızada en az yer tutan tür belirleyicilerini kullanmalısınız. #define ve const tür belirleyicileri değişken tanımlamalarında en az alan kaplayan tür belirleyicileridir. #define komutu ile const komutu hafızada aynı yeri kaplarlar. Bu sebepten const tür belirleyicisi kullanılmıştır.
     
  4. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48


    void setup() fonksiyonu içerisinde bulunan for döngüsü sayesinde led pinlerinin 10 satırda OUTPUT olarak tanımlanma işlemi 3 satır kod ile yapılmıştır.

    Kod:
    for(pinSayisi=0;pinSayisi<11;pinSayisi++)
    {
    pinMode(ledPin[pinSayisi],OUTPUT);
    }
    setup() fonksiyonu içerisindeki kodlar programın çalışması boyunca sadece bir kere çalıştırılır. Ve bu fonksiyon içerisinde başlangıç değerleri, pin modları (input, output olması), kullanılan kütüphanelerin başlatılması ( lcd.begin() ) gibi işlemler yapılmaktadır.

    void loop() fonksiyonu programın sürekli çalıştırıldığı fonksiyondur. Yani program loop fonksiyonu içerisinde dönmektedir. Yapılması istenen işlemler bu fonksiyon içerisine yazılmalıdır.
     
  5. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    2- Arduino Bir Butonla Bir Led Yakma Programı

    Kod:
    // 1 buton ile 1 ledin yakılıp sondurulmesi
    const int buton_pin=8; //buton 8. pine takilir.
    const int led_pin=9; //led 9. pine takilir.
    int buton_durum=0; //butona basilip basilmadigini tutacak degisken
    void setup()
    {
      pinMode(buton_pin,INPUT); //buton arduino giris pini olarak ayarlanir
      pinMode(led_pin,OUTPUT); //led arduino çıkış pini olarak ayarlanir.
    }
    void loop()
    {
      buton_durum=digitalRead(buton_pin);  //butona basilip basilmadigi okunur.
      //Butona basildiginda 1 baslmadiginda 1 degeri okunur. Yani digital sistemdir.
      if(buton_durum==HIGH) //Butana basildigi durumda ki şartı barındırır.
      {
        digitalWrite(led_pin,HIGH); //led yakılır
        delay(1000); //1 sn (1000 ms) gecikme verilir
      }
      else //butona basilmadigi durumda ki şartı barındırır
      {
        digitalWrite(led_pin,LOW); //led sondurulur
        delay(1000); //1 sn gecikme verilir.
      }
    }
     
  6. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    3- Arduino Butonla Karaşimşek Devresi

    Kod:
    // Buton ile karasimsek devresinin kontrolu
    //Butona 1 kere basıldığında 2,3,4,5,6,7,8,9,10,11,12 pinlerine takili ledlerin
    //bastan sona ve sondan basa dogru yakilmasi ardından ikili olarak aynı hareketin yapilmasi
    //Butona tekrar basıldığında tüm ledlerin sonmesi sağlanacaktır.
    const int buton_pin=1; //Buton 1. pine bağlanır
    boolean buton_durum={false}; //Butona basılıp basılmadığını yani butonun durumunu tutan değişken
    const byte ledPin[11]={2,3,4,5,6,7,8,9,10,11,12}; //Led pinlerinin
    //takilacagi portlar belirlendi
    int gecikme=40; //delay fonksiyonunda kullanilacak gecikme
    //suresi tanimladi
    int pinSayisi=0;
    int fonk_deg=0;
    void setup()
    {
      for(pinSayisi=0;pinSayisi<11;pinSayisi++)
      {
        pinMode(ledPin[pinSayisi],OUTPUT); //LEDLERİN TAKİLDİGİ PİNLER CİKİS OLARAK TANİMLANDİ
        //for fonksiyonu ve dizi tanimlamasi sayesinde
        //led pinlerinin cikis olarak tanimlama islemi 10 satir yerine
        //3 satirde yapilmistir
      }
      pinMode(buton_pin,INPUT); //Buton giriş pini olarak tanimlandi
    }
    void loop()
    {
      int buton=digitalRead(buton_pin); //Buton değeri okunur. Butona basıldığı durumda 1 basılmadığı durumda 0 degeri döner
      delay(50);
      if(buton==1)  // butona basıldığı durumda yapılması gerekenler
      {
        fonk_deg=butonDurum(); // butonDurum fonksiyonuna gider ve dönen degeri fonk_deg değişkenine atar
        if(fonk_deg==1) buton_durum=true; //fonk_deg değişkeni 1 ise buton durumunu true yapar
        if(fonk_deg==0) buton_durum=false;
      }
    }
    int butonDurum() // butonDurum isimli fonksiyon
    {
      int donen_sayi=0;
      if(buton_durum==false)
      {
        for(pinSayisi=0;pinSayisi<10;pinSayisi++)
        {
          digitalWrite(ledPin[pinSayisi],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi+1],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi],LOW);
        }
        for(pinSayisi=11;pinSayisi>0;pinSayisi--)
        {
          digitalWrite(ledPin[pinSayisi],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi-1],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi],LOW);
        }
        for(pinSayisi=0;pinSayisi<11;pinSayisi++)
        {
          digitalWrite(ledPin[pinSayisi],HIGH);
          digitalWrite(ledPin[11-pinSayisi],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi],LOW);
          digitalWrite(ledPin[11-pinSayisi],LOW);
          delay(gecikme);
        }
        for(pinSayisi=0;pinSayisi<11;pinSayisi++)
        {
          digitalWrite(ledPin[pinSayisi],HIGH);
          digitalWrite(ledPin[pinSayisi+1],HIGH);
          delay(gecikme);
          digitalWrite(ledPin[pinSayisi],LOW);
          digitalWrite(ledPin[pinSayisi+1],LOW);
          delay(gecikme*4);
        }
        return donen_sayi=1;
      }
      else
      {
         for(pinSayisi=0;pinSayisi<11;pinSayisi++)
         {
           digitalWrite(ledPin[pinSayisi],LOW);
           delay(100);
         }
         return donen_sayi=0;
      }
    }
     
  7. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    4- Arduino Led Parlaklık Ayarı

    Kod:
    //PWM metodu ile 1 ledin parlaklığını artırmak ve azaltmak
    //2 buton kullanılacaktır.1 butona basıldığında parlaklık artacak
    //diğer butona basıldığında parlaklık azalacaktır.
    
    int buton1=5; //butonların bağlanacağı pin numaralarıtanımlanmıştır
    int buton2=6;
    int b1_deger=0,b2_deger=0; //buton degerlerini tutacak olan değişkenler
    int led=10;//10. pin Arduino Uno da pwm pinidir.
    int parlaklik=0; //Bu degisken ile ledin parlakligi 0-255 arasında değiştirilecektir.
    
    void setup()
    {
    pinMode(buton1,INPUT); //butonlar giriş pini olarak ayarlanmıştır
    pinMode(buton2,INPUT);
    pinMode(led,OUTPUT); // led çıkış olarak ayarlanmıştır.
    }
    
    void loop()
    {
    b1_deger=digitalRead(buton1); //buton durumları okunur
    //Butona basılmışsa 1 basılmamışsa 0 döner
    b2_deger=digitalRead(buton2);
    
    if(b1_deger==HIGH)
    {
    for(parlaklik=0; parlaklik<=255; parlaklik++) //Ledin parlakligi 100 ms de bir artacak
    {
    analogWrite(led,parlaklik);
    delay(100);
    }
    }
    if(b2_deger==HIGH) //Ledin parlakligi 100 ms de bir azalacak
    {
    for(parlaklik=255; parlaklik<=0; parlaklik--)
    {
    analogWrite(led,parlaklik);
    delay(100);
    }
    }
    else //Butonlara basılmadığı durumda led sonecektir
    {
    digitalWrite(led,LOW);
    }
    }
     
  8. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    5- Arduino Seven-segment Uygulaması

    Kod:
    // Ortak katotlu 7 segment display uygulamasi
    //Ortak anot kullanılması durumunda tanımlanacak olan pn durumlarıda verilmiştir.
    //Ortak anot için
    /*
    byte yedi_seg[10][7] = { { 0,0,0,0,0,0,1 },  // = 0
                             { 1,0,0,1,1,1,1 },  // = 1
                             { 0,0,1,0,0,1,0 },  // = 2
                             { 0,0,0,0,1,1,0 },  // = 3
                             { 1,0,0,1,1,0,0 },  // = 4
                             { 0,1,0,0,1,0,0 },  // = 5
                             { 0,1,0,0,0,0,0 },  // = 6
                             { 0,0,0,1,1,1,1 },  // = 7
                             { 0,0,0,0,0,0,0 },  // = 8
                             { 0,0,0,1,1,0,0 }   // = 9
                            };
    */
    //Ortak katot için
    byte yedi_seg[10][7]={ { 1,1,1,1,1,1,0 },  // = 0 a,b,c,d,e,f ledlerine 1 sinyali verilerek yakilmasi sağlanır. g ledi ise sondurulur böylece display üzerinde 0 simgesi belirir.
                           { 0,1,1,0,0,0,0 },  // = 1
                           { 1,1,0,1,1,0,1 },  // = 2
                           { 1,1,1,1,0,0,1 },  // = 3
                           { 0,1,1,0,0,1,1 },  // = 4
                           { 1,0,1,1,0,1,1 },  // = 5
                           { 1,0,1,1,1,1,1 },  // = 6
                           { 1,1,1,0,0,0,0 },  // = 7
                           { 1,1,1,1,1,1,1 },  // = 8
                           { 1,1,1,0,0,1,1 }   // = 9
                          }; //7 segment display uzerinde ledlerin 0 dan 9 a kadar sayilmasi
    byte sayac_x=0;
    byte sayac_y=0;
    int pin[8]={2,3,4,5,6,7,8,9}; //sirasiyla sevensegment display üzerindeki
    // a,b,c,d,e,f,g ve nokta ledlerinin takilacağı arduino pin numaraları tanımlanmıştır.
    int i=0;
    void setup()
    {
      for(i=0;i<8;i++)
      {
        pinMode(pin[i],OUTPUT); //sevensegment ledleri çıkış olarak ayarlanır
        digitalWrite(pin[i],LOW); //ve hepsi ilk başta sondurulur
      }
    }
    void loop()
    {
       for (sayac_x = 0; sayac_x < 10; sayac_x++)  //display üzerinde 0 dan başlayıp 1 sn aralıklar ile 9 a kadar sayan rakamlar gorulecektir.
       {
         delay(1000);
         sevenSeg(sayac_x);  //sayac_x değişkeni her defasında 1 artırılarak sevenSeg fonksiyonu ile gonderilir. sayac_x değişkeni yedi_seg[][] dizisinin ilk değişkebidir.
        }
        delay(2000);
        for (sayac_x = 10; sayac_x > 0; sayac_x--)  //display üzerinde 9 dan başlayıp 1 sn aralıklarla 0 a kadar sayan rakamlar gozukecektir.
        {
          delay(1000);
          sevenSeg(sayac_x-1);
        }
        delay(2000);
    }
    void sevenSeg(byte sayac_x)
    {
      byte p=0;
      for (byte sayac_y = 0; sayac_y < 7; sayac_y++)
      {
        digitalWrite(pin[p], yedi_seg[sayac_x][sayac_y]);
        p++;
      }
    }
     

    Ekli Dosyalar:

Yüklüyor...
Benzer Konular - Arduino Öğreniyorum Çalışmaları
  1. guclusat
    Mesaj:
    0
    Görüntüleme:
    150
  2. guclusat
    Mesaj:
    0
    Görüntüleme:
    109
  3. guclusat
    Mesaj:
    0
    Görüntüleme:
    91
  4. guclusat
    Mesaj:
    5
    Görüntüleme:
    242
  5. guclusat
    Mesaj:
    0
    Görüntüleme:
    143

Sayfayı Paylaş