Jump to page: 1 2
Thread overview
D ile Pin Kontrolü
Feb 01, 2016
Mengu
Feb 02, 2016
zafer
Feb 04, 2016
zafer
Feb 05, 2016
zafer
Feb 08, 2016
zafer
February 01, 2016

Merhabalar.
Raspberry Pi projelerimde kullanmak için D ile pin kontrol kütüphanesi yazmaya çalıştım. Yorumlarınızı bekliyorum.
https://github.com/ozanselte/dgpio

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2016

Alıntı (ozanselte):

>

Merhabalar.
Raspberry Pi projelerimde kullanmak için D ile pin kontrol kütüphanesi yazmaya çalıştım. Yorumlarınızı bekliyorum.
https://github.com/ozanselte/dgpio

ozan

ilk gozume carpanlari soyleyeyim:

  • exceptionlarin amaci hatalari yakalayip farkli bir yol ile akisi surdurmek veya direkt akisi durdurmaktir. exception yakalayip err = true harici bir sey yapmamissin. hangi hatayi aldin? farkli hata turlerinde farkli sonuclar uretecek misin?
  • err = true/false set ediyorsun ancak herhangi bir yerde kullanmiyorsun.
  • read ve write yaptigin dosyalari birer fonksiyonda toplayip, pathlerini ve iceriklerini arguman olarak gecmen daha az is yaptirir:
void writeToFile(string filePath, string content) {
   scope(failure) { err = true; }
   File fileToWrite = File(filePath, "w");
   fileToWrite.writefln(content);
   fileToWrite.close();
}

string fileLine(string filePath) {
   scope(failure) { err = true; }
   File myFile = File(filePath, "r");
   string str = strip(myFile.readln());
   myFile.close();
   return str;
}

// kullanim

void setOutput() {
   writeToFile("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction", "out");
}

bool isOutput() {
   string direction = fileLine("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction");
   return direction == "out"
}
  • directionlara switch yapip ona gore return true veya false yapiyorsun, buna gerek yok. return direction == "out" dedigin zaman ayni seyi kisa sekilde yapmis oluyorsun.

  • her yerde "/sys/class/gpio/gpio" pathini goruyorum. bunu bir degiskene atayip onu kullanman daha temiz ve yonetilebilir olur.

  • string concatenation yerine buildPath [0] fonksiyonunu kullanmani tavsiye ederim.

kolay gelsin.

[0] https://dlang.org/phobos/std_path.html#.buildPath

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2016

Yorumlarınız için çok teşekkürler. Pini aktive etme kısmında try catch kullanmamın sebebi sbclerde pinlerin bazen zaten aktif halde geliyor oluşu. Yani aktif bir pini zaten aktivite etmeye çalışınca da sistem hata veriyor. O yüzden program aksıyor. Ya da pin deaktive edilmeden program kapanırsa tekrar başladığında zaten aktif olduğu için sistem yine hata atıyor. Aklıma bir tek catch ile hatayı yoksaymak geldi.
Mengü hocanın dediklerini de en kısa sürede düzelteceğim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2016

Güzel. :)

Notlar:

(Bunları Mengu'nun yazdıklarını okumadan yazdım.)

  • Kapsamdan çıkılırken File nesneleri otomatik olarak kapatılırlar. .close() çağrılarını kaldırabilirsin.

  • err gibi üyeler program doğruluğu açısından güvensiz kabul edilir çünkü bütünüyle kullanıcının (programcının) dikkatli davranmasına ve her işlemden sonra err'in değerini denetlemesini gerektirir. Hem de eziyet... :)

O eziyete modül sahibinin yazdığı try-catch bloklarını da ekleyince hata atma düzeneğinden yararlanmak yerine, onu külfetli biçimde kullanmış oluyoruz. Ben olsam err üyesini ve try-catch bloklarını kaldırırım. Nasıl olsa bu sınıfın kullanıcısı yukarılarda bir yerde try-catch bloğu kullanacak ve atılan hatayı yakalayacaktır...

Öyle düşününce, bizim dosya sistemiyle ilgili hataları böylece gizlemiş olmamız yanlış bile kabul edilebilir. Atılan hataları yakalamasak bizim kullanıcımız çok daha memnun olur çünkü o zaman kendileri yakalarlar ve durumdan haberdar olurlar.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2016

Bu yazıyı okumadan biraz önce Erdem'e Raspberry Pi'nin bacaklarına nasıl ulaşabilirim diye sormuştum, Biraz aşağıya inince senin measjını gördüm. Sanırım bu şans olsa gerek :) Bende böyle bir kütüphane arıyordum, umarım kısa sürede kullanılacak hele gelir.

