30 Ekim 2025 Perşembe

 



Arduino Uno kartında I2C haberleşme için kullanacağımız pinler A4 ve A5 pinleridir. A4->SDA, A5->SCL hattıdır. Atmega328 entegresinde ise I2C pinleri 27. ve 28. pindir. 27->SDA, 28->SCL hattıdır.

SDA ve SCL pinleri, kullanılan Arduino türüne göre değişiklik göstermektedir. Arduino türlerine göre SDA ve SCL pinleri aşağıdaki tabloda gösterilmiştir.


I2C haberleşmede Master ve slave cihazların aynı besleme hattına bağlanmasına gerek yoktur. Fakat iletişimin sağlanması için toprak hatlarının aynı olması gerekir.

Haberleşmenin tüm hat boyunca hatasız bir şekilde sağlanabilmesi için SDA ve SCL hatları, pull-up dirençlerle VCC hattına bağlanmalıdır.







Arduino I2C Seri Haberleşme Komutları

Arduino'nun I2C haberleşmesini yapabilmesi için kullanılması gereken komutlar vardır. Bu komutlar Arduino'nun "Wire.h" kütüphanesi içerisinde bulunmaktadır. Bu yüzden öncelikle bu kütüphaneyi projemize dâhil etmeliyiz. “Wire” kütüphanemizi kullanabilmek için öncelikle #include <Wire.h> komutu ile “wire” kütüphanemizi projemize dahil etmeliyiz.

 

1.  Wire.begin();

I2C haberleşmesini başlatan fonksiyondur. Wire.begin(); fonksiyonu setup() yapımız içerisinde yalnızca 1 kez çağrılır. Eğer fonksiyona herhangi bir parametre girilmemişse, cihazımız Master olarak çalışacak demektir. Eğer 0 ile 127 arasında bir değer girilmişse, cihazımız slave olarak çalışacak demektir ve bu değer slave cihazımızın kimliğini belirtecektir.

Wire.begin(); ……………master cihaz haberleşmesini başlatır.

Wire.begin(1); …………..slave cihaz haberleşmesini başlatır. Slave cihaz adresi = 1.

 

2.  Wire.available();

Fonksiyon hat üzerinden Arduino'ya ulaşmış veri paketlerinin sayısını döndürür. Okunmaya hazır ama okunmamış mevcut byte sayısını almak için kullanılır. Eğer fonksiyonun değeri 0'dan büyükse Arduino'ya gelen yeni veri paketi vardır. Herhangi bir parametre almaz, geriye tampon bellekteki okunmaya hazır byte sayısının integer türü değerini döndürür.

Byte_sayisi = Wire.available();


3.  Wire.beginTransmission(adres);

Master cihazın hat üzerinde bulunan slave cihazlardan hangisiyle haberleşmek istediğini belirler. Fonksiyon, parametre olarak haberleşmeye başlayacağı slave cihazın adresini alır.

adres: Veri gönderilecek slave cihazın adresi.

 

4.  Wire.endTransmission();

Wire.beginTransmission(); fonksiyonu ile başlatılan veri iletimini sonlandırmak için kullanılır. Herhangi bir parametre almaz ve geriye değer döndürmez.

 

5.  Wire.read();

Veri hattından gelen verinin okunmasını sağlar. Herhangi bir parametre almaz. Geriye alınan 1 byte değerindeki veriyi döndürür. Eğer bir byte değerinden fazla veri alınmış ise, bir döngü yardımı ile alınan veriler diziye aktarılabilir. Hem Master cihazda hem de Slave cihazda veri okumak için kullanılır.

Örneğin; I2C iletişimde Master Arduino cihazına slave bir cihazdan veri geldiğinde bu veri önce master Arduino cihazının buffer(tampon) ara belleğinde depolanır. Bu bellek 32 bayttır ve veri Wire.read() komutuyla bayt bayt okunarak herhangi bir değişkene atanır.

 

6.  Wire.write();

Kısaca veri yollamak için kullanılır. Master ve Slave cihaz için veri gönderme fonksiyonudur. Wire.write() fonksiyonu master cihazdan slave cihaza ya da slave cihazdan master cihaza veri göndermek için kullanılır. 1 byte değerindeki veri, string ya da byte dizisi gönderilebilir.

Wire.write(value);

Wire.write(string);

Wire.write(dizi, uzunluk);

value   : 1 byte değerindeki veri (byte)

string    : metin türünden karakter dizisi

dizi        : gönderilecek byte dizisi

uzunluk: gönderilecek byte dizisi uzunluğu


Örnek:



7.  Wire.requestFrom(adres, miktar, durak);

Master cihaz tarafından, slave cihazdan byte isteğinde bulunmak için kullanılmaktadır. Master tarafında kullanılan bu fonksiyon ile slave cihazdan veri istenir. Daha sonra bu baytları toplamak için “Available()” ve “read()” işlevleri kullanılabilir.

adres   : Veri istenecek slave cihazın adresini belirler (7 bitlik cihaz adresi).

miktar  : Slave cihazdan kaç byte'lık veri beklendiğini belirler. Talep edilen byte sayısıdır.

durak   : İstekten sonra veri yolunun durumunu belirler (boolean).

·         True ise istekten sonra veri yolu serbest bırakılarak stop komutu gönderilir,

·         False ise veri yolu açık tutularak master cihazın başka bir slave cihaza istekte bulunması engellenir.

Geriye byte cinsinden Slave cihazdan gönderilen bayte sayısını döndürür.

 

Örnek:

Wire.requestFrom(1,2);    // 1 numaralı slave cihaza 2 byte okuma isteği gönder.

 

8.  Wire.onRequest(istek_fonksiyonu);

Slave tarafından kullanılan bu fonksiyon, master cihazdan veri isteği geldiğinde slave cihazda çalıştırılacak fonksiyonu belirler.

istek_fonksiyonu: Master cihaz Slave cihazdan veri talep ettiğinde, slave cihazda çalışacak olan fonksiyon. Bu fonksiyonun parametre almasına gerek yoktur. Geriye değer döndürmez.

void istek_fonksiyonu ()

{

       komutlar…

}

 

9.  Wire.onReceive(veri_fonksiyonu);

Slave olarak tanımlanmış cihaza veri geldiğinde, çalışacak fonksiyonu belirleyen komuttur. Bu fonksiyonun parametre alması gerekmektedir.

veri_fonksiyonu: Master cihazdan veri geldiğinde slave cihazda çalışacak fonksiyon. Bu fonksiyon tanımlandığında aşağıdaki şekilde bir parametre almalıdır. Geriye değer döndürmez.

void veri_fonksiyonu (int x)

{

       komutlar…

}




_____________________________________________________________________________________________________________________________________________________


0 comments:

Yorum Gönder

Arduino Eğitimi Konu - 7

Arduino Eğitimi Konu - 10

Toplam Sayfa Görüntüleme Sayısı

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com