Gerekli malzemeler:

Arduino kartımızın dijital pinlerini şimdiye kadar sadece çıkış fonksiyonunda kullanmıştık. Fakat dijital pinler giriş özelliği sayesinde sensörler ve butonlar gibi diğer çevre birimleriyle de kullanılmakta. Bu dersimizde iki adet push buton kullarak LED yakıp söndürmeyi öğreneceğiz.

Kartımızın bağlantı şeması şu şekilde:

ders2_bb

Kodumuz ise şu şekilde:

int ledler[] = {4, 5, 6, 7};
int led_sayisi = 4;
int buton_pin = 2;
int buton_deger = 0;
int buton_basilma = 0;

void setup()
{
  for (int i = 0 ; i < led_sayisi ; i++)
  {
    pinMode(ledler[i], OUTPUT);
  }
  pinMode(buton_pin, INPUT);
}

void loop()
{
  buton_deger = digitalRead(buton_pin);
  if (buton_deger == HIGH)
  {
    for (int i = 0 ; i < led_sayisi ; i++)
    {
      if (buton_basilma % led_sayisi == i)
        digitalWrite(ledler[i], HIGH);
      else
        digitalWrite(ledler[i], LOW);
    }
    buton_basilma++;
    delay(100);
  }
}

Dikkat ettiyseniz butonları bağlarken 10kΩ direnç kullandık. Bu direncin ismi pull-down direncidir Peki pull-down direnci ne işe yarar?

Pull-down direnci, dijital pinleri giriş olarak kullandığımızda sinyalin bozulmamasını sağlar. Bu projemizde buton basılı değilken dijital pinden okunan değer 0V yani lojik LOW seviyesidir. Pull-down direnci, buton basılıp değer HIGH’a çekilmediği sürece bu pindeki gerilimin 0V’ta sabit kalmasını sağlar.

