Создание пользовательского блока (Code-Basic) простым языком.

Написание кода на языке C++, не зная языка С++.

Статистический опрос.

Мне помогла эта тема разобраться с созданием ПБ.
34
61%
Я уже умел создавать ПБ, но нашел в теме что то новое для себя.
16
29%
Я умею создавать ПБ, ничего нового, но считаю тему полезной.
3
5%
Тема прикольная, но особой пользы от нее я не вижу.
1
2%
Полный бред. Прорабы какие то, квартиранты. Чушь.
2
4%
 
Всего голосов: 56

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Создание пользовательского блока (CODE) простым языком.

#61

Сообщение edyapd » 18.12.2019{, 06:47}

Sancho, Ivan_Kornege, выложил ЗДЕСЬ пример, того как делаю я. В блоке Main есть и условная компиляция. Может сделано всё по дилетантски и не правильно, но оно работает.
Ivan_Kornege писал(а):
11.12.2019{, 13:42}
поэтому смотрю наезжаешь на тех кто знает

Маленько не правильно интерпретировали слова. Главный упор был на то, что приходится экспериментировать.
Я не знаю как делать правильно, в отличии от вас. И если программа мне светит красным, я начинаю делать по другому.
Вы знаете и поэтому требуете от автора изменить программу. В этом наша разница.

destine
Рядовой
Сообщения: 15
Зарегистрирован: 26.02.2019{, 19:24}
Репутация: 2
Имя: Вадим

Создание пользовательского блока (CODE) простым языком.

#62

Сообщение destine » 10.07.2020{, 23:15}

Тему нужно переименовать ... "на обучение языку С++ простым языком на аналогиях" . Потому что название темы не соответствует действительности .

EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09.03.2019{, 17:49}
Репутация: 21
Имя: Egor

Создание пользовательского блока (CODE) простым языком.

#63

Сообщение EgorKa » 11.07.2020{, 17:45}

destine писал(а):
10.07.2020{, 23:15}
Тему нужно переименовать ... "на обучение языку С++ простым языком на аналогиях" . Потому что название темы не соответствует действительности .
Тема правильная. Или знаете другой метод создания ПБ.
Не изучите чтение кода на языке программирования = ПБ создавать не сможете. Остается пользоваться альтруизмом автора и присутствующих на форуме.

MaksVish
Рядовой
Сообщения: 91
Зарегистрирован: 14.07.2018{, 19:09}
Репутация: 1
Имя: Максим

Создание пользовательского блока (CODE) простым языком.

#64

Сообщение MaksVish » 16.02.2021{, 00:47}

Здравствуйте! Прочитав данное пособие по созданию ПБ, в качестве тренировки попробовал сделать простенький блок! В итоге блок на плате не корректный! Можете подсказать что не так?
Вложения
Пульсирующий светодиод.flp
(52.65 КБ) 60 скачиваний

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Создание пользовательского блока (CODE) простым языком.

#65

Сообщение rw6cm » 16.02.2021{, 08:22}

MaksVish писал(а):
16.02.2021{, 00:47}
Можете подсказать что не так?
Когда копируете код от куда то, старайтесь не цеплять лишнего.
В данном случае в деклар занесли системный символ Non-breaking space(неразрывный пробел).
его не видно но он есть ))
Пульсирующий светодиод1.flp
(51.96 КБ) 68 скачиваний
Win10-64, FLProg (portable)

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Создание пользовательского блока (CODE) простым языком.

#66

Сообщение Naladchik » 16.02.2021{, 08:43}

MaksVish писал(а):
16.02.2021{, 00:47}
Можете подсказать что не так?
СпойлерПоказать
111.png
И рекомендация в догонку.
Имена входам, переменным и т.д. старайтесь давать уникальные, у Вас блок PulsLed, значит вход пусть будет не En а что то типа En_PL, переменная не brightness а brightness_PL и т.д.
Иначе может быть ситуация, когда создадите блок, который в проекте может использоваться только один раз, и начнутся конфликты имен с имеющимися в других блоках или библиотеках.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Создание пользовательского блока (CODE) простым языком.

#67

Сообщение rw6cm » 16.02.2021{, 09:47}

Naladchik писал(а):
16.02.2021{, 08:43}
Спойлер
Там могут быть и обычные пробелы.
а символ скрываться внутри кода.
Это своеобразные подарки любителям копипастить :)
Win10-64, FLProg (portable)

MaksVish
Рядовой
Сообщения: 91
Зарегистрирован: 14.07.2018{, 19:09}
Репутация: 1
Имя: Максим

