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

Нужна ли статья про Редактор Code-Professional?

Да, очень нужна!
51
75%
Интересно было бы знать.
15
22%
Мне хватает редактора Code-Basiс.
1
1%
Не пользуюсь редактором вообще.
1
1%
 
Всего голосов: 68

Anydy

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

#21

Сообщение Anydy » 29.09.2021{, 23:59}

Еще одно мнение - setup() само по себе зло почти всегда (если только для присвоения констант) - создает проблемы при реализации управляемого программного сброса проекта.
И delay() всегда зло. Иногда приходиться использовать delayMicroseconds(x), где x не более 100.
как Setup() Может быть злом?? к примеру Sim 800 пока иницалируеся в сети .......пока подключится к сети......пока уставит GPRS соединение
Ардуинка не должна стартовать ....как это сделать без сетап?
Авот в цикле....и в фуyкциях однозначно использовать millis()

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

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

#22

Сообщение Dryundel » 30.09.2021{, 00:17}

Anydy, я думаю что ecoins имеет ввиду то, что иногда настройки требуется делать по "ходу пьесы" и запускать их в Loop по какому то флагу. А вот некоторые библиотечные дефайны надо запускать до подключения библиотеки, что в Loop уже не получается, ибо нужная часть либы уже скомпилирована. :) Ну или что то в этом роде.

Anydy

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

#23

Сообщение Anydy » 30.09.2021{, 03:23}

Есть же радел Declare ....там указываем нужные библиотеки ...и не только....далее в сетап инициализирум свои устройсва.....ждем чтобы они заработали...и только после этого запускаем МК..что не так то?
Простите за ошибки......инфа для новичков!

Отправлено спустя 6 минут 36 секунд:
Dryundel писал(а):
30.09.2021{, 00:17}
Anydy, я думаю что ecoins имеет ввиду то, что иногда настройки требуется делать по "ходу пьесы" и запускать их в Loop по какому то флагу. А вот некоторые библиотечные дефайны надо запускать до подключения библиотеки, что в Loop уже не получается, ибо нужная часть либы уже скомпилирована. Ну или что то в этом роде.
не понял как настройки устройств которые в сетп можно изменить в цикле? параметры да можно

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

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

#24

Сообщение Dryundel » 30.09.2021{, 07:18}

Anydy писал(а):
30.09.2021{, 03:29}
не понял как настройки устройств которые в сетп можно изменить в цикле?
Да запросто. Какая разница от куда их менять. Но да, не все и не всегда, можно изменять из Loop.

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

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

#25

Сообщение Sancho » 30.09.2021{, 08:27}

ecoins писал(а):
27.09.2021{, 18:25}
Еще одно мнение - setup() само по себе зло почти всегда (если только для присвоения констант) - создает проблемы при реализации управляемого программного сброса проекта.
вопрос очень интересный, но немного не понятный без примера.
Создаём хедер, туда всё необходимое, возможно в виде функций, прикрепляем - всё в Ваших руках.
Anydy писал(а):
29.09.2021{, 23:59}
как Setup() Может быть злом?? к примеру Sim 800 пока иницалируеся в сети .......пока подключится к сети......пока уставит GPRS соединение
Ардуинка не должна стартовать ....как это сделать без сетап?
В моих проектах ардуино стартует сразу, а уже в теле loop подымается соединение через gprs, по tcp. Смысла ждать чего-то нет. Дело нужно делать :)

Отправлено спустя 1 минуту 33 секунды:
Для sim800 delay не используется, от слова совсем.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

ecoins
Полковник
Сообщения: 2924
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

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

#26

Сообщение ecoins » 30.09.2021{, 09:53}

Sancho писал(а):
30.09.2021{, 08:29}
В моих проектах ардуино стартует сразу, а уже в теле loop подымается соединение через gprs, по tcp. Смысла ждать чего-то нет. Дело нужно делать

Отправлено спустя 1 минуту 33 секунды:
Для sim800 delay не используется, от слова совсем.
Все хорошо изложено.

Anydy

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

#27

Сообщение Anydy » 30.09.2021{, 15:52}

Зачем тогда в С++ придумали фунцию Делай? Осложнить работу прогррамистов?

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

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

#28

