11 Nisan 2023 Salı

Arduino ile analogWrite kullanımı

Daha önceki örneklerde digitalWrite kullanımını görmüştük. Bu sefer analogWrite komutunun kullanımı göreceğiz. Fakat önce bunun için digital ve analog arasındaki farkı bilmemiz gerekir.
digitalWrite komutunu kullanırken çıkışa bağladığımız led digitalWrite komutu sayesinde ya ışık veriyor ya da vermiyordu. Arduino, LOW ile çıkışa elektrik vermediği için led ışık vermiyor, HIGH ile çıkışa elektrik verdiği için led ışık veriyor. Aslında bu durum dijital kavramını bize açıklıyor. Digital olarak yazılıp dijital olarak okuduğumuz sayısal olarak da bilinen bu kavram aslında elektrik var ve yok kavramıdır. Yani dijital sistemler 1 ve 0 ikilisinin oluşturduğu ikili sistem temeline kurulmuştur. 
1 elektrik var yani HIGH, 0 elektrik yok yani LOW'dur. Yani bu şekilde led ya ışık verir ya da vermez. 

Yukarıdaki görselde görüldüğü gibi ledin kademeli olarak parlaklığı artsın ya da azalsın istiyorsak dijitaldeki gibi 0 ya da 1 seçeneği değil değişken bir aralığa sahip olan bir sisteme ihtiyacımız vardır. Bu sistem ise analog sistemlerdir. 


Dijitalde 0 elektrik yok, 1 ise elektrik var yani 5 volt demektir. Analogta ise bu 0  ile 5 volt arası değişen değerler ile verilmiştir. Arduino mimarisinde bu değişen değerler 0 - 255 arası olarak tasarlanmıştır. Yani 0 dijitaldeki 0 ile aynı iken 255 dijitaldeki 1 yani 5 volta karşılık gelmektedir. Mesela analogta 120 değeri yaklaşık yarı değer olduğundan 2,5 volta yakın bir değer olmaktadır. Diğer analog sistemlerde bu aralık değişebilir. Arduino'da bildiğimiz dijital pinlerden analog çıkış almak için belirli pinler kullanmak gerekir. Bu pinler PWM pinler olarak geçmektedir ve aşağıdaki resimde kırmızı ok ile gösterilen önünde analog sinyali temsil eden dalga (~) işareti olan pinlerdir. Yani bu pinlerden analogWrite komutu kullanılarak 0-255 arası değer yazdırılır. 


Bu şekilde analog ve dijital arasındaki farkı anlamış olduk ve dijital sinyal için digitalWrite, analog sinyal için analogWrite komutunun kullanıldığını belirtmiş olduk. Şimdi bunu bir örnek ile pekiştirelim. Aşağıda görmüş olduğunuz örneğin kodlamasını yapalım.

Yukarıdaki örnekte Arduino'nun 9 numaralı pinine bağlı bir led görülmektedir. Bu pin analog çıkış özellikli önünde ~ işareti olan pindir. Bu pinden çıkan kademeli sıfırdan 255'e sinyali led üzerinde görmekteyiz. Led önce sönük durumdan tam olarak ışık veren duruma yavaş yavaş geçmekte daha sonra bu tam ışık verme durumundan da tamamen sönük duruma yavaş yavaş geçmektedir. Bu örneği çalıştıran kodlar;

void setup()
{
pinMode(9,OUTPUT);
}
int say;
void loop()
{
  for (say=0;say<=255;say++)
  {
    analogWrite(9,say);
    delay(5);
  }
  for (say=255;say>=0;say--)
  {
    analogWrite(9,say);
    delay(5);
  }
}

void loop bölümünde yani ana programda 2 adet for döngüsü kullanılmıştır. İlk for döngüsünde 0'dan 255'e sayan ve birer birer artan döngünün say adındaki değişkeni aldığı 0-255 arası değerleri analogWrite komutu ile 9 numaralı pine göndermektedir. 9 numaralı pinde bağlı olan led ise bu değerler aracılığıyla az ışıktan çok ışığa geçerek parlaklığını artırmaktadır.
İkinci for döngüsü ise 255'ten 0'a azalarak say değişkenini analogWrite komutu ile 9 numaralı pine gönderir ve led üzerinde parlak durumdan sönük duruma geçirerek kod sonlanır. Döngüler içindeki delay(5) komutu ise 5 milisaniye gecikme yaparak led üzerindeki ışık değişimini göstermektedir.

Not: for döngülerinin ve void bölümlerinin parantezlerine dikkat edelim. Her ikisinde de { parantez işareti ile açılır, } işareti ile kapatılır. for döngüleri ve diğer kodlar void parantezleri içinde olur.

Hiç yorum yok:

Yorum Gönder