/** Board is a class of all the boards of the same type, not a single board!
*/
class Board{
protected:
uint32_t _alive; // Responded to ping, maximum 32 devices of the same class, stored bitwise. If bit set, that device was alive after power-on.
bool _aliveReport = false;
char _boardsName[12];
BoardType _boardType; // To differentiate derived boards
...
};
....
class MotorBoard : public Board {
protected:
std::vector<uint32_t>* encoderCount; // Encoder count
std::vector<bool>* reversed; // Change rotation
std::vector<int8_t>* lastSpeed;
...
};
....
class SensorBoard : public Board {
private:
uint8_t _readingsCount; // Number of measurements, like 9 in a reflectance sensors with 9 transistors
protected:
/** Standard deviation
@param sampleCount - count.
@param sample - values.
@param averageValue - output parameter.
@return - standard deviation.*/
float stardardDeviation(uint8_t sampleCount, uint16_t sample[], float * averageValue);
...
};
Bavit ćemo se klasama:
- Board,
- SensorBoard i
- MotorBoard.
Lijevo su početni dijelovi deklaracije svake od njih.
Vidljivo je da je "Board" bazna klasa, iz koje su izvedene druge dvije.
Sve će ostale klase za senzore i efektore (motore) biti izvedene iz te 2, "MotorBoard" i "SensorBoard".
Cilj nam je napraviti funkciju za pokretanje motora određenom brzinom. Kako je ta brzina osobina svih motora, prirodno je programirati funkciju u klasi "MotorBoard", a ne u svakoj od izvedenih klasa za pojedine vrste pločica za kontrolu motora.