Własna biblioteka w Arduino

Wpis w kategorii [ Arduino ]

Jeśli jesteś tutaj nowy, możesz rozpocząć subskrypcję mojego kanału RSS. Dzięki temu nie przegapisz nowych wpisów. Dziękuję za wizytę!

BibliotekaProgramowanie w środowisku Arduino jest bardzo proste w dużej mierze za sprawą dostępności przeróżnych bibliotek obsługujących zewnętrzne urządzenia. Są to m.in. biblioteki obsługujące wyświetlacze LCD (znakowe, graficzne), układy zegarowe, zewnętrzne pamięci EEPROM, akcelerometry, GPS, klawiaturę PS2, myszkę PS2 itd. Wymieniać można naprawdę długo.

Dzięki temu, że każdy może stworzyć własną bibliotekę i opublikować swoje dzieło w internecie, osoba programująca w Arduino ma ułatwione zadanie. Dochodzi do sytuacji, w których uruchomienie i obsługa skomplikowanego urządzenia odbywa się w kilku liniach kodu.

Warto wiedzieć jak zorganizowane są biblioteki w Arduino i w jaki sposób zbudować własną. A jest to naprawdę proste.

Nadajnik kodu Morse’a na Arduino

Naszą wędrówkę w świat bibliotek Arduino rozpoczniemy od utworzenia projektu, który będzie wysyłał sygnał SOS w kodzie Morse’a na diodę podłączoną do pinu 13.

Kod nadajnika Morse’a

int pin = 13;
 
void setup()
{
  pinMode(pin, OUTPUT);
}
 
void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  delay(3000);
}
 
void dot()
{
  digitalWrite(pin, HIGH);
  delay(250);
  digitalWrite(pin, LOW);
  delay(250);
}
 
void dash()
{
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(250);
}

Powyższy kod składa się z kilku różnych części, które umieścimy w naszej bibliotece. Po pierwsze, mamy dwie funkcje: dot(), która odpowiada za wysłanie kropki oraz dash(), która odpowiada za wysłanie kreski. Po za tym, w projekcie korzystamy ze zmiennej ledPin definiującej pin, do którego podłączona jest dioda oraz funkcji pinMode, która ustawia ten pin w tryb wyjściowy.

Zamiana projektu w bibliotekę

Biblioteka, zawsze składa się z co najmniej dwóch plików. Musisz utworzyć plik nagłówkowy (np. morse.h) oraz plik źródłowy (np. morse.cpp). Pliki możesz utworzyć w dowolnym edytorze tekstowym. Najlepiej jednak, jeśli będzie to edytor specjalistyczny z możliwością kolorowania składni języka C++ np. Notepad++. Wracając do plików – plik nagłówkowy zawiera wszystkie definicje biblioteki, czyli spis wszystkiego co jest w niej zawarte. Plik źródłowy zawiera właściwy kod.

Przyjrzyjmy się więc plikowi nagłówkowemu.

class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};

Plik nagłówkowy składa się z deklaracji wszystkich funkcji zastosowanych w bibliotece oraz deklaracji potrzebnych zmiennych. Całość znajduje się wewnątrz klasy (w naszym przypadku jest to klasa o nazwie Morse).

Klasa jest zbiorem zmiennych i funkcji, które na nich operują. Elementy klasy mogą być zdefiniowane jako publiczne (public), co oznacza, że dostęp do nich nie jest niczym ograniczony oraz jako prywatne (private), co oznacza, że dostęp do nich mają tylko inne elementy tej klasy (np. zmiennej zdefiniowanej jako prywatna nie będziesz mógł odczytać w programie wprost; będziesz mógł to zrobić jedynie, jeśli istnieje jakaś funkcja publiczna, której zadaniem jest zwrócenie wartości tej zmiennej). Każda klasa posiada specyficzną funkcję zwaną konstruktorem, która jest wykorzystywana przy tworzeniu instancji klasy. Konstruktor ma tą samą nazwę, co klasa i nie zwraca żadnej wartości.

