Arduino

Arduino Shift Register ve PWM Kaynaklı Led Blink

Arduino Shift Register Nasıl Kullanacağız ?

Merhabalar arkadaşlar sizlerle çok güzel bir devre paylaşacağım 32 Ledi daha önce anlattığım gibi Arduino shift register ve pwm ile süreceğiz kullanımı gayet basit üzerinde oynaması da bir o kadar kolay olan kod parçacıklarını kullancağız. Burada Shift register ‘ları kullanmamızın temel sebebi sizlerinde tahmin edeceği üzere normalde 32 adet ledi çalıştırmamız için tam 32 adet çıkış kullanmamız gerekmekte yani tabiri caizse aslana fare avlatmaya çalışmak desek tam olarak karşılığı olur..

Ayrıca zaten arduino uno sonra arduino nano gibi denetleyicilerde zaten 32 tane çıkış yok normalde bu projeyi bile gerçekleştiremiyoruz ki biz burada 12 adet çıkışla bütün mevzuyu çözdük ne kadar da hoş değil mi :) Ki biz shift register kaskat olarak bağlasak 3 adet çıkışla bile bu işi yapabilirdik… Neyse fazla uzatmayıp malzeme listemize adımlayalım

Malzemeler

Malzemeleri satın alırken internette ki güvenli satıcılardan almaya çalışın arkadaşlar bu sıralar zaten çinli abilerimiz saolsun ledlerde pek farketmese de her çipin entegrenin taklidini yapmakta üstüne yok özellikle mosfetlerde bu taklit olayı alıp başını gitti diyebilirim 3 kuruş fazla olsun temiz olsun hesabı köklü satıcılardan almanızda fayda var şimdi burada isim vererek bedava reklam yapmak istemiyorum ama google amcamızın aramalarında zaten o satıcılar hemen üstlerde yerlerini alıyor.

Evet Malzemelerimizi topladığımıza göre şimdi Geçelim bağlantılara bağlantılarımızı Aşağıdaki görselde ki gibi yapalım ve sonrasında kodlamaya geçmeye hazırız.

Bağlantı Şeması

Arduino Shift Register ve Ledlerin Bağlantı Şeması
Arduino ve Ledler Bağlantı Şeması

Kodlama

Evet artık Arduino ve diğer bileşenler arasında bağlantı şemamızı da hazır ettiğimize göre kodlarımızı yazmak için arduino ide mizi açıp kodlamaya başlayalım..

İlk Olarak değişkenlerimizi en üste tanımlayalım

int gecikme = 20;

int LPA = 12;      
int CPA = 11; 
int DPA = 13;

int LPB = 9;      
int CPB = 8; 
int DPB = 10;

int LPC = 6;      
int CPC = 5; 
int DPC = 7;

int LPD = 3;      
int CPD = 2; 
int DPD = 4;

byte leds = 0;

Değişkenlerimizi tanımladığımıza göre shift register için gerekli fonksiyonlarımızı oluşturalım. Burada dikkat etmeniz gereken konu aslında sadece sıralama shift Register’ı yazma konumuna alıp sonra kaydırma yapıp tekrar çıktı konumuna çekiyoruz ;)

void shift_register_1()
{
   digitalWrite(LPA, LOW);
   shiftOut(DPA, CPA, LSBFIRST, leds);
   digitalWrite(LPA, HIGH);
}
void shift_register_2()
{
   digitalWrite(LPB, LOW);
   shiftOut(DPB, CPB, LSBFIRST, leds);
   digitalWrite(LPB, HIGH);
}
void shift_register_3()
{
   digitalWrite(LPC, LOW);
   shiftOut(DPC, CPC, LSBFIRST, leds);
   digitalWrite(LPC, HIGH);
}
void shift_register_4()
{
   digitalWrite(LPD, LOW);
   shiftOut(DPD, CPD, LSBFIRST, leds);
   digitalWrite(LPD, HIGH);
}

Şimdi Void Setup bölümüne gelip isimlendirdiğimiz pin numaralarına pin çıkışları veriyoruz.

void setup() 
{
  pinMode(LPA, OUTPUT);
  pinMode(DPA, OUTPUT);  
  pinMode(CPA, OUTPUT);
  pinMode(LPB, OUTPUT);
  pinMode(DPB, OUTPUT);  
  pinMode(CPB, OUTPUT);
  pinMode(LPC, OUTPUT);
  pinMode(DPC, OUTPUT);  
  pinMode(CPC, OUTPUT);
  pinMode(LPD, OUTPUT);
  pinMode(DPD, OUTPUT);  
  pinMode(CPD, OUTPUT);
}

Ve şimdi tüm ayarlamalarımızı yaptığımıza göre sırasıyla ledlerimizi yakıp sondurecek fonksiyonlarımızı loop içine yazacağız .

Fonksiyonlar

