ПЛАН-КОНСПЕКТ ЗАНЯТИЯ Тема: "Написание собственных функций и библиотек"

  • Разработки уроков
  • docx
  • 09.04.2022
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 4. Написание собственных функций и библиотек.docx

МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ УЧРЕЖДЕНИЕ

ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ

МУНИЦИПАЛЬНОГО ОБРАЗОВАНИЯ ГОРОД КРАСНОДАР

«МЕЖШКОЛЬНЫЙ ЭСТЕТИЧЕСКИЙ ЦЕНТР»-

АССОЦИИРОВАННАЯ ШКОЛА ЮНЕСКО

 

 

 

 

 

ПЛАН-КОНСПЕКТ ЗАНЯТИЯ

 

Тема: "Написание собственных функций и библиотек"

 

 

 

 

 

 

 

 

 

 

 

Автор: Никита Олегович Шевцов,

педагог дополнительного образования

 

 

 

 

 

 

 

Краснодар, 2021

 

ПЛАН-КОНСПЕКТ

Тема: "Написание собственных функций и библиотек"

Вопросы для рассмотрения:

1.                 Пример скетча

2.                 Процесс конвертации скетча в библиотеку.

3.                 Заголовочный файл.

4.                 Файл реализации

5.                 Использование библиотеки

6.                 Отличия

7.                 Задание для детей.

 

ХОД ЗАНЯТИЯ

В начале занятия необходимо проверить наличие у детей тетрадок, ручек.

Дать под запись дату. Озвучить тему занятия, что она подразумевает. Дети включают компьютеры, начало рассмотрения вопросов.

Пример скетча

Скетч, воспроизводящий код Морзе:

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);

}

Данный скетч посредством мигания светодиода на выводе 13 выдает сигнал SOS.

Скетч содержит ряд частей кода, которые необходимо будет перенести в библиотеку. Во-первых, это функции dot() и dash(), которые управляют миганием светодиода. Во-вторых, это переменная ledPin, определяющая какой порт ввод/вывода использовать. И наконец, вызов функции pinMode(), устанавливающий режим вывода на используемом порту ввода/вывода.

Процесс конвертации скетча в библиотеку.

Библиотека содержит два файла: заголовочный файл (с расширением .h) и файлы реализации (с расширением .cpp). Заголовочный файл содержит характеристики библиотеки, т.е. список всего что содержится в ней. Создаваемый заголовочный файл будет называться Morse.h. Для дальнейшей работы с заголовочным файлом необходимо просмотреть содержание файла реализации.

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

class Morse

{

  public:

    Morse(int pin);

    void dot();

    void dash();

  private:

    int _pin;

};

Класс в данном случае это набор функций и переменных, объеденных в одном месте. Функции и переменные могут быть публичными (public), что означает общий доступ к ним всех, кто использует библиотеку, или частными (private), что означает доступ к ним только внутри класса. Каждый класс имеет специальную функцию конструктор, которая используется для создания экземпляра класса. Конструктор имеет тоже имя, что и класс, но не имеет типа возвращаемого значения.

Также заголовочный файл содержит еще несколько дополнительных строк. Во-первых, это директива #include, которая дает доступ к стандартным типам и постоянным языка программирования Arduino (директива по умолчанию добавляется к каждому скетчу, но не к библиотеке). Директива выглядит следующим образом (и находится выше объявления класса):

#include "WProgram.h"

В версиях Arduino 1.0 и выше нужно еще добавить:

#include Arduino.h

Также принято заключать содержимое заголовочного файла в следующую конструкцию:

#ifndef Morse_h

#define Morse_h

 

// директивы #include и код помещается здесь

 

#endif

Это предотвращает повторное подключение нашей библиотеки, если кто-то по ошибке дважды подключит библиотеку директивой #include.

Заголовочный файл

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

Готовый заголовочный файл содержит:

#ifndef Morse_h

#define Morse_h

 

#include "WProgram.h"

 

class Morse

{

  public:

    Morse(int pin);

    void dot();

    void dash();

  private:

    int _pin;

};

 

#endif

 

Файл реализации

