Помогите разобраться

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Помогите разобраться

Сообщение Editor »

Всем привет. В общем проект прост, обычный терморегулятор на ардуино нано. Не могу понять что происходит, уже два раз после включения работает недели две без проблем ,а потом вдруг включается и не выключается. После того как перезагрузил или обесточил и снова включил, всё снова работает пару недель и всё повторяется. Может кто может подсказать чём дело?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
vovka1973
Подполковник
Сообщения: 1271
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 115 раз
Поблагодарили: 17 раз

Re: Помогите разобраться

Сообщение vovka1973 »

Editor писал(а): 10 фев 2026, 19:34 Всем привет. В общем проект прост, обычный терморегулятор на ардуино нано. Не могу понять что происходит, уже два раз после включения работает недели две без проблем ,а потом вдруг включается и не выключается. После того как перезагрузил или обесточил и снова включил, всё снова работает пару недель и всё повторяется. Может кто может подсказать чём дело?
что то мне подсказывает что дело в помехах ,а не в коде.
Изображение
ecoins
Администратор
Сообщения: 4493
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 225 раз
Поблагодарили: 381 раз

Re: Помогите разобраться

Сообщение ecoins »

Editor писал(а): 10 фев 2026, 19:34 Всем привет. В общем проект прост, обычный терморегулятор на ардуино нано. Не могу понять что происходит, уже два раз после включения работает недели две без проблем ,а потом вдруг включается и не выключается. После того как перезагрузил или обесточил и снова включил, всё снова работает пару недель и всё повторяется. Может кто может подсказать чём дело?
1.Это могут быть и помехи.
2.Но показалась странно, постоянная периодичность - две недели.
3.Посмотрел проект. Хороший. Удивило и использование OLED 1306 - автор библиотеки конечно молодец, сумел сделать компактное решение, которое и на Nano заработало.
4.У Вас проблема похоже в проекте, который не может устойчиво работать на Nano.
Nano_OLED.png
5.У Вас занято 89% динамической памяти и есть предупреждения, что программа может работать не стабильно. Возможно у Вас версия 7.5.2 и тогда ситуация будет получше.
6.Когда-то он может и работал, но возможно Вы его улучшали. В проекте много строковых переменных - они много оперативной памяти занимают.
Проект_Nano.png
7.Простое решение (если проблема в памяти) - перейти на другой контроллер, например на RP2040.
С уважением,ecoins.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Editor »

Привет. Может Вы и правы,питание у меня сделано через зарядку от телефона,включено в одну и ту же розетку куда включен обогреватель на 2 кВт,провод до розетки метров 10.Может в момент включения обогревателя проседает напряжение и происходит сбой. Надо будет проверить.Я читал что аруины зависают и их нужно перезагружать,даже устройства делают внешние на одном транзисторе.
Спасибо за ответ. Как Ваш проект,что говорили реализуете к весне?
Просто вопрос без просьб. Умеете делать из кода Basik блоки для FLProg? Это сложно? Что то может посоветуете почитать?
Есть пару видео в интернете,пару уроков но там не всё понятно, как организовать входа\выхода и что то там надо убирать из кода ,чтобы утилиты FLProg это дело брали на себя. У меня что то получается,но коряво и хоть и говорит программа что всё корректно, но не работает ничего.
Последний раз редактировалось Editor 10 фев 2026, 20:37, всего редактировалось 1 раз.
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Editor »

ecoins писал(а): 10 фев 2026, 20:21
Editor писал(а): 10 фев 2026, 19:34 Всем привет. В общем проект прост, обычный терморегулятор на ардуино нано. Не могу понять что происходит, уже два раз после включения работает недели две без проблем ,а потом вдруг включается и не выключается. После того как перезагрузил или обесточил и снова включил, всё снова работает пару недель и всё повторяется. Может кто может подсказать чём дело?
1.Это могут быть и помехи.
2.Но показалась странно, постоянная периодичность - две недели.
4.У Вас проблема похоже в проекте, который не может устойчиво работать на Nano.
Nano_OLED.png
5.У Вас занято 89% динамической памяти и есть предупреждения, что программа может работать не стабильно. Возможно у Вас версия 7.5.2 и тогда ситуация будет получше.
У меня и правда были мысли о помехах.Выше я ответил как всё меня устроено,скорее всего. Потому что в доме в прихожей у меня стоит такой же точно,но там есть и будильники когда включаться и регулировать температуру ,то есть код ещё больше и всё без сбоев.
Версия 8.2.3 ,в других код просто не лезет в ардуино нано. И да,они уже у меня заканчиваются ,а 2040 я ещё толком не освоил,но один уже в наличии есть.Спасибо за ответ.
Аватара пользователя
montirovka
Подполковник
Сообщения: 1320
Зарегистрирован: 15 фев 2021, 16:16
Откуда: Геленджик
Имя: Сергей
Благодарил (а): 161 раз
Поблагодарили: 519 раз

