Arduino DHT11 Kütüphane İncelemesi -2- dht.h Dosyası

İşin donanım kısmını bitirdiğimize göre kütüphaneyi enine boyuna inceleyebiliriz. Bunun için Arduino için en sık kullanılan kütüphane olan Adafruit’in DHT kütüphanesini kullanacağım. Donanımı ve yazılımı bildiğime göre istersem ben de şimdi bir kütüphane yazabilirim. Ama her zaman hazır yazılmış kütüphaneleri alıp incelemekte fayda vardır. Sizin gözünüzden kaçan noktaları o kütüphanelerde görebilirsiniz. Adafruit’in DHT kütüphanesini aşağıdaki bağlantıdan indirip hep beraber inceleyelim.

https://github.com/adafruit/DHT-sensor-library

Dosyayı indirip çıkardığımızda klasörün içinde farklı farklı dosyaların olduğunu görürüz. Burada bizi ilgilendiren DHT.h ve DHT.cpp dosyalarıdır. Diğerlerini dikkate almadan bu iki dosyayı inceleyelim. Kütüphane incelemesine her zaman .h uzantılı dosyadan başlamamız gereklidir. Kütüphane dosyaları yeterince uzun olduğu için olduğu gibi buraya kopyalamayacağım. Burada yazdığım kodları sizin kod üzerinde takip etmeniz gereklidir. O yüzden Notepad++ veya Sublime Text ile bu kodları açıp ekranın bir köşesinde takip etmelisiniz.

Temel C programlama derslerinde söylediğimiz üzere tekrar tanımın önüne geçmek için böyle bir kod bloku kullanılmaktadır. Dosyanın aynı anlattığımız gibi #endif ile bittiğini görmekteyiz. Siz de kütüphane başlık dosyası oluştururken #ifndef DOSYAADI_H şeklinde başlayan bir blok tanımlamanız gereklidir.

Burada kütüphanede hata ayıklama fonksiyonunun da olduğunu görmekteyiz. Karşımıza gelen hazır kodları kullansaydık bu hata ayıklamadan pek de haberimiz olmayacaktı. Çünkü bu hata ayıklama özelliğini ancak .h uzantılı dosyadaki kodu değiştirerek kullanabiliyoruz. Bunun gibi pek çok kütüphane başlık dosyalarını ayarlamak için açıp incelememiz gerekebilir. Normalde Arduino’da eklediğimizde bitse de gerçek programcılıkta belki .cpp uzantılı dosya ile işimiz olmasa dahil .h uzantılı dosyayı çok iyi bilmemiz gerekir. C dilinde çalışırken de pek çok zaman konfigürasyon yapmak için uğrarız. Arduino C++’nın sınıf yapısını kullandığı için buna çok gerek kalmamaktadır.

Burada değer //#define DHT_DEBUG satırındaki komutu kaldırırsak #ifdef DHT_DEBUG bloku içinde yer alan komutu çalıştırmış oluruz. Burada DEBUG_PRINT() ve DEBUG_PRINTLN() adında makrolar bulunmaktadır. Bu makroları .cpp dosyasında ilgili yerlerde kullandıklarını görmekteyiz. Yani bu hata ayıklama mesajlarını program içinde bize mesaj vermek için önceden hazırlamışlar. Burada #define DEBUG_PRINTER Serial tanımı ile istersek print() ve println() fonksiyonlarını kullanan farklı birimleri seçebiliriz. Örneğin Serial yerine SPI veya wire olabilir. Bu sizin seçiminize bırakılmıştır.

Bu kütüphane sadece DHT11 algılayıcısı için yazılmadığı için DHT’yi tanımlayacağımız sabitler burada belirlenmiştir. Biz tanımlarda DHT11, DHT12, DHT22 şeklinde yazmaktayız bunu program ise 11, 12, 22 olarak algılamaktadır.

Burada class anahtar kelimesini görmekteyiz. Aslında Arduino’nun C++’yı genelde sadece sınıflar için kullandığını görürüz. Sınıfların olması kafanızı asla karıştırmasın. C programcısıysanız sınıfları fonksiyonlu yapılar olarak düşünebilirsiniz. public yapı dışından erişilebilen kısım private ise yapı fonksiyonlarının erişebildiği kısım olarak düşünülebilir. Duruma böyle baktığınızda oldukça basit olduğunu göreceksiniz.

public kısmına baktığımızda fonksiyonlar listesinden ibaret olduğunu görebiliriz. Normalde biz C dilinde fonksiyonları açık bir şekilde listelerken bunlar bir sınıfın içerisinde tanımlamıştır. Burada DHT’nin tanım fonksiyonu olup tanımlama sırasında çalıştırılacağını görüyoruz. Burada pin, type ve count adında üç değer almakta. pin ve type verilerini biz versek de count değişkenine ilk değer 6 olarak verilmiştir.

Fonsiyon adlarına baktığımızda begin, readTemperature, concertCtoF, convertFtoC, computeHeatIndex, readHumidity ve read fonksiyonlarının olduğunu görmekteyiz. Bunun çevirisini yaptığımızda az çok ne işe yaradığını anlasak da .cpp kodunu incelemeden kesin bir şey söylememiz zordur.

Burada özel verilerin olduğunu görmekteyiz. Açıklamalar kısmı hariç elimizde çok fazla ipucu yok. Bunların nasıl kullanıldığını yukarıdaki fonksiyonların içerisinde göreceğiz.

Bu sınıf kesmeleri kilitleme görevini üstlenmektedir. Uygulanışını .cpp dosyası içerisinde göreceğiz. Burada ayrıntıya girmemiz çok da mümkün değil.

 

.h dosyasını incelediğimize göre bir sonraki yazıda .cpp dosyasını inceleyeceğiz. .h ve .cpp dosyaları birbirinden bağımsız incelenemez. O yüzden de bir yandan .h dosyasına bakmanızı tanımlanan verilerin tiplerini, tanımlanan fonksiyonların döndürdüğü değeri ve diğer bilgileri kontrol etmenizi tavsiye ediyorum.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.