Arduino için modüler kod nasıl yazılır?

Ayrı modülleri olan bir program oluşturmak istiyorum, bu Arduino IDE kullanarak mümkün mü?

2

5 cevap

Arduino için kendi kitaplıklarınızı oluşturabilirken, yeniden kullanılabilir kod yapmanın basit bir yolu, yeniden kullanılabilir hale getirmek istediğiniz kodu içeren bir başlık (.h) dosyası oluşturmaktır.

Spesifik olarak, Arduino IDE'de bir adla yeni bir sekme oluşturun foo .h ve ana sekmenizde kodunuzun en üstünde #include "foo.h" ekleyin. Bunun anlamı, kodu foo.h kodunun oluşturma işlemi . Basit bir şekilde yürütülürken, daha karmaşık kodların düzenlenmesine yardımcı olur ve sizin durumunuzda kodu yeniden kullanmanıza yardımcı olur.

"Normal Arduino kod dosyalarını (görünür uzantı yok), C dosyalarını (.c uzantısı), C ++ dosyalarını (.cpp) veya başlık dosyalarını (.h)" alternatif olarak kullanabilirsiniz. "

Ve size yardımcı olacak bir ek not - delay() veya Serial gibi bazı Arduino komutlarına ve işlevlerine erişiminiz olmadıkça, üstbilgi dosyaları kod> #include "Arduino.h" . Ancak, IDE sürümleri 1.0'dan küçükse, #include "WProgram.h" komutunu kullanın. Bu size bu işlevlere erişmenizi sağlayacaktır.

2
katma

Arduino skeçleri Kütüphaneleri içerebilir (bkz. https://www.arduino.cc/en/Guide/Libraries ).

Arduino IDE ile çalışmak için, böyle bir kütüphanenin belirli bir klasör yapısına ve adlandırma kuralına (yukarıdaki kılavuzda açıklandığı gibi) uyması gerekir.

Bunun dışında, başka bir dilde modüler kodlara benzer. Arduino kütüphanelerinde kanonik dil C ++.

Düzenli bir Arduino IDE kurulumu zaten çok sayıda kütüphane ile önceden kurulduğundan, bir göz atabilir ve oradan gidebilirsiniz.

Örnek çizimlere bakmanızı öneririz ("Örnekler" menü seçeneğinden). Çizimin en üstünde bir #include ifadesi gördüğünüzde, iç işler hakkında daha iyi bir anlayış kazanmak için bir sonraki noktaya bakmanız gereken bir ipucu var.

2
katma

Çizim kodu, yeni sekme (dosya) dosya adı uzantısı olmadan veya .ino ( kaynak . Arduino IDE'nin bu dosyaları oluşturma işlemi için birleştirdiği için #include 'a gerek yoktur.

Uygun bir modülerleştirme için bir Kütüphane oluşturun veya modüller olarak .h/.c/.cpp kullanımı hakkında daha fazla bilgi için yukarıdaki bağlantıya bakın.

0
katma

Ayrılmış modüllere sahip bir program oluşturmak istiyorum, bu Arduino IDE kullanarak mümkün mü?

cevap kodunuza göre değişir.

Modüler kod yazmak çoğunlukla bir düşünce sürecidir:

1) kodunuzu bir mantık modeline göre tasarlamanız gerekir: bir pim 2'yi ayarlamak yerine, bir pim ayarlamak için kodunuzu tasarlayın, bu kodu kullanarak LED_PIN olarak belirtilen bir pini ayarlayın ve sonra pim 2 olacak şekilde LED_PIN'i tanımlayın. Bu yaklaşımla, aynı kodu kullanmak için yeni projenizde LED_PIN'i yeniden tanımlayabilirsiniz.

2) kodunuzu yukarıdan aşağıya doğru tasarlamanız gerekir: kodunuzu hemen yazmaya başlamak yerine, mantık bloklarına ayırın, her bloğun girişini ve çıktısını tasarlayın, böylece birlikte çalışın. Bu, modüler kod yazmanın en zor kısmı.

bundan sonra, kodu .c/.h dosyalarına ayırmak bir parça kekdir.

0
katma

Şey .... Cevaplar müdahale ediyor ama JuanV'nin "ayrı modüller" dediğinde neye benzediğine bağlı ... Benim için, bir "eski zamanlayıcı yazılım dev", "ayrılmış modülleri" olarak ben, merkezi bir kod bloğu (bir özet) ve otomatik olarak kısaca "takılı" olan kullanıcı indirme modülünü oluşturmak anlamına gelir, özelliği genişletir. Sisteminize eklediğiniz ve tüm yazılımlar için özellik ekleyen bir yazıcı sürücüsü gibi. Geçmişimdeki devine baktığımda, bunu Arduino'da düşünürken bazı problemler yaşadığımı itiraf etmeliyim. Eğer arıyorsanız, çeşitli sorunlar hakkında düşünmelisiniz:

1) nasıl güncellenir? Belki bir Android Uygulaması kodları Web'den alıp bu verileri Bluetooth üzerinden Arduino'ya gönderir. Ayrıca Arduino'da bir Wifi arayüzü eklemeyi düşünebilirsiniz.

2) yeni kod parçasını nerede saklayacağınız ... Flash'ta "anında" yazabiliyor gibi görünüyorsunuz ama karmaşık görünüyor

Bu ikinci noktadan dolayı, belki de en kolay yol, verileri "yorumlayabilecek" (böylece bir tür küçük betiği okuyacak) ve daha sonra verileri gönderecek bir özet oluşturmaktır. Arduino ile yapılan CNC'ye bir göz atmanızı öneriyorum. Çoğu durumda bir GCode yorumlayıcısı kullanırlar. GCode, CNC makinesi için bir tanımlayıcı bir lanet. Bu nedenle tercüman kodu okuyor ve koda göre, makineye "siparişleri" gönder. Belki böyle bir şey iyi bir başlangıç ​​noktası olur.

Öte yandan, eğer "modüler yaklaşım" dediğiniz şey, sadece lib'i inşa etmenin ve onları yeniden kullanmanın bir yoluysa, Lord Gonk'un cevabı budur :)

0
katma