Рассмотрим файл реализации Morse.cpp.

В начале кода находятся несколько директив #include. Данными директивами разрешается доступ к стандартным функциям Arduino и к характеристикам в головном файле библиотеки:

#include "WProgram.h"

#include "Morse.h"

Далее по коду находится конструктор. Он используется для создания экземпляра создаваемого класса. В данном случае пользователь задает номер используемого порта ввода/вывода через параметр. Порта устанавливается в режим вывода, а номер сохраняется в частной переменной для использования в других функциях:

Morse::Morse(int pin)

{

  pinMode(pin, OUTPUT);

  _pin = pin;

}

Код Morse:: означает, что функция принадлежит классу Morse. Нижний пробел в начале имени переменной _pin — принятое обозначение для частных переменных. Вообще, имя может быть любое, но согласно принятым конвенциям именования для частных переменных принято использовать префикс "_". Это также позволяет отличить от аргумента функции (в данном случае pin).   

Далее код, который конвертируется в библиотеку из изначального скетча, добавилось только Morse:: и изменилось имя переменной с 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);

}

Общепринято помещать некоторые поясняющие комментарии в начале кода файла реализации. Полный код библиотеки:

 

 

#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);

}

 
Использование библиотеки.

Во-первых, необходимо создать папку Morse в подпапке libraries директории блокнота. Во-вторых, требуется скопировать файлы Morse.h и Morse.cpp в созданную папку. После запуска программы Arduino в меню Sketch > ImportLibrary будет находиться библиотека Morse. Библиотека будет компилироваться совместно со скетчами, использующими ее. Если при компиляции библиотеки возникли проблемы, то необходимо проверить, чтобы ее файлы были с расширениями .cpp и .h (не должно быть никаких дополнительных расширений .pde и .txt).

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

#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);

}

Отличия от первоначального скетча

Несколько отличий от изначального скетча:

Во-первых, добавлена директивы #include в начало скетча. Таким образом определяется доступность библиотеки Morse и ее подключение. Неиспользуемую библиотеку можно удалить, убрав директиву #include.

Во-вторых, создается экземпляр класса Morse, называемый morse:

Morse morse(13);

При выполнении данной строки (перед выполнением функции setup()) вызывается конструктор для класса Morse и принимает аргумент, данный в примере (13).

При этом функция setup() ничего не содержит, т.к. вызов функции pinMode() произошел внутри библиотеки (когда был создан экземпляр класса).

В-третьих, для вызова функций dot() и dash() необходимо прибавить префикс morse. – имя используемого экземпляра. Может быть несколько экземпляров класса Morse, каждый со своим номером порта, хранящимся в локальной переменной _pin. Вызовом функции конкретного экземпляра определяются какие переменные, используются во время вызова. При наличии следующих двух строк:

Morse morse(13);

Morse morse2(12);

внутри вызова morse2.dot(), переменная _pin будет иметь значение 12.

 

К сожалению автоматическая подсветка кода не работает с подключаемыми библиотеками. Для того чтобы подсветка заработала необходимо создать файл с названием keywords.txt. Пример:

Morse   KEYWORD1

dash    KEYWORD2

dot KEYWORD2

 

Напротив каждой строки через табуляцию стоит зарезервированное слово, и опять через табуляцию тип слова. Классы соответствуют зарезервированному слову KEYWORD1 и окрашены в оранжевый цвет; функции – KEYWORD2 и окрашены в коричневый. Для распознавания слов необходимо перезапустить среду разработки Arduino.

Созданную библиотеку желательно всегда сопровождают примером ее применения. Для этого создается папка examples в директории Morse. Затем копируется созданный ранее скетч SOS в данную папку. (Файл скетча можно найти через меню Sketch > ShowSketchFolder). После перезапуска Arduino в меню File > Sketchbook > Examples будет находиться пунктLibrary-Morse, содержащий пример. Также необходимо добавить комментарии о том, как лучше использовать библиотеку.

 

Заключительная часть занятия

Рефлексия. Итоговый опрос.

Задание: совместно с преподавателем создать библиотеку с ПИД регулятором.


 

Скачано с www.znanio.ru