Сообщение Dryundel » 30.09.2021{, 16:30}

Anydy писал(а):
30.09.2021{, 15:52}
Зачем тогда в С++ придумали фунцию Делай? Осложнить работу прогррамистов?
Наверное потому, что это например простой способ сделать элементарный командоаппарат.
Ну и в учебных целях тоже хорошо.

Мало того, позже придумали и костыль к delay(), так называемый yield(). В простых случаях работает. :)

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

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

#29

Сообщение Naladchik » 30.09.2021{, 19:38}

По поводу delay() и yield() для ESP интересная информация
"... delay() - это задержка для ВАШЕЙ ПРОГРАММЫ, для есп это время обработки WiFi..."
https://esp8266.ru/forum/threads/funkcija-yield.2369/
Win10-64. FLProg Portable.
Изображение

sergserg
Сержант
Сообщения: 203
Зарегистрирован: 25.02.2021{, 14:26}
Репутация: -19
Имя: Сергей

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

#30

Сообщение sergserg » 04.12.2021{, 20:39}

Dryndel писал(а):
04.12.2021{, 20:20}
В простых случаях работает
да ладно :D
ну-ка пруфов накидайте-ка с yield()

Отправлено спустя 2 минуты 48 секунд:
*подскажу: возьмите для примера распространенный тут блок ping.v.1.1

ARTEMM
Рядовой
Сообщения: 37
Зарегистрирован: 05.05.2021{, 21:31}
Репутация: 0
Имя: Артём

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

#31

Сообщение ARTEMM » 15.07.2023{, 13:21}

помогите с созданием блока пытаюсь сделать подобие штатного блока генератора только на прерываниях код компилируетса нормально а когда код вставил в блок то при компиляции ошибки
Вложения
генератор_32_(Code_-_Basic).ubi
(34.75 КБ) 16 скачиваний

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

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

#32

Сообщение Naladchik » 16.07.2023{, 21:59}

ARTEMM писал(а):
15.07.2023{, 13:21}
... а когда код вставил в блок ...
Вот исходный код тоже надо прикладывать, тогда шансы получить помощь гораздо выше.
Win10-64. FLProg Portable.
Изображение

ARTEMM
Рядовой
Сообщения: 37
Зарегистрирован: 05.05.2021{, 21:31}
Репутация: 0
Имя: Артём

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

#33

Сообщение ARTEMM » 17.07.2023{, 08:02}

вот исходный скетч

Отправлено спустя 6 минут 56 секунд:
#include <Arduino.h>
#include "esp32-hal-timer.h"

const int outputPin = 27; // Пин для вывода сигнала

hw_timer_t *timer = NULL;
volatile int pulseWidth = 1000; // Длительность импульса в микросекундах
volatile int pauseWidth = 1000; // Длительность паузы в микросекундах
volatile bool pulseState = false;

void IRAM_ATTR timerISR();

void setup() {
pinMode(outputPin, OUTPUT);

timer = timerBegin(0, 80, true); // Используем таймер 0 с делителем на 80
timerAttachInterrupt(timer, &timerISR, true); // Привязываем прерывание к функции timerISR
timerAlarmWrite(timer, pulseWidth, true); // Устанавливаем период таймера равный длительности импульса
timerAlarmEnable(timer); // Включаем таймер
}

void loop() {
// Чтение значений с регуляторов или других источников для установки новых значений pulseWidth и pauseWidth
}

void IRAM_ATTR timerISR() {
pulseState = !pulseState; // Инвертируем состояние импульса

if (pulseState) {
digitalWrite(outputPin, HIGH); // Включаем вывод на пин
timerAlarmWrite(timer, pulseWidth, true); // Устанавливаем период таймера равный длительности импульса
} else {
digitalWrite(outputPin, LOW); // Выключаем вывод на пин
timerAlarmWrite(timer, pauseWidth, true); // Устанавливаем период таймера равный длительности паузы
}
}

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

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

#34

Сообщение Naladchik » 17.07.2023{, 12:43}

ARTEMM писал(а):
15.07.2023{, 13:21}
код вставил в блок
генератор_32_0(Code_-_Basic).ubi
(22.67 КБ) 16 скачиваний
Компилируется. Допиливайте под себя.
Win10-64. FLProg Portable.
Изображение

