Страница 2 из 3
Создание пользовательского блока из скетча(примера)
Добавлено: 29 сен 2021, 23:59
Anydy
Еще одно мнение - setup() само по себе зло почти всегда (если только для присвоения констант) - создает проблемы при реализации управляемого программного сброса проекта.
И delay() всегда зло. Иногда приходиться использовать delayMicroseconds(x), где x не более 100.
как Setup() Может быть злом?? к примеру Sim 800 пока иницалируеся в сети .......пока подключится к сети......пока уставит GPRS соединение
Ардуинка не должна стартовать ....как это сделать без сетап?
Авот в цикле....и в фуyкциях однозначно использовать millis()
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 00:17
Dryundel
[ref=#aa0000]Anydy[/ref], я думаю что ecoins имеет ввиду то, что иногда настройки требуется делать по "ходу пьесы" и запускать их в Loop по какому то флагу. А вот некоторые библиотечные дефайны надо запускать до подключения библиотеки, что в Loop уже не получается, ибо нужная часть либы уже скомпилирована.

Ну или что то в этом роде.
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 03:29
Anydy
Есть же радел Declare ....там указываем нужные библиотеки ...и не только....далее в сетап инициализирум свои устройсва.....ждем чтобы они заработали...и только после этого запускаем МК..что не так то?
Простите за ошибки......инфа для новичков!
Отправлено спустя 6 минут 36 секунд:
Dryundel писал(а): 30 сен 2021, 00:17
Anydy, я думаю что ecoins имеет ввиду то, что иногда настройки требуется делать по "ходу пьесы" и запускать их в Loop по какому то флагу. А вот некоторые библиотечные дефайны надо запускать до подключения библиотеки, что в Loop уже не получается, ибо нужная часть либы уже скомпилирована. Ну или что то в этом роде.
не понял как настройки устройств которые в сетп можно изменить в цикле? параметры да можно
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 07:18
Dryundel
Anydy писал(а): 30 сен 2021, 03:29
не понял как настройки устройств которые в сетп можно изменить в цикле?
Да запросто. Какая разница от куда их менять. Но да, не все и не всегда, можно изменять из Loop.
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 08:29
Sancho
ecoins писал(а): 27 сен 2021, 18:25
Еще одно мнение - setup() само по себе зло почти всегда (если только для присвоения констант) - создает проблемы при реализации управляемого программного сброса проекта.
вопрос очень интересный, но немного не понятный без примера.
Создаём хедер, туда всё необходимое, возможно в виде функций, прикрепляем - всё в Ваших руках.
Anydy писал(а): 29 сен 2021, 23:59
как Setup() Может быть злом?? к примеру Sim 800 пока иницалируеся в сети .......пока подключится к сети......пока уставит GPRS соединение
Ардуинка не должна стартовать ....как это сделать без сетап?
В моих проектах ардуино стартует сразу, а уже в теле loop подымается соединение через gprs, по tcp. Смысла ждать чего-то нет. Дело нужно делать
Отправлено спустя 1 минуту 33 секунды:
Для sim800 delay не используется, от слова совсем.
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 09:53
ecoins
Sancho писал(а): 30 сен 2021, 08:29
В моих проектах ардуино стартует сразу, а уже в теле loop подымается соединение через gprs, по tcp. Смысла ждать чего-то нет. Дело нужно делать
Отправлено спустя 1 минуту 33 секунды:
Для sim800 delay не используется, от слова совсем.
Все хорошо изложено.
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 15:52
Anydy
Зачем тогда в С++ придумали фунцию Делай? Осложнить работу прогррамистов?
Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 16:30
Dryundel
Anydy писал(а): 30 сен 2021, 15:52
Зачем тогда в С++ придумали фунцию Делай? Осложнить работу прогррамистов?
Наверное потому, что это например простой способ сделать элементарный командоаппарат.
Ну и в учебных целях тоже хорошо.
Мало того, позже придумали и костыль к delay(), так называемый yield(). В простых случаях работает.

Создание пользовательского блока из скетча(примера)
Добавлено: 30 сен 2021, 19:38
Naladchik
По поводу delay() и yield() для ESP интересная информация
"... delay() - это задержка для ВАШЕЙ ПРОГРАММЫ, для есп это время обработки WiFi..."
https://esp8266.ru/forum/threads/funkcija-yield.2369/
Создание пользовательского блока из скетча(примера)
Добавлено: 04 дек 2021, 20:42
sergserg
Dryndel писал(а): 04 дек 2021, 20:20
В простых случаях работает
да ладно
ну-ка пруфов накидайте-ка с yield()
Отправлено спустя 2 минуты 48 секунд:
*подскажу: возьмите для примера распространенный тут блок ping.v.1.1
Создание пользовательского блока из скетча(примера)
Добавлено: 15 июл 2023, 13:21
ARTEMM
помогите с созданием блока пытаюсь сделать подобие штатного блока генератора только на прерываниях код компилируетса нормально а когда код вставил в блок то при компиляции ошибки
Создание пользовательского блока из скетча(примера)
Добавлено: 16 июл 2023, 21:59
Naladchik
ARTEMM писал(а): 15 июл 2023, 13:21
... а когда код вставил в блок ...
Вот исходный код тоже надо прикладывать, тогда шансы получить помощь гораздо выше.
Создание пользовательского блока из скетча(примера)
Добавлено: 17 июл 2023, 08:09
ARTEMM
вот исходный скетч
Отправлено спустя 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); // Устанавливаем период таймера равный длительности паузы
}
}
Создание пользовательского блока из скетча(примера)
Добавлено: 17 июл 2023, 12:43
Naladchik
ARTEMM писал(а): 15 июл 2023, 13:21
код вставил в блок
генератор_32_0(Code_-_Basic).ubi
Компилируется. Допиливайте под себя.
Создание пользовательского блока из скетча(примера)
Добавлено: 18 июл 2023, 07:31
ARTEMM
Спасибо за помощь грузится без ошибок буду разбираться дальше только не могу разобраться FL prog ругается на то что не найдена библиотека хотя библиотеку установил а arduino при загрузке не возмущается на отсутствие библиотеки
Отправлено спустя 2 минуты 16 секунд:
include "esp32-hal-timer.h FL prog возмущается на отсутствие этой библиотеки хотя её установил
Создание пользовательского блока из скетча(примера)
Добавлено: 18 июл 2023, 08:48
Naladchik
ARTEMM писал(а): 18 июл 2023, 07:31
FL prog ругается на то что не найдена библиотека
у меня не ругается, так что как с этим бороться - не знаю
Создание пользовательского блока из скетча(примера)
Добавлено: 18 июл 2023, 09:47
aidar_i
Naladchik писал(а): 18 июл 2023, 08:48
include "esp32-hal-timer.h FL prog возмущается на отсутствие этой библиотеки хотя её установил
Не обращайте внимания на это. Просто не в ту папку установили его. Но это не мешает работе Ардуино Иде.
Создание пользовательского блока из скетча(примера)
Добавлено: 29 мар 2024, 17:27
SergeyShikal
Пытаюсь создать ПБ из тестового примера для aht20+bmp280 столкнулся с проблемой инициализации шины I2C, что не правильно сделал?
2.flp
[spoiler]
2.png
[/spoiler][spoiler]
3.png
[/spoiler]
сам пример
[scroll]#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);
}[/scroll]
Создание пользовательского блока из скетча(примера)
Добавлено: 29 мар 2024, 18:25
ivansidor012
[ref]SergeyShikal[/ref],
у тебя в скетче Wire.begin();
а ты в блоке как написал?)
Отправлено спустя 3 минуты 48 секунд:
и у тебя в loop будет опрос датчика в каждом цикле - так нельзя.
создай bool вход, обзови его например "my_in_test", и в редакторе в секции loop напиши
if (my_in_test) {
а вот тут уже код опроса вставляй
}
после этого появится вход на блоке с этим именем, цепляй его через R-триггер и опрашивай когда необходимо
Создание пользовательского блока из скетча(примера)
Добавлено: 29 мар 2024, 18:39
SergeyShikal
ivansidor012 писал(а): 29 мар 2024, 18:25
[ref]SergeyShikal[/ref],
у тебя в скетче Wire.begin();
а ты в блоке как написал?)
Отправлено спустя 3 минуты 48 секунд:
и у тебя в loop будет опрос датчика в каждом цикле - так нельзя.
создай bool вход, обзови его например "my_in_test", и в редакторе в секции loop напиши
if (my_in_test) {
а вот тут уже код опроса вставляй
}
после этого появится вход на блоке с этим именем, цепляй его через R-триггер и опрашивай когда необходимо
Не работает ни так, ни как в тесте, в пб сейчас сделано как в блоке на бме280.