Plik nagłówkowy uzupełnimy jeszcze o dołączenie pliku dającego nam dostęp do standardowych typów i stałych stosowanych przez Arduino (#include "WProgram.h") oraz zabezpieczenie przed kilkukrotnym dołączeniem naszego pliku nagłówkowego do projektu (#ifndef Morse_h).

No i przydałby się mały komentarz na temat tego do czego dany plik służy, kilka słów o autorze itp.

Ostatecznie mamy:

/*
  Morse.h - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/
#ifndef Morse_h
#define Morse_h
 
#include "WProgram.h"
 
class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};
 
#endif

Czas na plik źródłowy morse.cpp

Na początek dołączmy plik WProgram.h oraz nasz plik nagłówkowy.

#include "WProgram.h"
#include "Morse.h"

Teraz zdefiniujmy konstruktor. Dla przypomnienia, jest to funkcja wywoływana w momencie utworzenia obiektu z naszej klasy (czyli w momencie powołania jej do życia). W naszym przypadku użytkownik definiuje na którym wyjściu ma się pojawić sygnał. Ustawiamy więc ten pin jako wyjściowy i zapamiętujemy w wewnętrznej zmiennej jego numer.

Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

Zapis Morse:: oznacza, że funkcja której nazwa pojawia się za tym zapisem, jest częścią klasy Morse. Podobne zapis zobaczysz za chwilę dla pozostałych funkcji klasy.  A oto one:

void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}
 
void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

A oto wynikowy kod pliku źródłowego morse.cpp

/*
  Morse.cpp - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/
 
#include "WProgram.h"
#include "Morse.h"
 
Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}
 
void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}
 
void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

Masz już wszystko czego potrzebujesz. Sprawdźmy nową bibliotekę w działaniu.

Biblioteka w działaniu

Najpierw stwórz katalog Morse w podkatalogu libraries Twojego Arduino. Do utworzonego katalogu skopiuj pliki morse.h oraz morse.cpp. Teraz możesz już uruchomić środowisko programistyczne Arduino. Gdy otworzysz menu Sketch > Import Library, ujrzysz pozycję Morse.

Zmieńmy zatem nasz stary kod w nowy, korzystający z biblioteki.

#include <Morse.h>
 
Morse morse(13);
 
void setup()
{
}
 
void loop()
{
  morse.dot(); morse.dot(); morse.dot();
  morse.dash(); morse.dash(); morse.dash();
  morse.dot(); morse.dot(); morse.dot();
  delay(3000);
}

W nowym kodzie przede wszystkim musimy dołączyć naszą bibliotekę, aby jej funkcjonalność była dla nas dostępna (#include "morse.h"). Druga rzecz, to wywołanie instancji naszej klasy (Morse morse(13);). Instancja naszej klasy będzie miała w tym przypadku nazwę morse.

W porównaniu do poprzedniego kodu, tym razem, aby wysłać kropkę lub kreskę, musimy wywołać funkcję dot() lub dash() z odpowiednim przedrostkiem. Tym przedrostkiem będzie nazwa naszej instancji i kropka.

Zauważ, że możesz bez problemu stworzyć kilka instancji klasy Morse, a każda z nich będzie działała niezależnie (sygnały wyjściowe pojawią się na niezależnych wyjściach).

Morse morse(13);
Morse morse2(12);

Teraz wywołując morse2.dot() sygnał kropki pojawi się na wyjściu 12.

Słowa kluczowe

Jeśli już uruchomiłeś nowy kod, to zapewne zauważyłeś, że żadna z naszych funkcji nie została rozpoznana i zaznaczona innym kolorem przez środowisko. Niestety Arduino nie potrafi samo rozpoznać składników naszej biblioteki. Musisz mu w tym pomóc. By to zrobić, utwórz plik o nazwie keywords.txt w katalogu Morse. Jego zawartość:

Morse	KEYWORD1
dash	KEYWORD2
dot	KEYWORD2

Każda linia składa się ze słowa kluczowego, tabulatora (nie spacji) oraz rodzaju słowa kluczowego. Klasy powinny być oznaczone na pomarańczowo (KEYWORD1), a funkcje na brązowo (KEYWORD2). Aby wprowadzone zmiany zostały uwzględnione, musisz zrestartować środowisko Arduino.

Przykłady w bibliotece

Dobrą praktyką jest umieszczanie przykładowego kodu w nowo utworzonej bibliotece. Umożliwi to osobom zapoznającym się z jej możliwościami szybsze zrozumienie zasad jej funkcjonowania.

Aby to zrobić, utwórz katalog o nazwie examples w katalogu Morse i przenieś do niego katalog z plikiem projektu, który utworzyliśmy wcześniej. Gdy uruchomisz ponownie środowisko Arduino, w menu File > Sketchbook > Examples ujrzysz pozycję Library-Morse. Będzie to Twój przykładowy projekt. Warto rozszerzyć go o jakieś komentarze, aby jeszcze bardziej ułatwić zrozumienie jego działania innym osobom.

Biblioteka Morse

To wszystko, poniżej plik z całą biblioteką:

Morse.zip

Podsumowanie

Jak widzisz, utworzenie własnej biblioteki do Arduino jest zadaniem dość prostym. Mam nadzieję, że wiedza zawarta w artykule okaże się dla Ciebie przydatna.

A może napisałeś już jakieś biblioteki do Arduino? Jeśli tak, napisz o tym w komentarzach. Pochwal się również, jeśli zachęcony artykułem, stworzysz coś własnego.

Artykuł powstał na podstawie: http://arduino.cc/en/Hacking/LibraryTutorial

Oceń ten wpis:
1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek (głosów: 2, średnia ocen: 5,00)
Loading ... Loading ...
Wyświetleń: 4 031

Podobne artykuły

Możesz śledzić komentarze do tego wpisu poprzez kanał RSS 2.0. Możesz także dodać własny komentarz, lub trackback z własnej strony WWW.

Dodaj komentarz