Классы и объекты в Arduino

Краткий обзор возможностей объектно-ориентированного программирования в Arduino для начинающих.

Объектно-ориентированное программирование (ООП) основано на работе с объектами,
а не просто с данными, фунциями и переменными.

Каждый объект может включать в себя все необходимые функции, процедуры и параметры.
Такой подход облегчает написание, усовершенствование, поиск ошибок и правку программ.

Рассмотрим использование ООП на примере использования датчика влажности почвы для работы
с проектом “Автоматический полив растений”.

Для работы с датчиком влажности, создадим объект, который будет иметь все необходимые нам
функции и параметры внутри себя.

 

Прежде чем создать объект, необходимо обозначить новый класс для объекта.

class Sensor   // название класса
{
  public:
  int pin;  // данные - пин подключения датчика, по которому получаем значение датчика
  int data; // данные - значение датчика
    
};

 

В самом простом варианте  наш объект содержит номер пина для считывания значений и значение датчика.

 

Теперь для считывания или указания этих данных можно будет использовать такие записи:

  •      название_объекта.pin = … ;      // присвоить значение для pin
  •      … = название_объекта.data ;    // считать значение data

 

 

Чтобы объект мог действовать, а не только хранить в себе данные, добавим в описание класса некоторые функции.

class Sensor   // название класса
{
  public:
  int pin;  
  int data; 
  
  void read()  // добавляем функцию read
       {
       data=analogRead(pin);
       } 
};

 

Класс нового типа объектов задан. Теперь можно создать наш собственный объект нового класса.

Sensor water;

Мы создали объект water класса Sensor.
Теперь зададим номер пина, к которому подключен наш сенсор.

water.pin=A0;

A0 – константа, которая содержит порядковый номер пина, соответствующий аналоговому пину A0 платы Arduino.
Раздел начальных установок теперь будет выглядеть следующим образом:

Sensor water;

void setup()

{ 
water.pin=A0;  
pinMode(water.pin, INPUT);
}

 

Если выполнить для объекта команду water.read(), то значение датчика можно получить из переменной water.data.

Используем для чтения данных последовательный порт.
Полностью программа теперь выглядит так:

class Sensor   // название класса
{
  public:
  int pin;  // переменная с номером пина
  int data; // переменная с показаниями датчика
  
  void read()  // добавляем функцию read
       {
       data=analogRead(pin);  // считываем показания датчика в переменную data
       } 
};


Sensor water; // создаем объект класса

void setup()

{ 
Serial.begin(9600); // устанавливаем передачу по последовательному портк
water.pin=A0;  // задаем пин, к которому подключен датчик
pinMode(water.pin, INPUT); // устанавливаем пин в качестве входа для считывания показаний
}

void loop()

{
  delay(500); // пауза
  water.read(); // считываем показания
  Serial.println(water.data); // посылаем показания в последовательный порт
 
}

 

Эта программа достаточно простая, чтобы понять основной принцип создания классов и объектов при программировании Ардуино.
Код можно усовершенствовать дополнив возможности класса.

 

 

Продолжение следует…