Ветка «Элемент кода»
Данная ветка служит для непосредственного создания элемента кода блока.
Так же этой ветке задаются имя элемента кода и при необходимости условие его вставки в код проекта.
Для выбора условия вставки доступны три варианта.
Для выбора условия вставки доступны три варианта.
В случае выбора варианта «Нет условия» код, безусловно, вставляется в скетч при необходимости.
В остальных двух случаях необходимо выбрать условие вставки кода в скетчь.
Это делается с помощью кнопки «Выбрать условие»(2). При этом открывается окно со списком условий доступных для данного элемента кода.
В остальных двух случаях необходимо выбрать условие вставки кода в скетчь.
Это делается с помощью кнопки «Выбрать условие»(2). При этом открывается окно со списком условий доступных для данного элемента кода.
При выбранном условии с помощью кнопки «Перейти на условие»(1), можно напрямую перейти на ветку настройки выбранного условия.
При выборе варианта «Условие истинно» код будет вставляться в скетчь, только если логическое выражение условия возвращает True. Соответственно если выбран вариант «Условие ложно» код будет вставляться в скетчь, только если логическое выражение условия возвращает False.
Тоолбар редактора кода зависит от расположения данного элемента кода.
Рассмотрим возможные варианты.
При выборе варианта «Условие истинно» код будет вставляться в скетчь, только если логическое выражение условия возвращает True. Соответственно если выбран вариант «Условие ложно» код будет вставляться в скетчь, только если логическое выражение условия возвращает False.
Тоолбар редактора кода зависит от расположения данного элемента кода.
Рассмотрим возможные варианты.
Общий код мультиблока, общий код группы блоков, общий код блока - секция Declare.
При таком расположении элемента кода в тулбаре присутствуют кнопки «Вставить UUID»(1), «Вставить тэг параметра»(2) и чек бокс «Запретить компилятору видеть #Include»(3).
При нажатии на кнопку «Вставить UUID»(1) открывается окно выбора идентификатора.
При нажатии на кнопку «Вставить UUID»(1) открывается окно выбора идентификатора.
«Уникальное число» - при каждом выборе данного идентификатора, будет генерироваться уникальное число, и вставляться
в код в место расположения курсора.
«Идентификатор мультиблока» - при выборе этого идентификатора в код вставляется тэг. При компиляции проекта вместо него вставится ID мультиблока,
который будет одинаков во всём коде, входящем в данный мультиблок.
При нажатии на кнопку «Вставить тэг параметра»(2) открывается окно выбора тэга.
«Идентификатор мультиблока» - при выборе этого идентификатора в код вставляется тэг
При нажатии на кнопку «Вставить тэг параметра»(2) открывается окно выбора тэга.
После выбора тэга от вставляется в позицию курсора в редакторе.
Чек бокс «Запретить компилятору видеть #Include»(3) присутствует в тулбаре редактора элемента кода только при расположении этого элемента в секции Declare.
Он предназначен для управления компилятором проекта. Если его не отметить то компилятор соберёт все строки #Include из секций Declare всех экземпляров блоков и вставит их в код скетча в том месте, которое посчитает нужным,
подчиняясь своей логикой. Установка данного чек бокса сообщает компилятору, что в данном элементе кода нельзя трогать строку #Include и необходимо вставить её в скетчь в том месте, где её прописал разработчик блока.
В некоторых случаях это необходимо. Например, где включение одной библиотеки должно производиться только после включения другой, от которой первая зависит.
Но в этом случае возможно дублирование подключение библиотек. Это не страшно конечно, но как говорится – «не кошерно».
Общий код мультиблока, общий код группы блоков, общий код блока – остальные секции.
Общий код мультиблока, общий код группы блоков, общий код блока – остальные секции.
При таком расположении элемента кода в тулбаре присутствуют кнопки «Вставить UUID»(1), «Вставить тэг параметра»(2) и «Вставить тэг временной переменной»(3).
Работу кнопок «Вставить UUID»(1) и «Вставить тэг параметра»(2) мы рассмотрели выше.
При нажатии кнопки «Вставить тэг временной переменной»(3) открывается окно выбора типа временной переменной.
Работу кнопок «Вставить UUID»(1) и «Вставить тэг параметра»(2) мы рассмотрели выше.
При нажатии кнопки «Вставить тэг временной переменной»(3) открывается окно выбора типа временной переменной.
После выбора тега, он вставляется в редактор в месторасположение курсора.
Теперь рассмотрим что такое временная переменная. Это такая переменная, которая может использоваться блоком для промежуточных расчётов. При компиляции проекта компилятор спрашивает у всех блоков (как стандартных, так и пользовательских) временная переменная какого типа им нужна. После этого при необходимости он создаёт по ОДНОЙ переменной каждого запрошенного типа. Вот как раз имя этой переменной и вставится в скетчь при компиляции вместо этого тэга.
Обратите внимание, что работа с этой переменной должна начаться (запись в неё) и закончится в пределах одного участка кода. Поскольку блок, компилируемый после данного блока, может записать в эту переменную другие значения.
Теперь рассмотрим что такое временная переменная. Это такая переменная, которая может использоваться блоком для промежуточных расчётов. При компиляции проекта компилятор спрашивает у всех блоков (как стандартных, так и пользовательских) временная переменная какого типа им нужна. После этого при необходимости он создаёт по ОДНОЙ переменной каждого запрошенного типа. Вот как раз имя этой переменной и вставится в скетчь при компиляции вместо этого тэга.
Обратите внимание, что работа с этой переменной должна начаться (запись в неё) и закончится в пределах одного участка кода. Поскольку блок, компилируемый после данного блока, может записать в эту переменную другие значения.
Пример использования временной переменной.
Блок вывода на экран значения из переменной.
Данный блок в зависимости от типа выбранной переменной преобразует значение этой переменной в String и потом выводит ее на экран. В этом блоке в секции Loop кода каждого инстанса в месте вставки блока созданы 4 элемента кода.
Первые три – условные и вставляются в код в зависимости от типа выбранной переменной.
В этих элементах кода во временную переменную типа String записывается сконвертированное значение выбранной переменной.
Данный блок в зависимости от типа выбранной переменной преобразует значение этой переменной в String и потом выводит ее на экран. В этом блоке в секции Loop кода каждого инстанса в месте вставки блока созданы 4 элемента кода.
Первые три – условные и вставляются в код в зависимости от типа выбранной переменной.
В этих элементах кода во временную переменную типа String записывается сконвертированное значение выбранной переменной.
В четвёртом элементе кода мы значение данной временной переменной выводим на экран. Данный элемент безусловный.
В результате компиляции при выбранной переменной типа Boolean получим такой код.
if (_gtv1)
{
_tempVariable_String = "Нет";
}
else {
_tempVariable_String = "Да"; }
if ((0))
{
myOLED.print(_tempVariable_String, 0, 0);
}
if (_gtv1)
{
_tempVariable_String = "Нет";
}
else {
_tempVariable_String = "Да"; }
if ((0))
{
myOLED.print(_tempVariable_String, 0, 0);
}
Код каждого экземпляра – секция Declare
При таком расположении элемента кода в тулбаре присутствуют кнопки «Вставить UUID»(4), «Вставить тэг параметра»(1) , «Вставить тэг входа»(5) , «Вставить тэг выхода»(6) и чек бокс «Запретить компилятору видеть #Include»(2).
Работу кнопки «Вставить тэг параметра»(1) и чек бокса «Запретить компилятору видеть #Include»(2) мы рассмотрели выше.
При нажатии кнопки «Вставить UUID»(4) при таком расположении элемента кода открывается расширенное окно выбора идентификатора.
Работу кнопки «Вставить тэг параметра»(1) и чек бокса «Запретить компилятору видеть #Include»(2) мы рассмотрели выше.
При нажатии кнопки «Вставить UUID»(4) при таком расположении элемента кода открывается расширенное окно выбора идентификатора.
В этом окне появился новый пункт - «Идентификатор экземпляра». При выборе этого пункта в место нахождения курсора в редакторе кода, вставляется тэг . При компиляции блока в проекте вместо него вставляется ID конкретного экземпляра блока.
Пример
В секции Declare кода каждого инстанса объявляем переменную.
А в секции Loop каждого инстанса в месте вставки блока записываем в неё значение.
В проект вставляем два экземпляра данного блока
В результате компиляции получаем код:
Секция Declare
int Var_176673836 ;
int Var_127258073 ;
Секция Loop место вставки первого экземпляра.
Var_176673836 =200;
Секция Loop место вставки второго экземпляра.
Var_127258073 =200;
Секция Declare
int Var_176673836 ;
int Var_127258073 ;
Секция Loop место вставки первого экземпляра.
Var_176673836 =200;
Секция Loop место вставки второго экземпляра.
Var_127258073 =200;
При нажатии кнопок «Вставить тэг входа»(5) , «Вставить тэг выхода»(6) открывается окно выбора соответствующего тэга из списка входов или выходов данного блока.
После выбора необходимого тэга он вставляется в место положения курсора в редакторе кода.
Рассмотрим работу тэга входа.
В отличие от старого (Basic) редактора пользовательских блоков в этом редакторе для входов переменные не создаются. Это сделано для экономии памяти микроконтроллера. Вместо тэга входа в код вставляется логическое выражение, полученное с входа заключённое в скобки. В большинстве случаев это имя переменой выхода блока подключенного к данному входу.
Например, рассмотрим такой код
Рассмотрим работу тэга входа.
В отличие от старого (Basic) редактора пользовательских блоков в этом редакторе для входов переменные не создаются. Это сделано для экономии памяти микроконтроллера. Вместо тэга входа в код вставляется логическое выражение, полученное с входа заключённое в скобки. В большинстве случаев это имя переменой выхода блока подключенного к данному входу.
Например, рассмотрим такой код
При подключении на вход константы получим следующий результат.
if ((50) ==20)
{
// Какой то код
}
Если подадим на вход, выход блока с переменной выхода, получим следующее.
{
// Какой то код
}
Если подадим на вход, выход блока с переменной выхода, получим следующее.
if (((_d18x2x1O)) ==20)
{
// Какой то код
}
Но на входе возможна и математика, которая для экономии памяти рассчитывается на лету.
Например, при такой схеме получим более сложный вариант.
{
// Какой то код
}
Но на входе возможна и математика, которая для экономии памяти рассчитывается на лету.
Например, при такой схеме получим более сложный вариант.
if ((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))) ==20)
{
// Какой то код
}
При данном использовании входа в блоке это не критично. Но возможен вариант, когда вход используют в качестве параметра какой-то функции в библиотеке. Далеко не все библиотеки «любят» когда им в качестве параметра подсовывают выражение.
Например, перепишем код блока.
{
// Какой то код
}
При данном использовании входа в блоке это не критично. Но возможен вариант, когда вход используют в качестве параметра какой-то функции в библиотеке. Далеко не все библиотеки «любят» когда им в качестве параметра подсовывают выражение.
Например, перепишем код блока.
Получим результат
Out_238022926_164280164 = abstractCrazyFunction((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))));
Функция abstractCrazyFunction скорее всего, заругается, когда получит в качестве параметра вот такое: ((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))).
Поэтому когда Вы не уверены что использование входа будет корректно для любых данных приходящих на вход, рекомендую использовать такую конструкцию.
Out_238022926_164280164 = abstractCrazyFunction((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))));
Функция abstractCrazyFunction скорее всего, заругается, когда получит в качестве параметра вот такое: ((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))).
Поэтому когда Вы не уверены что использование входа будет корректно для любых данных приходящих на вход, рекомендую использовать такую конструкцию.
Тогда результат компиляции удовлетворит любую функцию.
_tempVariable_int = (((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L)));
Out_238022926_164280164 = abstractCrazyFunction(_tempVariable_int);
Out_142227144_164280164 = abstractCrazyFunction1(_tempVariable_int);
Код каждого блока – остальные секции.
_tempVariable_int = (((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L)));
Out_238022926_164280164 = abstractCrazyFunction(_tempVariable_int);
Out_142227144_164280164 = abstractCrazyFunction1(_tempVariable_int);
Код каждого блока – остальные секции.
Здесь присутствуют кнопки, работу которых мы рассмотрели ранее.