void loop() 
{
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, 7-i);
    shift_register_1();
    delay(gecikme);
  }
  leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, 7-i);
    shift_register_2();
    delay(gecikme);
  }
  leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, 7-i);
    shift_register_3();
    delay(gecikme);
  }
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, 7-i);
    shift_register_4();
    delay(gecikme);
  }
  delay(50);
  
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
  delay(50);
  
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    shift_register_4();
    delay(gecikme);
  }
  leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    shift_register_3();
    delay(gecikme);
  }
 
  leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    shift_register_2();
    delay(gecikme);
  }
  leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    shift_register_1();
    delay(gecikme);
  }
  delay(50);
  
 
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
}

Burada Dikkat ettiyseniz her yazdırma fonksiyonunu kolaylık olsun diye for döngüsüyle yazdırdık buradaki for döngüsünde ufak ayarlamalarla ledleri 2 şerli yada atlamalı da yapabilirdik örneğin aşağıdaki kodu inceleyerek te anlayalım.

for (int i = 0; i < 8; i+=2)
   {
     bitSet(leds, i);
     digitalWrite(LPA,LOW);
     delay(gecikme);
   }

Yukarıdaki for döngüsünde ki i değişkeninin artış değerini 2 artırdığımızda 1 atlayarak ledleri yakacaktır Buna benzer çeşitli varyasyonlar da yaratabilirsiniz.

Evet arkadaşlar Bu Projemiz de burada son bulmakta umarım beğenmişsinizdir umarım size güzel bir şekilde aktarabilmişimdir Yorumlarınızla Konuyu değerlendirmeyi unutmayınız Konunun en sonunda tam kodu paylaştım İyi çalışmalar.

Proje ön gösterim
Kodların Tamamı
int gecikme = 20;

int LPA = 12;      
int CPA = 11; 
int DPA = 13;

int LPB = 9;      
int CPB = 8; 
int DPB = 10;

int LPC = 6;      
int CPC = 5; 
int DPC = 7;

int LPD = 3;      
int CPD = 2; 
int DPD = 4;

byte leds = 0;

void shift_register_1()
{
   digitalWrite(LPA, LOW);
   shiftOut(DPA, CPA, LSBFIRST, leds);
   digitalWrite(LPA, HIGH);
}
void shift_register_2()
{
   digitalWrite(LPB, LOW);
   shiftOut(DPB, CPB, LSBFIRST, leds);
   digitalWrite(LPB, HIGH);
}
void shift_register_3()
{
   digitalWrite(LPC, LOW);
   shiftOut(DPC, CPC, LSBFIRST, leds);
   digitalWrite(LPC, HIGH);
}
void shift_register_4()
{
   digitalWrite(LPD, LOW);
   shiftOut(DPD, CPD, LSBFIRST, leds);
   digitalWrite(LPD, HIGH);
}
void setup() 
{
  pinMode(LPA, OUTPUT);
  pinMode(DPA, OUTPUT);  
  pinMode(CPA, OUTPUT);
  pinMode(LPB, OUTPUT);
  pinMode(DPB, OUTPUT);  
  pinMode(CPB, OUTPUT);
  pinMode(LPC, OUTPUT);
  pinMode(DPC, OUTPUT);  
  pinMode(CPC, OUTPUT);
  pinMode(LPD, OUTPUT);
  pinMode(DPD, OUTPUT);  
  pinMode(CPD, OUTPUT);
}
void loop() 
{
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, 7-i);
    shift_register_1();
    delay(gecikme);
  }
  leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, 7-i);
    shift_register_2();
    delay(gecikme);
  }
  leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, 7-i);
    shift_register_3();
    delay(gecikme);
  }
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, 7-i);
    shift_register_4();
    delay(gecikme);
  }
  delay(50);
  
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
  delay(50);
  
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    shift_register_4();
    delay(gecikme);
  }
  leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    shift_register_3();
    delay(gecikme);
  }
 
  leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    shift_register_2();
    delay(gecikme);
  }
  leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    shift_register_1();
    delay(gecikme);
  }
  delay(50);
  
 
  leds = 0;
  shift_register_4();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_3();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_2();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
    leds = 0;
  shift_register_1();
  delay(gecikme);
  for (int i = 0; i < 8; i+=2)
  {
    bitSet(leds, i);
    digitalWrite(LPA,LOW);
    delay(gecikme);
  }
}

Bir projeyi daha sonlandırdık Umarım faydalı olmuştur diğer projelerde görüşmek üzere arkadaşlar..

Etiketler

Onur NP

Arduino Stm32 gibi Mikrodenetleyici PLC Otomasyon sistemleri ve Genel elektronik projeleri üzerine örnek paylaşımlar yapmaktayım Endüstriyel ve Kişisel proejelerinize Ücretli olarak destek verebilirim.

İlgili Makaleler

Bir Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Call Now ButtonAra
Kapalı
Kapalı