Re: Помогите разобраться

Сообщение montirovka »

Решил проверить объем занимаемый проектом в версия FLprog 8.2.3. В IDE нет библиотеки ASOLED.h. Библиотеку взял здесь.
При компиляции проект использует 54% памяти.
2026-02-11_07-32-25.png
Почему на картинке выше 89% под вопросом. Может у меня не та библиотека? Проверить нет возможности в связи с отсутствием дисплея.
По поводу сбоев. Залог правильной работы это экранирование и правильное питание. Сейчас сильный солнечный фон. Это то же не стоит исключать из факторов воздействующих на работу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Лейтенант
Сообщения: 403
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 134 раза

Re: Помогите разобраться

Сообщение lfgjikjjyj »

вероятно фрагментация памяти из за стринга
как вариант попробовать вставить отслеживание свободной оперативки
если стремится к нулю по мере непрерывной работы значит каждый раз выделяется новый участок памяти пока она не закончится

либо если это 328Р то сменить загрузчик на уно и добавить вачдог обязательно апаратный собственно для этого загрузчик и меняется
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Editor »

montirovka писал(а): 11 фев 2026, 08:03 Решил проверить объем занимаемый проектом в версия FLprog 8.2.3. В IDE нет библиотеки ASOLED.h. Библиотеку взял здесь.
При компиляции проект использует 54% памяти.
2026-02-11_07-32-25.png
Почему на картинке выше 89% под вопросом. Может у меня не та библиотека? Проверить нет возможности в связи с отсутствием дисплея.
По поводу сбоев. Залог правильной работы это экранирование и правильное питание. Сейчас сильный солнечный фон. Это то же не стоит исключать из факторов воздействующих на работу.
Попробую с этой библиотекой,может будет по меньше объем проекта.Спасибо.
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Editor »

lfgjikjjyj писал(а): 11 фев 2026, 09:07 вероятно фрагментация памяти из за стринга
как вариант попробовать вставить отслеживание свободной оперативки
если стремится к нулю по мере непрерывной работы значит каждый раз выделяется новый участок памяти пока она не закончится

либо если это 328Р то сменить загрузчик на уно и добавить вачдог обязательно апаратный собственно для этого загрузчик и меняется
Я конечно чему то уже научился в FLProg и уже не начинающий ,но не знаю как делать это отслеживание. Может оно и не понадобится, но хотелось бы знать ,может пригодится в будущем. Что и где прочесть ,посоветуйте.

Может посоветуете за одно какой то аппаратный вачдог?
Алиса предложила на таймере NE555 ,но может есть и другое ,более компактное решение?
Boggard
Рядовой
Сообщения: 76
Зарегистрирован: 23 дек 2020, 01:10
Имя: Андрей
Благодарил (а): 22 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Boggard »