Ali ve Mengü'ye bende katılıyorum özellikle Mengü'nün kodları kısaltan ve yönetimi kolaylaştıran yaklaşımı ile Ali'nin gerçek hatanın sınıf kullanıcısından gizlenmemesi konusu önemli,

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2016

Sınıfı düzenledim. Eve dönüş yolunda try-catch kullanmadan nasıl çözeceğim aklıma geldi. Sorunsuz çalışıyor. Tekrardan teşekkürler. PWM eklemeyi düşündüm fakat bunun için her işlemciye özel ayar yapmak gerekiyordu. Şimdilik bıraktım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 04, 2016

Merhaba Ozan,

dgpio.d dosyasını alıp projeme ekledim. Raspbery PI2 (ARMv7 Processor rev 5 (v7l)) üzerinde gdc derleyicisi ile derlemeye çalıştığımda aşağıdaki hataları alıyorum.

pi@raspberrypi ~/projects/led $ gdc main.d dgpio.d -w
dgpio.d:9: no identifier for declarator immutable
dgpio.d:9: semicolon expected to close declaration, not 'ubyte'
dgpio.d:10: enum declaration is invalid
dgpio.d:10: no identifier for declarator exportFile
dgpio.d:11: enum declaration is invalid
dgpio.d:11: no identifier for declarator unexportFile
dgpio.d:12: semicolon expected to close declaration, not 'pinFolder'
dgpio.d:12: no identifier for declarator pinFolder
dgpio.d:13: semicolon expected to close declaration, not 'directionFile'
dgpio.d:13: no identifier for declarator directionFile
dgpio.d:14: semicolon expected to close declaration, not 'valueFile'
dgpio.d:14: no identifier for declarator valueFile
dgpio.d:29: found '!' when expecting ',' following argument
dgpio.d:35: found '!' when expecting ',' following argument
dgpio.d:96: found '!' when expecting ';' following statement
dgpio.d:9: no identifier for declarator immutable
dgpio.d:9: semicolon expected to close declaration, not 'ubyte'
dgpio.d:10: enum declaration is invalid
dgpio.d:10: no identifier for declarator exportFile
dgpio.d:11: enum declaration is invalid
dgpio.d:11: no identifier for declarator unexportFile
dgpio.d:12: semicolon expected to close declaration, not 'pinFolder'
dgpio.d:12: no identifier for declarator pinFolder
dgpio.d:13: semicolon expected to close declaration, not 'directionFile'
dgpio.d:13: no identifier for declarator directionFile
dgpio.d:14: semicolon expected to close declaration, not 'valueFile'
dgpio.d:14: no identifier for declarator valueFile
dgpio.d:29: found '!' when expecting ',' following argument
dgpio.d:35: found '!' when expecting ',' following argument
dgpio.d:96: found '!' when expecting ';' following statement
pi@raspberrypi ~/projects/led $

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 04, 2016

Zafer hocam az önce Raspberry Pi 1 B ve kendi kişisel amd64 bilgisayarımde derleyip denedim bir sorun göremedim. GDC eski olabilir sanırım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 04, 2016

Zafer, o gdc çok eski olmasın? Örneğin, immutable'ı tanımıyorsa belki de D1 derleyicisidir. (?)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 05, 2016

Alıntı (acehreli):

>

Zafer, o gdc çok eski olmasın? Örneğin, immutable'ı tanımıyorsa belki de D1 derleyicisidir. (?)

Ali, sen haklısın, Ozan sende kusura bakma. Sistemde hem D1 hemde D2 için olan sürüm varmış, bende pratik olsun diye bir sembolik link (ln) oluşturmuştum. Bu linke hedef olarak D1 derleyicisini göstermişim. Hepsini kaldırdım ve gdc-4.8 sürümünü yükledim bir sorun yok :)

Raspbery PI konusunda çok bilgim yok. Örnek kodlarda Python için yazılan GPIO kütüphanesinide görüyorum. Bizim kütüphanede sanki şöyle bir karışıklık var gibi;

GPIO nesnesini kurarken ona bir pin vermek zorundayız. Daha sonrasında ise bu nesne ile işlem yaparken hep bu pin üzerinde çalışıyoruz. GPIO nesnesi farklı pinlerle çalışacak şekilde düzenlense daha iyi olmaz mı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2