Arduino/ixt-Extra-Implemple Kütüphaneleri Aynı

semaver

New member


  1. Arduino/ixt-Extra-Implemple Kütüphaneleri Aynı

Blogun bu özel baskısı Arduino kütüphaneleri konusundan bahsediyor. Okuyucular kendi kütüphanelerini oluşturmayı öğrenirler. C ++ hakkında küçük bir temel bilgiyle, bunların hiçbiri bir sorun değildir.



IoT/Arduino serisinin neredeyse tüm bölümlerinde sunulan projelerde kütüphaneler kullandık. Motor kontrolleri, iletişim veya sensörlere erişim için kitaplıklar, geliştiricilerin temel unsurlara odaklanmasını sağlar. Jenerik arılar cephesinin arkasındaki detayların çoğunu gizleyin.

Ancak, sadece bazı kütüphanelerin kendilerini veya tasarımlarını düşündük. Bazen size veya diğer kütüphaneyi sağlamak mantıklı olacaktır. Bu cadı veya kara büyü değil. Bu makale, kütüphanelerinizin Arduino için nasıl bir araya getirilebileceğini göstermeyi amaçlamaktadır.

En azından C ++ ile ilgili temel bilgi, özellikle kütüphaneler C ve C ++ 'a dayandığı için temel bir gereksinim olarak talep edilir.

Örnek


Örneğin, 3 LED'den oluşan bir elektronik küp uygulamak istiyorum. Doğranmış numara {1, 2, 3, 4, 5, 6} Küpü üç adet ikili sayı olarak veya kalabalığın bir unsuru olarak gösterir {{001, 010, 011, 100, 101, 110}.

Bir kütüphane yalnızca yeniden kullanılabilir işlevler sunarsa mantıklıdır. Bir küp oyunlar için bir temel olarak kullanılabildiğinden, bir kütüphane olarak uygulamasını sunmak yararlı görünmektedir.





3 led ile elektronik küp



3 led ile elektronik küp



Sınıf Zar Aşağıdaki listede küp temsil eder. Üç üreticinin üç parametresi dijital LED bağlantılarına karşılık gelir. LED4 2 için2-Biner değerinin atışı, 2 için LED21-VELED1 2 için0-Ste.



Başlık dosyasındaki sınıf sözleşmesi Dadi.H Bir #ifndef-Bu dosyanın çoklu eklenmesini önlemek için entegre yönerge.

Genel yöntem Rulo () gerçek zarları temsil eder. Özel yöntem Kontrollü (int LED, bool açık) İkinci parametrenin değerine dayanarak birinci parametrede belirtilen LED'den geçer. Sadece yöntem bunları kullanır Rulo () A. İşte tam kod:

#ifndef Dice_h
#define Dice_h
// Simple class that defines a binary dice using 3 Bits
// with each of the Bits representing a digit of the binary number
// with a decimal value from 1..6
class Dice {
public:
Dice(int led4, int led2, int led1); // initialized with Pins
void roll(); // roll the dice
private:
int _led4; // LED representing bit 2
int _led2; // LED representing bit 1
int _led1; // LED representing bit 0
void controlLED(int led, bool on); // internal method to turn LED on/off
};
#endif


Dosya Dadi.cpp Yukarıdaki sınıfın uygulanmasını içerir. Üreticide sınıf, LED bağlantı turlarını hatırlar (_LED4,, _LED2,, _LED1). Pimler bitti Pinmode () Çıktı pimi olarak ilan edildi. Yöntem Rastgele tohumlar () Rastgele jeneratörü başlatmaya hizmet eder. Yoluyla Analogread (A0) İlk tohum değerine dönüşür.

Uygulama yönteminde Rulo () Rastgele jeneratörü arayarak bırakıyoruz Rastgele () 1'den 6'ya kadar bir sayı oluşturun. Yöntem basit aritmetik yoluyla hesaplanır Rulo () Karşılık gelen ikili sayının ayrı yerleri ve sonuç olarak ilgili LED'leri hareket ettirir.

Çıkışın amaçları doğrultusunda, .cpp-Dosya Ayıklamak tanımlamak. Bu anlaşmalarda gerçekleşir

#ifdef DEBUG
...
#endif

Seri monitör aracılığıyla başka bir baskı.

#include <Dice.h>
#include <Arduino.h>
#define DEBUG
Dice::Dice(int led4, int led2, int led1) {
_led4 = led4; // LED that represents MSBit
_led2 = led2; // LED that represents medium Bit
_led1 = led1; // LED that represents LSBit
pinMode(_led4, OUTPUT); // all pins are OUTPUT pins
pinMode(_led2, OUTPUT);
pinMode(_led1, OUTPUT);
randomSeed(analogRead(A0)); // random value from analog A0 for
// initial seed
}

void Dice::roll() {
int result = random(1,7); // get a random number from 1..6

#ifdef DEBUG
Serial.print("dice value = ");
Serial.println(result);
#endif

controlLED(_led4, (1 == result / 4 )); // simple arithmetic
#ifdef DEBUG
Serial.print("LED4 = ");
Serial.println(1 == result / 4);
#endif

result = result % 4;
controlLED(_led2, (1 == result / 2));

#ifdef DEBUG
Serial.print("LED2 = ");
Serial.println(1 == result / 2);
#endif

result = result % 2;
controlLED(_led1, 1 == result);

#ifdef DEBUG
Serial.print("LED1 = ");
Serial.println(1 == result);
#endif
}