Создание пользовательского блока (CODE) простым языком.

#68

Сообщение MaksVish » 16.02.2021{, 10:53}

Спасибо большое! Точно есть лишний символ! Ура, теперь плата светится зеленым!

Отправлено спустя 6 минут 13 секунд:
На счет имен понял, буду учитывать! Спасибо!

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 576
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

Создание пользовательского блока (CODE) простым языком.

#69

Сообщение SergeyShikal » 22.09.2021{, 18:10}

Здравствуйте, начал изучать создание пб из кода и завис, не могу понять как назначить выход. Внутри блока выход есть и он работает, а пытаешься создать на блоке выход не компилируется иде
Сос.flp
(98.01 КБ) 44 скачивания

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создание пользовательского блока (CODE) простым языком.

#70

Сообщение Dryundel » 22.09.2021{, 18:25}

SergeyShikal писал(а):
22.09.2021{, 18:10}
Здравствуйте, начал изучать создание пб из кода и завис...
При создании простого блока, если нет особой необходимости напрямую указывать пин подключения, не надо ничего инициализировать.
Вот это совсем лишнее.
pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
.
Вам надо использовать тег входа и выхода блока в секции Loop, что Вы прекрасно и сделали вставив if (en_sos) .
А вместо
digitalWrite(led_pin, HIGH);// зажигаем светодиод
Создаете выход блока типа Vihod и пишете типа.
Vihod = 1;
или
Vihod = 0;

Вы же хотите что бы у блока был выход?
Ну как то так...

Отправлено спустя 5 минут 40 секунд:
SergeyShikal,
Да и вообще, не берите таких сложных для новичка примеров с циклами.
В помощь по изучению С++ есть отличный сайт AlexGyver

Отправлено спустя 7 минут 56 секунд:
И еще. Начните пожалуй с этого. Функции времени
delay() - это первый враг FLProg !
Блоки с этой функцией сразу убьют ваш проект, да и желание влезать в редактор блоков.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Создание пользовательского блока (CODE) простым языком.

#71

Сообщение Rovki » 22.09.2021{, 19:45}

Dryundel, Ваш в клад в это количество 1.11% :smile9:
Электронщик до мозга костей и не только

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 576
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

Создание пользовательского блока (CODE) простым языком.

#72

Сообщение SergeyShikal » 23.09.2021{, 02:51}

Dryundel писал(а):
22.09.2021{, 18:38}
Vihod = 1;
Спасибо,с самим кодом что да как работает будем разбираться позже, сейчас хочу понять как создать блок из готового кода. Все равно что то делаю не так, ошибка та же
СпойлерПоказать
bool en_sos_228070441_1;
bool Vihod _228070441_1;
bool _bounseInputD3S = 0;
bool _bounseInputD3O = 0;
unsigned long _bounseInputD3P = 0UL;
void setup()
{
pinMode(3, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13, 0);
_bounseInputD3O = digitalRead(3);
}
void loop()
{
bool _bounceInputTmpD3 = (digitalRead (3));
if (_bounseInputD3S)
{
if (millis() >= (_bounseInputD3P + 40))
{
_bounseInputD3O= _bounceInputTmpD3;
_bounseInputD3S=0;
}
}
else
{
if (_bounceInputTmpD3 != _bounseInputD3O)
{
_bounseInputD3S=1;
_bounseInputD3P = millis();
}
}
//Плата:1
en_sos_228070441_1 = !(_bounseInputD3O);
if (en_sos_228070441_1)
{
for (int x=0; x<3; x++)
{
Vihod _228070441_1= 1; // зажигаем светодиод
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); // ждем 750 милисекунд
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 милисекунд
}
digitalWrite(13, Vihod _228070441_1);
}
}
Вложения
Сос1.flp
(86.56 КБ) 49 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создание пользовательского блока (CODE) простым языком.

#73

Сообщение Dryundel » 23.09.2021{, 08:37}

SergeyShikal, Вы выбрали неудачный пример для изучения. Без минимальных знаний основ программирования из него сложно сделать полноценный блок.
Ну хорошо, давайте исходный скетч, будем разбирать по косточкам.

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 576
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

Создание пользовательского блока (CODE) простым языком.

#74

Сообщение SergeyShikal » 23.09.2021{, 09:58}