Друзья, помогите пожалуйста! Есть задача. Считать от датчика , считать быстро. А он быстро считать ни как не хочет. Если прикрутить генератор ,считает ,зарраза, быстро ,а вот с кнопки ( тотже датчик (дифракционный ,ну это по стули ДА-НЕТ) Так же кнопка. чо ему нужно понять никак не могу! ЕСП32 ,типа быстро считать должен ,а он ...Прижмешь к минусу ,ждешь ,сработает ,отпустишь , прижмешь -ждешь -сработает... Ну , это ни в какие ворота. Есть способ ,как при простом касании минуса ,он бы тут же считал? Все пруфы ,вроде бы как приложил. Библиотека не влазит. ST7789_ESP8266_v1_3 Да ,не для 32ой ,но работает.

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

#include <TFT_eSPI.h>
TFT_eSPI tft= TFT_eSPI();
bool EN_31582123_5;
String Text_31582123_5;
int SIZE_31582123_5;
byte X_31582123_5;
byte Y_31582123_5;
bool EN_31582123_1;
String Text_31582123_1;
int SIZE_31582123_1;
byte X_31582123_1;
byte Y_31582123_1;
bool EN_31582123_2;
String Text_31582123_2;
int SIZE_31582123_2;
byte X_31582123_2;
byte Y_31582123_2;
bool EN_31582123_3;
String Text_31582123_3;
int SIZE_31582123_3;
byte X_31582123_3;
byte Y_31582123_3;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _bounseInputD14S = 0;
bool _bounseInputD14O = 0;
unsigned long _bounseInputD14P = 0UL;
bool _count1I = 0;
unsigned long _count1_Value = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _gen3I = 0;
bool _gen3O = 0;
unsigned long _gen3P = 0UL;
bool _tim3I = 0;
bool _tim3O = 0;
unsigned long _tim3P = 0UL;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _bounseInputD12S = 0;
bool _bounseInputD12O = 0;
unsigned long _bounseInputD12P = 0UL;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _count3I = 0;
bool _count3_SCST = 0;
int _count3_Value = 0;
bool _bounseInputD22S = 0;
bool _bounseInputD22O = 0;
unsigned long _bounseInputD22P = 0UL;
void setup()
{
    pinMode(14, INPUT_PULLUP);
    pinMode(12, INPUT_PULLUP);
    pinMode(22, INPUT_PULLUP);
    _bounseInputD22O =  digitalRead(22);
    _bounseInputD14O =  digitalRead(14);
    _bounseInputD12O =  digitalRead(12);
    tft.init(); // инициализация дисплея
        tft.setRotation(0); // вращение на90,180,240 градусов
        tft.fillScreen(TFT_BLUE); // заливка цветом
    Serial.begin(115200);
}
void loop()
{
    bool  _bounceInputTmpD22 =  (digitalRead (22));
    if (_bounseInputD22S)
    {
        if (millis() >= (_bounseInputD22P + 40))
        {
            _bounseInputD22O= _bounceInputTmpD22;
            _bounseInputD22S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD22 != _bounseInputD22O)
        {
            _bounseInputD22S=1;
            _bounseInputD22P = millis();
        }
    }
    bool  _bounceInputTmpD14 =  (digitalRead (14));
    if (_bounseInputD14S)
    {
        if (millis() >= (_bounseInputD14P + 40))
        {
            _bounseInputD14O= _bounceInputTmpD14;
            _bounseInputD14S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD14 != _bounseInputD14O)
        {
            _bounseInputD14S=1;
            _bounseInputD14P = millis();
        }
    }
    bool  _bounceInputTmpD12 =  (digitalRead (12));
    if (_bounseInputD12S)
    {
        if (millis() >= (_bounseInputD12P + 40))
        {
            _bounseInputD12O= _bounceInputTmpD12;
            _bounseInputD12S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD12 != _bounseInputD12O)
        {
            _bounseInputD12S=1;
            _bounseInputD12P = millis();
        }
    }
    //Плата:1
//Наименование:УСТАВКА
    EN_31582123_1 = !(0);
    Text_31582123_1 = String("UCTABKA");
    SIZE_31582123_1 = 4;
    X_31582123_1 = 40;
    Y_31582123_1 = 15;
    if(EN_31582123_1)
    {
         tft.setCursor(X_31582123_1, Y_31582123_1); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLUE); // цвет текста 
            tft.setTextSize(SIZE_31582123_1); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_31582123_1); // вывод текста
        delay(100);
    }
    if (!(_bounseInputD14O))
    {
         if (_tim1I) 
        {
             if (_isTimer(_tim1P, 1000)) 
            {
                _tim1O = 1;
            }
        }
         else 
        {
            _tim1I =1;
            _tim1P = millis();
        }
    }
     else 
    {
        _tim1O = 0;
        _tim1I = 0;
    }
    if (_tim1O) 
    {
         if (! _gen1I) 
        {
            _gen1I = 1;
            _gen1O = 1;
            _gen1P = millis();
        }
    }
     else 
    {
        _gen1I = 0 ;
        _gen1O= 0;
    }
    if (_gen1I) 
    {
          if (_isTimer (_gen1P , 60)) 
        {
             _gen1P = millis();
            _gen1O = ! _gen1O;
        }
    }
    if (!(_bounseInputD14O)) 
    {
         if (_trgrt4I) 
        {
             _trgrt4 = 0;
        }
         else 
        {
            _trgrt4 = 1;
            _trgrt4I = 1;
        }
    }
     else 
    {
        _trgrt4 = 0;
        _trgrt4I = 0;
    }
    ;
    if (!(_bounseInputD12O)) 
    {
         if (_trgrt1I) 
        {
             _trgrt1 = 0;
        }
         else 
        {
            _trgrt1 = 1;
            _trgrt1I = 1;
        }
    }
     else 
    {
        _trgrt1 = 0;
        _trgrt1I = 0;
    }
    ;
    if (!(_bounseInputD12O))
    {
         if (_tim3I) 
        {
             if (_isTimer(_tim3P, 1000)) 
            {
                _tim3O = 1;
            }
        }
         else 
        {
            _tim3I =1;
            _tim3P = millis();
        }
    }
     else 
    {
        _tim3O = 0;
        _tim3I = 0;
    }
    if (_tim3O) 
    {
         if (! _gen3I) 
        {
            _gen3I = 1;
            _gen3O = 1;
            _gen3P = millis();
        }
    }
     else 
    {
        _gen3I = 0 ;
        _gen3O= 0;
    }
    if (_gen3I) 
    {
          if (_isTimer (_gen3P , 250)) 
        {
             _gen3P = millis();
            _gen3O = ! _gen3O;
        }
    }
    if (((_gen1O) || (_trgrt4)))
    {
        if (! _count3I) 
        {
            _count3I = 1;
            _count3_Value = _count3_Value + 1;
        }
    }
     else 
    {
        _count3I = 0;
    }
    if (((_gen3O) || (_trgrt1)))
    {
        if (! _count3_SCST) 
        {
            _count3_SCST = 1;
            if(_count3_Value > 0) 
            {
                _count3_Value = _count3_Value - 1;
            }
        }
    }
     else 
    {
        _count3_SCST = 0;
    }
    if(_count3_Value <= 0) 
    {
        _count3_Value = 0;
    }
    EN_31582123_5 = !(0);
    Text_31582123_5 = (String(_count3_Value, DEC));
    SIZE_31582123_5 = 5;
    X_31582123_5 = 100;
    Y_31582123_5 = 70;
    if(EN_31582123_5)
    {
         tft.setCursor(X_31582123_5, Y_31582123_5); // x,y координаты текста
            tft.setTextColor(TFT_GREEN,TFT_BLUE); // цвет текста 
            tft.setTextSize(SIZE_31582123_5); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_31582123_5); // вывод текста
        delay(1);
    }
    //Плата:2
