Laboratorul acesta durează 2 săptămâni (s3 - s4).
În prezentarea acestui laborator mă voi baza pe următoarele afirmații:
Limbajul de programare C++ a fost dezvoltat de Bjarne Stroustrup în laboratoarele Bell în anii 1980. Inițial acest limbaj a fost denumit "C cu clase".
Pentru scopul acestui laborator priviți-l ca fiind un fel de "Java cu pointeri".
Sintaxa clasică de C funcționează perfect și în C++, clasele fiind doar o adiție.
Presupunând că știți deja C:
class Ceva
{
public:
Ceva(int var);
int a;
void f(void);
private:
int p;
protected:
int pr;
};
/*Constructor - funcționează la fel ca în Java și nu returnează niciun tip de date*/
Ceva::Ceva(int var)
{
this->a = var;
}
/*Destructor - spre deosebire de Java, unde eliberarea memoriei se face implicit, în C++ memoria trebuie eliberată manual, dar doar pentru obiectele care au fost alocate dinamic (cele crete prin pointer cu new vor fi dealocate cu delete)*/
~Ceva::Ceva(void)
{
}
/*Metodă oarecare*/
void Ceva::f(void)
{
}
Ceva x(5); /*se observă apelul înspre constructorul care ia un parametru .. în caz că mai multi constructori sunt definiți, se alege cel corespunzător în funcție de parametrii pasați*/
Ceva x = new Ceva(5); /*x reprezintă un pointer spre un obiect de tip Ceva și trebuie tratat ca atare (când nu mai e nevoie de el trebuie dealocat folosind delete)*/
class Shape
{
public:
/*metodă virtuală, ceea înseamnă aproximativ ce înseamnă abstract pentru Java*/
virtual int getArea() = 0;
/*= 0 face clasa Shape sa fie și ea clasă abstractă (interfața) și nu poate fii instanțiată*/
void setWidth(int w);
void setHeight(int h);
protected:
int width;
int height;
};
/* Clase ce moștenesc Shape */
/*se specifică public și la clasa moștenită, dacă se dorește accesarea atributelor definite în clasa moștenită*/
class Rectangle: public Shape
{
public:
int getArea();
};
class Triangle: public Shape
{
public:
int getArea();
};
Pentru un tutorial de C++ consultați fișierul.
Raspberry pi permite scrierea și compilarea aplicațiilor în C++ prin faptul ca GCC știe sa compileze C/C++ pentru procesoare ARM.
Vom folosi tot QtCreator și pe Raspberry Pi deoarece, în modul acesta evităm organizarea manuală a proiectelor și fișierelor sursă.
QtCreator și gcc se folosesc pe Raspberry Pi la fel ca pe oricare alt PC cu Linux instalat.
Spre deosebire de funcționalitățile oferite de bibliotecile standard de C/C++ și de cele oferite de Qt, Raspberry Pi oferă o bibliotecă specială folosită pentru accesul la perifericele acesteia. Numele acestei biblioteci este bcm2835 și ea trebuie adăugată în fiecare proiect care dorește să folosească ceea ce este implementat de aceasta.
Distribuția pinilor pe Raspberry Pi:
GPIO este primul și cel mai simplu periferic pe care îl vom studia.
GPIO vine de la General Purpose Input Output.
Acest periferic se ocupă cu transmiterea valorilor digitale simple la pinii plăcuței asociați cu acest periferic.
Valorile digitale cu care acesta lucrează sunt 0 și 1, ele traducându-se în 0 volți și respectiv 3.3 volți în cazul Raspberry Pi.
Pentru manipularea pinilor digitali vom folosi biblioteca bcm2835 a cărei documentație se găsește pe link.