ARTEMM
Рядовой
Сообщения: 37
Зарегистрирован: 05.05.2021{, 21:31}
Репутация: 0
Имя: Артём

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

#35

Сообщение ARTEMM » 18.07.2023{, 07:29}

Спасибо за помощь грузится без ошибок буду разбираться дальше только не могу разобраться FL prog ругается на то что не найдена библиотека хотя библиотеку установил а arduino при загрузке не возмущается на отсутствие библиотеки

Отправлено спустя 2 минуты 16 секунд:
include "esp32-hal-timer.h FL prog возмущается на отсутствие этой библиотеки хотя её установил

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

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

#36

Сообщение Naladchik » 18.07.2023{, 08:48}

ARTEMM писал(а):
18.07.2023{, 07:31}
FL prog ругается на то что не найдена библиотека
у меня не ругается, так что как с этим бороться - не знаю
Win10-64. FLProg Portable.
Изображение

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

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

#37

Сообщение aidar_i » 18.07.2023{, 09:47}

Naladchik писал(а):
18.07.2023{, 08:48}
include "esp32-hal-timer.h FL prog возмущается на отсутствие этой библиотеки хотя её установил
Не обращайте внимания на это. Просто не в ту папку установили его. Но это не мешает работе Ардуино Иде.

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

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

#38

Сообщение SergeyShikal » 29.03.2024{, 17:27}

Пытаюсь создать ПБ из тестового примера для aht20+bmp280 столкнулся с проблемой инициализации шины I2C, что не правильно сделал?
2.flp
(52.21 КБ) 3 скачивания
СпойлерПоказать
2.png
СпойлерПоказать
3.png
сам пример
#include <Wire.h>
#include <AHT20.h>
AHT20 aht20;

void setup()
{
Serial.begin(115200);
Serial.println("Humidity AHT20 examples");

Wire.begin(); //Join I2C bus
//Check if the AHT20 will acknowledge
if (aht20.begin() == false)
{
Serial.println("AHT20 not detected. Please check wiring. Freezing.");
while (1);
}
Serial.println("AHT20 acknowledged.");
}

void loop()
{
//If a new measurement is available
if (aht20.available() == true)
{
//Get the new temperature and humidity value
float temperature = aht20.getTemperature();
float humidity = aht20.getHumidity();

//Print the results
Serial.print("Temperature: ");
Serial.print(temperature, 2);
Serial.print(" C\t");
Serial.print("Humidity: ");
Serial.print(humidity, 2);
Serial.print("% RH");

Serial.println();
}

//The AHT20 can respond with a reading every ~50ms. However, increased read time can cause the IC to heat around 1.0C above ambient.
//The datasheet recommends reading every 2 seconds.
delay(2000);
}

ivansidor012
Сержант
Сообщения: 279
Зарегистрирован: 10.09.2020{, 14:37}
Репутация: 43
Имя: Иван

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

#39

Сообщение ivansidor012 » 29.03.2024{, 18:21}

SergeyShikal,
у тебя в скетче Wire.begin();

а ты в блоке как написал?)

Отправлено спустя 3 минуты 48 секунд:
и у тебя в loop будет опрос датчика в каждом цикле - так нельзя.

создай bool вход, обзови его например "my_in_test", и в редакторе в секции loop напиши

if (my_in_test) {
а вот тут уже код опроса вставляй
}

после этого появится вход на блоке с этим именем, цепляй его через R-триггер и опрашивай когда необходимо

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

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

#40

Сообщение SergeyShikal » 29.03.2024{, 18:39}

ivansidor012 писал(а):
29.03.2024{, 18:25}
SergeyShikal,
у тебя в скетче Wire.begin();

а ты в блоке как написал?)

Отправлено спустя 3 минуты 48 секунд:
и у тебя в loop будет опрос датчика в каждом цикле - так нельзя.

создай bool вход, обзови его например "my_in_test", и в редакторе в секции loop напиши

if (my_in_test) {
а вот тут уже код опроса вставляй
}

после этого появится вход на блоке с этим именем, цепляй его через R-триггер и опрашивай когда необходимо
Не работает ни так, ни как в тесте, в пб сейчас сделано как в блоке на бме280.

Ответить

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