Dryundel писал(а):
23.09.2021{, 08:37}
SergeyShikal, Вы выбрали неудачный пример для изучения. Без минимальных знаний основ программирования из него сложно сделать полноценный блок.
Ну хорошо, давайте исходный скетч, будем разбирать по косточкам.
СпойлерПоказать
<code>int led_pin=3; // пин подключения
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 секунд
}

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Создание пользовательского блока (CODE) простым языком.

#75

Сообщение Sancho » 23.09.2021{, 10:57}

SergeyShikal, Опишите алгоритм работы блока - что есть в коде не всегда хорошо.
Dryundel писал(а):
22.09.2021{, 18:38}
delay() - это первый враг FLProg !
и не только.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 576
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

Создание пользовательского блока (CODE) простым языком.

#76

Сообщение SergeyShikal » 23.09.2021{, 11:52}

Sancho писал(а):
23.09.2021{, 10:57}
SergeyShikal, Опишите алгоритм работы блока - что есть в коде не всегда хорошо.
Dryundel писал(а):
22.09.2021{, 18:38}
delay() - это первый враг FLProg !
и не только.
Взято от сюда https://portal-pk.ru/news/54-urok-4---s ... duino.html

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Создание пользовательского блока (CODE) простым языком.

#77

Сообщение Dryundel » 23.09.2021{, 12:18}


Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Создание пользовательского блока (Code-Basic) простым языком.

#78

Сообщение Qwert855 » 09.12.2021{, 15:08}

Добрый день.
подскажите как можно внести изменения в ПБ что бы менять имена классов (если правильно понял Adafruit_NeoPixel.h)

Для примера.
необходимо запустить адресный лед с двух пинов.
Как сделать это в коде понятно, и способ работает.

Код: Выделить всё

#include <Adafruit_NeoPixel.h>
bool en;
int num_led;
int led_1r;
int led_1g;
int led_1b;
bool en;
int num_led;
int led_1r;
int led_1g;
int led_1b;
Adafruit_NeoPixel pixels1= Adafruit_NeoPixel(5 ,   7 , NEO_GRB + NEO_KHZ800); //first number change does distance between colors
Adafruit_NeoPixel pixels2= Adafruit_NeoPixel(4 ,   8 , NEO_GRB + NEO_KHZ800); //first number change does distance between colors

void setup()
{
        
    pixels1.begin();
    pixels1.show(); // Устанавливаем все светодиоды в состояние "Выключено"
    pixels2.begin();
    pixels2.show(); // Устанавливаем все светодиоды в состояние "Выключено"
   
}
void loop()
{
    //Плата:2
   
    en = !(0);
    num_led = 3;
    led_1r = 80;
    led_1g = 0;
    led_1b = 0;
    
    if (en   == 1)
    {
        pixels1.setPixelColor (num_led -1, pixels1.Color(led_1r  ,  led_1g  ,  led_1b));
        pixels1.show();
    }
    else
    {
        pixels1.setPixelColor (num_led -1, pixels1.Color(0 , 0  ,  0));
       pixels1.show();
    }
    ;
   
    en = !(0);
    num_led = 2;
    led_1r = 0;
    led_1g = 80;
    led_1b = 0;
    
    if (en   == 1)
    {
        pixels2.setPixelColor (num_led -1, pixels2.Color(led_1r  ,  led_1g  ,  led_1b));
        pixels2.show();
    }
    else
    {
        pixels2.setPixelColor (num_led -1, pixels2.Color(0 , 0  ,  0));
        pixels2.show();
    }
    ;
}
т.е.
как в таких случаях добавить возможность вносить изменения через блоки?
может объединить блок декларации и функции и разделить их по экземплярам но это не удобно.

Adafruit_NeoPixel pixels1= Adafruit_NeoPixel(5 , 7 , NEO_GRB + NEO_KHZ800);

pixels1.setPixelColor (num_led -1, pixels1.Color(led_1r , led_1g , led_1b));
pixels1.show();
Вложения
002.flp
(883.45 КБ) 41 скачивание

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Создание пользовательского блока (Code-Basic) простым языком.

#79

Сообщение aidar_i » 09.12.2021{, 15:30}

Qwert855 писал(а):
09.12.2021{, 15:08}
как в таких случаях добавить возможность вносить изменения через блоки?
Создаёте главный блок, там общие настройки, остальное в блоке экземпляра.
Последний раз редактировалось aidar_i 09.12.2021{, 17:37}, всего редактировалось 1 раз.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Создание пользовательского блока (Code-Basic) простым языком.

#80

Сообщение Qwert855 » 09.12.2021{, 15:57}

Т.е только через "новый" редактор?

Ответить

Вернуться в «Обучающие примеры работы в FLProg»