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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 16.02.2021{, 10:53}
MaksVish
Спасибо большое! Точно есть лишний символ! Ура, теперь плата светится зеленым!

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

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

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

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

Добавлено: 22.09.2021{, 18:25}
Dryundel
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 !
Блоки с этой функцией сразу убьют ваш проект, да и желание влезать в редактор блоков.

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

Добавлено: 22.09.2021{, 19:45}
Rovki
Dryundel, Ваш в клад в это количество 1.11% :smile9:

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

Добавлено: 23.09.2021{, 02:51}
SergeyShikal
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);
}
}

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

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

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

Добавлено: 23.09.2021{, 09:58}
SergeyShikal
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 секунд
}

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

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

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

Добавлено: 23.09.2021{, 11:52}
SergeyShikal
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

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

Добавлено: 23.09.2021{, 12:18}
Dryundel

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

Добавлено: 09.12.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.12.2021{, 15:30}
aidar_i
Qwert855 писал(а):
09.12.2021{, 15:08}
как в таких случаях добавить возможность вносить изменения через блоки?
Создаёте главный блок, там общие настройки, остальное в блоке экземпляра.

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

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