Классы. Урок 25. Ардуино

class cover
Объектно-ориентированное программирование для Ардуино
Объектно-ориентированное программирование для Ардуино

Привет! Раньше я уже писал как организовать код для Ардуино в функции. Но есть еще один способ программирования основанный на объектах. Естественно, это объектно-ориентированное программирование. А основа любого объекта — это классы. Так что давайте создадим класс для программы на Ардуино и посмотрим, как это работает.

Нам также понадобятся и функции. Так что, если вы уже забыли тот урок или пропустили его, посмотрите его.

Сегодня напишем небольшую программу для управления светодиодом, но оформим ее в классы. И будем использовать объект для более удобного управления программой и кодом.

Классы

Класс — это часть программы оформленная определенным образом. Классы удобно использовать для группировки кода, относящегося к одной, нужной нам области.

Например, мы можем организовать все нужные нам функции для работы со светодиодом в один класс. Вынести этот класс в отдельный файл. И подключать этот файл в любую программу, где мы используем светодиоды. Таким образом, нам не нужно будет писать все функции второй раз. Мы сможем использовать одну и туже программу многократно.

Пишем тестовый класс

Итак, в нашей программе мы хотим включать и выключать светодиод. Это самый первый пример, который мы рассматривали в начале изучения Ардуино. Но теперь, оформим код с учетом концепции объектно-ориентированного программирования.

В программе нам будет нужно определить пин, на который подключен светодиод. Создать способ зажечь светодиод и выключить его.

Определение класса похоже на функцию, но чтобы определить в программе класс, мы используем ключевое слово class.

class Led {
  public:
    Led(int pin);
    void on();
    void off();
  private:
    int _pin;
  protected:
};

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

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

Приватные методы можно использовать только из текущего класса.

Защищенные методы можно использовать из текущего класса или из подклассов. Об этих методах поговорим позже.

Сейчас мы описали наш класс и два публичных метода on() и off(), для включения и выключения светодиода. Также в разделе public мы описали конструктор класса Led(int pin). В него мы будем передавать номер пина при создании объекта Led.

Переменную int _pin мы внесли в раздел private. Она нужна для определения пина на плате Ардуино. Она должны быть приватной, чтобы было невозможно изменить пин после создания объекта. Таким образом, мы защитим использование объекта от ошибок в программе.

Методы класса

Мы описали конструктор и два публичных метода. Но пока, они ничего не делают. Давайте реализуем эти методы в классе.

Led::Led(int pin){
  pinMode(pin, OUTPUT);
  _pin = pin;
}
void Led::on(){
  digitalWrite(_pin, HIGH);  
}
void Led::off(){
  digitalWrite(_pin, LOW);
}

При создании объекта класса led, мы вызываем конструктор класса и передаем в него номер пина на плате. Далее конструктор настраивает пин на вывод сигналов и сохраняет номер в переменную _pin в приватной области. Таким образом изменить номер пина для этого объекта будет невозможно.

Метод on() выставляет уровень High на пин и, соответственно метод off() выставляет уровень Low на пин. Таким образом, мы сможем зажигать и выключать светодиод.

Использование класса Led

Теперь сохраним наш класс в отдельный файл led.h. Подключим его к программе, создадим объект и посмотрим как использовать методы класса.

#include "Led.h"
Led led(9);

void setup() {
}
void loop() {
  led.on();
  delay(1000);
  led.off();
  delay(1000);
}

Здесь мы подключили файл класса, создали объект класса и передали в конструктор номер пина. А в основном цикле программы мы вызываем метод класса on() и, после небольшой паузы метод off().

Заключение

В этом уроке мы написали первый класс Led для управления светодиодом. Классы помогут нам организовать код в более наглядную и удобную форму. А также позволят нам создавать готовые программные модули и оформлять их как библиотеки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *