Страница 4 из 5

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

Добавлено: 18 дек 2019, 06:47
edyapd
[ref=#ff8000]Sancho[/ref], [ref]Ivan_Kornege[/ref], выложил ЗДЕСЬ пример, того как делаю я. В блоке Main есть и условная компиляция. Может сделано всё по дилетантски и не правильно, но оно работает.
Ivan_Kornege писал(а): 11 дек 2019, 13:42поэтому смотрю наезжаешь на тех кто знает

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

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

Добавлено: 10 июл 2020, 23:15
destine
Тему нужно переименовать ... "на обучение языку С++ простым языком на аналогиях" . Потому что название темы не соответствует действительности .

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

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

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

Добавлено: 16 фев 2021, 00:47
MaksVish
Здравствуйте! Прочитав данное пособие по созданию ПБ, в качестве тренировки попробовал сделать простенький блок! В итоге блок на плате не корректный! Можете подсказать что не так?

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

Добавлено: 16 фев 2021, 08:22
rw6cm
MaksVish писал(а): 16 фев 2021, 00:47 Можете подсказать что не так?
Когда копируете код от куда то, старайтесь не цеплять лишнего.
В данном случае в деклар занесли системный символ Non-breaking space(неразрывный пробел).
его не видно но он есть ))
Пульсирующий светодиод1.flp

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

Добавлено: 16 фев 2021, 08:43
Naladchik
MaksVish писал(а): 16 фев 2021, 00:47 Можете подсказать что не так?
[spoiler]
111.png
[/spoiler]

И рекомендация в догонку.
Имена входам, переменным и т.д. старайтесь давать уникальные, у Вас блок PulsLed, значит вход пусть будет не En а что то типа En_PL, переменная не brightness а brightness_PL и т.д.
Иначе может быть ситуация, когда создадите блок, который в проекте может использоваться только один раз, и начнутся конфликты имен с имеющимися в других блоках или библиотеках.

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

Добавлено: 16 фев 2021, 09:47
rw6cm
Naladchik писал(а): 16 фев 2021, 08:43Спойлер
Там могут быть и обычные пробелы.
а символ скрываться внутри кода.
Это своеобразные подарки любителям копипастить :)

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

Добавлено: 16 фев 2021, 11:00
MaksVish
Спасибо большое! Точно есть лишний символ! Ура, теперь плата светится зеленым!

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

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

Добавлено: 22 сен 2021, 18:10
SergeyShikal
Здравствуйте, начал изучать создание пб из кода и завис, не могу понять как назначить выход. Внутри блока выход есть и он работает, а пытаешься создать на блоке выход не компилируется иде
Сос.flp

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

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

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

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

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

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

Добавлено: 22 сен 2021, 19:45
Rovki
[ref]Dryundel[/ref], Ваш в клад в это количество 1.11% :smile9:

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

Добавлено: 23 сен 2021, 02:51
SergeyShikal
Dryundel писал(а): 22 сен 2021, 18:38Vihod = 1;
Спасибо,с самим кодом что да как работает будем разбираться позже, сейчас хочу понять как создать блок из готового кода. Все равно что то делаю не так, ошибка та же [spoiler]
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);
}
} [/spoiler]

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

Добавлено: 23 сен 2021, 08:37
Dryundel
[ref]SergeyShikal[/ref], Вы выбрали неудачный пример для изучения. Без минимальных знаний основ программирования из него сложно сделать полноценный блок.
Ну хорошо, давайте исходный скетч, будем разбирать по косточкам.

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

Добавлено: 23 сен 2021, 09:58
SergeyShikal
Dryundel писал(а): 23 сен 2021, 08:37 [ref]SergeyShikal[/ref], Вы выбрали неудачный пример для изучения. Без минимальных знаний основ программирования из него сложно сделать полноценный блок.
Ну хорошо, давайте исходный скетч, будем разбирать по косточкам.
[spoiler]<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 секунд
}[/spoiler]

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

Добавлено: 23 сен 2021, 10:57
Sancho
[ref]SergeyShikal[/ref], Опишите алгоритм работы блока - что есть в коде не всегда хорошо.
Dryundel писал(а): 22 сен 2021, 18:38 delay() - это первый враг FLProg !
и не только.

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

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

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

Добавлено: 23 сен 2021, 12:18
Dryundel

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

Добавлено: 09 дек 2021, 15:08
Qwert855
Добрый день.
подскажите как можно внести изменения в ПБ что бы менять имена классов (если правильно понял 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();

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

Добавлено: 09 дек 2021, 15:30
aidar_i
Qwert855 писал(а): 09 дек 2021, 15:08 как в таких случаях добавить возможность вносить изменения через блоки?
Создаёте главный блок, там общие настройки, остальное в блоке экземпляра.

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

Добавлено: 09 дек 2021, 15:57
Qwert855
Т.е только через "новый" редактор?