void Dice::controlLED(int led, bool on) {
if (on)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
}

Arduino eskiz örneği


Bu kütüphanenin kullandığı basit bir Arduino örnek programı aşağıdaki gibi görünebilir:

#include "Dice.h"
// Dice with LEDs on digital Pins 9, 10, 11
Dice myDice(9,10,11);

void setup() {
Serial.begin(9600);
}

void loop() {
myDice.roll(); // roll the dice
delay(2000);
}


Her şeyden önce, kitapçı başlık dosyası dahil edilmelidir. Tek anlaşma, dijital bağlantı turları 9, 10 ve 11'de LED'li bir zar örneğidir. Döngüde (döngü) her iki saniyede bir başlatılır: Mydice.roll () .

Kütüphaneler için dizinin yapısı


Tüm örnekler, kütüphanenin bir alt dizininde anlaşma ile gönderilmelidir. ./xamples konum. Herhangi bir örnek xyz.ino Bir kez daha aynı adı taşıyan bir alt dizinde: ./xyz. Eskiz'e dicetest.ino adını verdim, bu yüzden alt dizinde./Örnekler/Dictatest görünmeli.

Kütüphanenin uygulama dosyaları bu kütüphanenin temel dizininde veya alt dizininde olabilir ./Src.

Meta veriler


Uygulama dosyalarına ek olarak, kütüphanenin ana dizininde olması gereken meta bilgileri olan dosyalar vardır. Genel olarak, dizin yapısı örnek için izliyor gibi görünüyor:





Mac OS X'teki Örnek Kitapçanın Dizini



Mac OS X'teki Örnek Kitapçanın Dizini



.Txt dosyasının anahtar kelimeleri, sözdiziminin renkli tanımlaması gereken kütüphaneden anahtar kelimelerin bir listesini içerir. Veri özniteliği programcılarının türleri Anahtar Kelimeler1Yöntemler Anahtar Kelimeler2:

# Schlüsselwörter für Datentypen:
Dice KEYWORD1
# Schlüsselwörter für Methoden: KEYWORD2
roll KEYWORD2

Dosya Kütüphane.json Bir JSON veri yapısı kullanarak kütüphaneyi açıklar:

{
"name": "DiceLibrary",
"frameworks": "Arduino",
"keywords": "dice, LED",
"description": "Implement a binary dice",
"authors":
[
{
"name": "Michael.Stal",
"email": "[email protected]",
"url": "http://www.stal.de",
"maintainer": true
},
{
"name": "Hans Hase"
},
{
"name": "Donald Duck",
"email": "[email protected]"
}
],
"repository":
{
"type": "git",
"url": "https://github.com/ms1963/DiceLibArduino"
}
}

Dosya da var Kütüphane.PropertiesKütüphane hakkında sürümü veya desteklenen Arduino platformları gibi bilgi içerir:

name=DiceLibrary
version=1.0.0
author=Michael Stal
maintainer=Michael Stal
sentence=Library to use three LEDs as a binary dice.
paragraph=
category=Sensors
url=www.stal.de
architectures=*

Dosyada Readme.md İşlevinize ve amacınıza genel bir bakış gibi kütüphane hakkında bilgi yazın:

# DiceLibArduino
Just an example of what it takes to provide an Arduino library.
This is not meant to be a serious implementation.

Dosyada Lisans Açık kaynak lisansının açıklaması, kütüphanenin şunları yapması gerektiğine göre gelir:

The MIT License (MIT)
Copyright (c) 2016 Michael Stal

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Github'da depo


Tüm Arduino kütüphaneleri genellikle GitHub'da olduğundan, kendi GitHub hesaplarını oluşturmanız ve her kütüphaneyi kamuya açık (veya özel) bir depo olarak sağlamak tavsiye edilir. Bu nedenle sonuç, örnek için kullanıcı gözlüklerinden aşağıdaki gibi görünür:






Ekstra -lat - Kütüphaneleri tek başına uygular





Bu makalede geliştirilen kütüphane GitHub'da https://github.com/ms1963/icelibarduino adresinden ulaşılabilir.

Projelerinizde bir kütüphane kullanmak istiyorsanız, alın .zip-Github sayfasından file ve menü aracılığıyla bunları Arduino fikrine aktarın Eskiz | Kütüphaneyi ekleyin | .Zip kütüphanesini ekleyin … Böylece örnek projesini bulabilirsiniz. Dosya | Örnekler | Dikte Sunulan örnek taslak Dik.

Çözüm


Bu mini klasör, Arduino kitapçılarının kendi kontrolü ile ilgiliydi. Sadece birçok insanın taahhüdü ile Arduino geliştiricileri için rahat zorlu ekosistemde hayat yaratan yapay açık kaynak olarak çok çeşitli kütüphaneler var. C ++ ile temas kurmaktan korkmuyorsanız, kitapçılarınızı deneyin. Topluluk onlara teşekkür ediyor.

Kütüphaneler dünyasına yapılan bu kısa yolculuktan sonra, IoT/Arduino serisine her zamanki gibi devam ediyorum.




()
 
Üst