//Наименование:ДАТЧИК
    EN_31582123_2 = !(0);
    Text_31582123_2 = String("SCHETCHIK");
    SIZE_31582123_2 = 4;
    X_31582123_2 = 15;
    Y_31582123_2 = 135;
    if(EN_31582123_2)
    {
         tft.setCursor(X_31582123_2, Y_31582123_2); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLUE); // цвет текста 
            tft.setTextSize(SIZE_31582123_2); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_31582123_2); // вывод текста
        delay(100);
    }
    if (_bounseInputD22O)
    {
        if (! _count1I) 
        {
            _count1I = 1;
            _count1_Value = _count1_Value + 1;
        }
    }
     else 
    {
        _count1I = 0;
    }
    EN_31582123_3 = !(0);
    Text_31582123_3 = (String(_count1_Value, DEC));
    SIZE_31582123_3 = 4;
    X_31582123_3 = 80;
    Y_31582123_3 = 190;
    if(EN_31582123_3)
    {
         tft.setCursor(X_31582123_3, Y_31582123_3); // x,y координаты текста
            tft.setTextColor(TFT_GREEN,TFT_BLUE); // цвет текста 
            tft.setTextSize(SIZE_31582123_3); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_31582123_3); // вывод текста
        delay(1);
    }
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) 
    {
        return (currentTime>=(startTime + period));
    }
     else 
    {
        return (currentTime >=(4294967295-startTime+period));
    }
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
montirovka
Подполковник
Сообщения: 1320
Зарегистрирован: 15 фев 2021, 16:16
Откуда: Геленджик
Имя: Сергей
Благодарил (а): 161 раз
Поблагодарили: 519 раз

Re: Помогите разобраться

Сообщение montirovka »

А скоростной счетчик вам не подойдет?
slsl
Лейтенант
Сообщения: 403
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 30 раз
Поблагодарили: 76 раз

Re: Помогите разобраться

Сообщение slsl »

Editor писал(а): 11 фев 2026, 20:04
Может посоветуете за одно какой то аппаратный вачдог?
Алиса предложила на таймере NE555 ,но может есть и другое ,более компактное решение?
TPL5010DDCR
Editor
Рядовой
Сообщения: 41
Зарегистрирован: 17 авг 2025, 17:33
Имя: Ашот
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Помогите разобраться

Сообщение Editor »

slsl писал(а): 12 фев 2026, 10:21
Editor писал(а): 11 фев 2026, 20:04
Может посоветуете за одно какой то аппаратный вачдог?
Алиса предложила на таймере NE555 ,но может есть и другое ,более компактное решение?
TPL5010DDCR
Неожиданно! И дёшево. Спасибо. :)
Ответить

Вернуться в «Спросить у знатоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя