.
Теория
.
Довольно часто, на просторах Интернета встречаются примеры кода выполняющие ту или иную задачу и у пользователей FLProg возникает желание добавить данный функционал в свой проект в виде ПБ (Пользовательского блока).
Ничего особо сложного в этом нет. Тем более если данным блоком будете пользоваться только вы. Не надо заботится об универсальности и писать описание. Хотя последнее я бы посоветовал сделать в любом случае, ибо через полгода вы и не вспомните что это и зачем.
Прежде всего хочу сказать, что для грамотного переноса скетча (кода, примера) в блок необходимо обладать базовыми знаниями языка С++. К сожалению для русскоязычного человека к незнанию C++ зачастую накладывается и незнание английского языка, что усложняет задачу вдвойне. Дело в том, что из названия операторов и функций уже становится понятно за что примерно она отвечает.
Возьмем к примеру digitalRead(), analogRead(), digitalWrite(), analogWrite().
Все же довольно прозрачно - Цифровой, Аналоговый, Читаем, Пишем. Очевидно же, что речь идет о цифровых и аналоговых входах/выходах контроллера. Либо мы читаем пин, либо записываем на него значение.
Ориентируясь за что отвечают операторы и функции (их еще обзывают командами Arduino), достаточно просто перенести пример в блок.
Есть в среде ArduinoIDE еще и базовые, основные функции, без которых не обходится ни один скетч:
.
void setup() // установки
{
//Все что здесь, выполняется один раз при старте контроллера
}
void loop() // петля (бесконечный цикл)
{
// Все что здесь будет выполняться после setup() и бесконечно повторяться до отключения питания.
}
.
В FLProg, в базовом редакторе ПБ, для этих функций существуют соответствующие секции. .
Кроме этого есть секции
DeclareSection
Сюда заносится все то, что находится перед void setup()
А иногда и то, что после, но не входит в состав void loop() и других функций (в скетче, примере).
.
FunctionSection
Сюда заносятся прочие пользовательские функции.
.
С теорией пожалуй хватит.
Единственное, что нам еще потребуется, это Notepad++. Обязательно скачайте и установите. Это ваш первый помощник в создании и корректировке кода.
.
Практика
.
Сразу начнем с не совсем удачного примера.
.
void setup() {
pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
}
void loop() {
for (int x=0; x<3; x++) {
digitalWrite(led_pin, HIGH);// зажигаем светодиод
delay(250); // ждем 350 милисекунд
digitalWrite(led_pin, LOW); // выключаем светодиод
delay(100); // ждем 300 милисекунд
}
delay(300);
for (int x=0; x<3; x++) {
digitalWrite(led_pin, HIGH);// зажигаем светодиод
delay(500); // ждем 700 милисекунд
digitalWrite(led_pin, LOW); // выключаем светодиод
delay(100); // ждем 300 милисекунд
}
delay(300);
for (int x=0; x<3; x++) {
digitalWrite(led_pin, HIGH);// зажигаем светодиод
delay(250); // ждем 350 милисекунд
digitalWrite(led_pin, LOW); // выключаем светодиод
delay(100); // ждем 300 милисекунд
}
delay(5000); // ждем 5 секунд
}
Самый простой способ.
Переносим код в Notepad++, изучаем его, находим void setup() и void loop().
Не забудьте выбрать Синтакс С++
.
Сразу после void setup() находим открывающую фигурную скобку { . Выделяем ее и Notepad++ показывает нам ответную закрывающую скобку } . .
Все что между этими скобками, за исключением самих скобок копируем в SetupSection. .
Точно так же поступаем и с void loop(), переносим содержимое, за исключением открывающей и закрывающей фигурных скобок в LoopSection. .
Все что у нас осталось в коде и не вошло в void setup() и void loop(), это первая строчка.
Ее мы копируем в DeclareSection. .
Не забываем вписать название блока и сохранить. .
Наш блок как бы готов.
Почему как бы? Да потому что у нашего блока не ни входов ни выходов. .
Несмотря на это, если загрузить проект в контроллер, все будет работать. На третьем пине будет генерироваться сигнал SOS - три коротких, три длинных, снова три коротких и пауза 5 секунд. И так по кругу.
.
Продолжение следует...