46 Yorumlar

  1. Hocam aldığım set de, çıt çıt uton geldi ve benim tabirimce 2 bacaklı, projede 4 bacaklı olarak gösterilmiştir, ben bir türlü yakamadım led i.

    Saygılarımla

    • Görseldeki buton, breadboard’un üst kısmında kalan iki bacak butona basıldığında kısa devre olacak şekilde çalışmaktadır. Siz de 2 bacaklı butonunuzu buna göre bağlayabilirsiniz.

    • Evet, dirençlerin değerleri önemli, yüksek değerli direnç kullandıysanız LED’ler çok düşük parlaklıklta yanacağından yanmıyormuş gibi görünebilir.

  2. Öncelikle kolay gelsin güzel bir paylaşım yalnız devreyi şekildeki kurmama ve kodlarıda birebir yazmama rağmen yanma işlemi yapıyor yalnız söndürme işlemi yapmıyor.
    Söndürme işlemini ekleyebileceğimiz kod buluğunu nerede ve nasıl kullanabilirim ??

    • ledi kapatmak için digitalWrite (ledPin,OUTPUT); kodunu yazabilirsiniz. LedPini hangi ledi yakmak isterseniz ona göre değiştirebilirsiniz.

  3. Hocam gönderilen beeadboard resimlerle aynı değildir.bana gönderilende resimlerdeki gibi +- sırasındaki girişler ile harf sırasındaki girişler aynı hizada değil

    • Merhabalar, C dilinde % işareti modülüs operatörüdür. Yani matematikte kullanmmış olduğumuz mod işlemine denk düşer. İki tam sayı arasında kullanıldığında soldaki sayının sağdakine bölümünden kalanı verir. Örneğin

      7 % 5;

      bize 2 verecektir.

  4. Çok Yararlı Bir Yazım olmuş. Ve Bende Gayet Güzel Çalıştı. Sadece devreler gecikme yapıyor. Onun Dışında, Harika bir paylaşım olmuş.

  5. Kardeşim 10 Ohm Kullanıyoruz dirençleri demişsin İlk olan siyah turuncu kahverengi renkli . Fakat Diğer dordu Turuncu Turuncu Kahve neden ve o dordu kaç ohm ? ACİL

  6. merhaba,

    Arduino:1.8.3 (Windows XP), Kart:”Arduino/Genuino Uno”

    Çalışmanız programın 1294 bayt (4 %) saklama alanını kullandı. Maksimum 32256 bayt.
    Global değişkenler belleğin 21 byte kadarını (1%) kullanıyor. Yerel değişkenler için 2027 byte yer kalıyor. En fazla 2048 byte kullanılabilir.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x60
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x60
    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    arıza çözümü nedir?

  7. selamlar..Hocam öncelikle ellerinize sağlık teşekkürler.. Programın çalışma mantığını adım adım anlatabilir misiniz?

    İyi çalışmalar..

  8. Hocam peki bunun butona bastıktan sonra saymaya devam etmemesi için ne yapacağız. butona basılı tuttukça sayıyor bunu tek sayma nasıl yapabiliriz.

  9. Arduino:1.8.3 (Windows 10), Kart:”Arduino/Genuino Uno”

    C:\Users\Win10\AppData\Local\Temp\arduino_modified_sketch_276983\sketch_nov18a.ino: In function ‘void setup()’:

    sketch_nov18a:11: error: redefinition of ‘void setup()’

    void setup()

    ^

    C:\Users\Win10\AppData\Local\Temp\arduino_modified_sketch_276983\sketch_nov18a.ino:1:6: note: ‘void setup()’ previously defined here

    void setup() {

    ^

    C:\Users\Win10\AppData\Local\Temp\arduino_modified_sketch_276983\sketch_nov18a.ino: In function ‘void loop()’:

    sketch_nov18a:36: error: redefinition of ‘void loop()’

    void loop() {

    ^

    C:\Users\Win10\AppData\Local\Temp\arduino_modified_sketch_276983\sketch_nov18a.ino:20:6: note: ‘void loop()’ previously defined here

    void loop()

    ^

    exit status 1
    redefinition of ‘void setup()’

    C:\Users\Win10\Documents\Arduino\libraries\sketch_nov17a içerisinde geçersiz kütüphane bulundu: C:\Users\Win10\Documents\Arduino\libraries\sketch_nov17a
    C:\Users\Win10\Documents\Arduino\libraries\sketch_nov17a içerisinde geçersiz kütüphane bulundu: C:\Users\Win10\Documents\Arduino\libraries\sketch_nov17a

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    hocam herşeyi yaptım ama bu hatayı veriyor neden????

    • Kodu yanlışlıkla iki kere alt alta yapıştırmış olabilir misiniz? Verilen hata mesajlarında göreceğiniz üzere void loop ve void setup fonksiyonları iki kere tanımlanmış olduğu belirtiliyor.

  10. Hocam ben de yukarıdaki ledleri butona her bastığımda sırayla yanmasını istiyorum.Mesela butona bastım 1.led,butona bastım 1.led sönecek 2.led yanacak,butona bastım bu sefer 2.led sönecek 3.led yanacak…… diye yapmam gerekiyor.Lütfen yardım edin.Öğretmenim. Okulda öğrencilerim için bir materyal yapıyorum.

  11. Öncelikle bu başarılı proje için teşekkürler .
    Ben bir proje üzerinde uğraşıyorum . Proje görsel amaçlı bir proje .
    Çalışma Şekli ;
    Yaklaşık 10 tane led var bunlar kara şimşek gibi yanıyor işin bu kısmı tamamdır .
    Eklemek istediğim şey ise 3 tane buton bu butonların görevi . 1. butona(tach buton) basıldığı zaman ledler kara şimşek şeklinde yanmaya başlıyacak(2. butona basılana kadar) , 2. buton(tach buton) basıldığı zaman ledlerin yanması duracak(1. butona basılana kadar) , 3. buton(tach buton) basıldığı zaman ledlerin örnrğin 3.leddeyse veya 5. leddeyse nerede kaldısya en başa saracak yani sıfırlamış olacak . Böyle birşey yapmam mümkün müdür ? Şimdiden yapacağınız yardımlar için teşekkür ediyorum .

  12. hocam aynısını defalarca yaptım ama ledler yanmıyo bide arduinoyu pc ye bağladığımda l ışığı sabit kalıyo yanıp sonmuyo

  13. SAYIN ROBOTİSTAN EKİBİ 5V PORTUNUN ALTINDAKİ GND PORTUNA BAĞLI OLAN KABLO YANLIŞTIR, O KABLONUN YERİ DEĞİŞTİRİLMELİDİR BEN O KABLONUN YERİNİ A PORTLARINDAN BİRİNE TAKARAK İŞLEMİ TAMAMLADIM AMA O KABLO GND PORTUNDAN A PORTLARINDAN BİRİNE TAŞINMALIDIR LÜTFEN DÜZELTİN BELKİ BENİMKİNDEN DAHA İYİ BİŞEY BULABİLİRSİNİZ SAYGILARIMLA TOPRAK TEMİZKAN

  14. herşeyi tıpatıp yapıorum banamı bozuk mal geldi anlamadım ledler yanmıyo hiç bişey olmuyo sadece kodu gönderebiliyorum

  15. Mrb,
    Arduino konusunda çok yeniyim.
    Ama bu uygulamada anlayamadığım ve çözemediğim problemler yaşadım. Şöyle ki;
    Bir kere butona basıldıktan sonra
    bütün LED ler sırasıyla yanıyor ve sönmüyor.
    Butona tekrar bastığımda bir değişiklik olmuyor LED ler yanmaya devam ediyor.
    Büyük bir ihtimalle buton_pin=2 nolu pinden
    buton_deger = digitalRead(button_pin);
    komutuyla okunan değer hep HIGH oluyor.
    Kartta mı bir problem var diye buton_pin=11 yaptım ama sonuç aynı.
    Ayrıca LED ler
    digitalWrite(ledler[i],LOW);
    komutu ile sönmüyor.
    Verilen kod eksik mi?
    Ya da kodu yüklerken başka birşeyler mi yapmamız gerekiyor?
    Debug modda çalıştırıp koddaki değişkenlerin değerlerini görebiliyor muyuz?

    Konu ile ilgili yardımcı olursanız sevinirim.

    • problem çözüldü. buton_basilma++ ve delay(100) komutları for döngüsünün içinde kaldığından bu problem yaşanıyor. Bu komutlar for döngüsünün dışına alınınca problem çözüldü.

  16. meraba iyi günler hocam. Bana PULLDOWN İLE LEDİ İLK BASTIGIMIZDA DEVAMLI YANACA, 2. BASTIGIMIZDA YANIP SÖNECEK VE 3.BASTIGIMIZDA KOMPLE SONECEK. DEVRENİN KODLARI LAZIM YARDIMCI OLURMUSUNUZ. dersden kaldım ve bunu yapmam lazım

    • Butona her basıldığında bir artacak bir sayaç oluşturun. Örn:
      if(buton == LOW) {counter++;}

      Daha sonra sayaç değerinin her bir artması durumunda LED’in yanma modunu değiştirecek bir if yapısı oluşturun. Örn:
      if(counter %3 == 0) {digitalWrite(ledpin, HIGH);}
      if(counter %3 == 1) {digitalWrite(ledpin,LOW);}

  17. Arduino: 1.8.5 (Mac OS X), Board: “Arduino/Genuino Uno”

    /var/folders/n3/cd5zn_fd44jfdt_52mj0c1g40000gn/T//ccvxxlTG.ltrans0.ltrans.o: In function `main’:
    /Users/aayavuz/Desktop/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/main.cpp:43: undefined reference to `setup’
    collect2: error: ld returned 1 exit status
    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

CEVAP VER

Please enter your comment!
Please enter your name here