Зависание arduino uno

Вы можете поставить этот флаг в false, и тогда delay не будет. Но вам нужно будет самому выдержать положенное время, между функциями requestTemperatures и getTemp

Спасибо за разъяснения, но всё равно ведь, в коде у ТС этого нет

Это да. Но, согласитесь, это никак не может ввести Ардуино в полное зависание.
А в коде у ТС не мало ошибок, которые, нужно ступенчато исправлять. Советов дали много.

Ну, во-первых, провода никогда не рисуют поверх микросхемы или блока.
Ошарашивает.
У Вас обмотки реле подключены непосредственно к пинам Ардуины?
Как-то странно включен транзистор датчика движения.
Какое отношение имеет температура к потенциометру?

ИМХО, очень даже может . Хотя, больше разговоров. Проверить, так ли это дело 10мин

P.S. Глянул схему , по реле - жестковато конечно

А можно выдерживать время для BMP180, чтобы от delay() избавиться?

Если ко мне вопрос, то да, конечно можно. Без разницы для чего. Поищите темы по запросу “Blink без delay ардуино”,
“Как избавиться от delay” и.т.д.
Тема на форуме
https://forum.arduino.ru/t/primer-blink-migaem-svetodiodom/9361

Вопрос и к Вам, и может кто подключится еще.
Blink без delay - там все понятно. Я это использую. А вот с BMP180 неясности. Предполагаю, что millis() надо использовать, только вот в какой момент? Скоро выложу сюда скетч на базе примера.

Плюс еще эту

в Loop() например, в непрерывном цикле. Суть в том, что Делей блокирует программу на время задержки, а тут мы просто быстро-быстро проверяем условие: время прошло? - нет, выполняем остальное.

На этом собственно работает принцип простой многозадачности: есть условие? -выполнили; проверяем следующее, но без задержек и ожиданий. И по кругу.

все время

с этого надо было начинать

Вот скетч на базе примера.

Неясности в следующем:
тип переменной status в строке 6,
как избавиться от delay() в строке 41,
как избавиться от delay() в строке 54.

#include <SFE_BMP180.h>

SFE_BMP180 pressure;

//для BMP180
char status;
double T, P;

bool trigger;
unsigned long moment_13;
unsigned long momentBMP180;


float cur_t, cur_p;

void setup()
{
  pinMode(13, OUTPUT);
  digitalWrite(13, 0);
  pressure.begin();
  Serial.begin(9600);
}

void loop()
{

  if (millis() - moment_13 >= 500) // мигание диода;
  {
    moment_13 = millis();
    trigger = !trigger;
    digitalWrite(13, trigger);
  }

  if (millis() - momentBMP180 >= 3000)
  {
    momentBMP180 = millis();

    status = pressure.startTemperature();
    if (status != 0)
    {
      delay(status);
      status = pressure.getTemperature(T);
      if (status != 0)
      {
        //Переменная T скоро испортится.
        //ее надо срочно прочитать
        if (T > 0)
        {
          cur_t = T;
        }
        status = pressure.startPressure(3);
        if (status != 0)
        {
          delay(status);
          status = pressure.getPressure(P, T);
          if (status != 0)
          {
            //получаем текущее давление P и переводим миллибары в мм рт. ст.
            cur_p = P * 0.750063783; //миллибары в мм рт. ст.
            String s_s = String(cur_t, 2);
            s_s += " ";
            s_s += String(cur_p, 2);
            Serial.println(s_s);
          }
        }
      }
    }
  }
}

Так написано же «char». Размер 1 байт. Это гуглится на раз.

А зачем?

А как тогда понимать вот это: delay(status);?
в delay() передается char.

И что вас смущает? Что передается? Или что char?

Смущает то, что передается char, а не, например, byte.

Чтобы программа в этом месте не задерживалась, а просто показать каким-то образом, что строка 42 (55) начала выполняться в такое-то время.

А ВНИМАТЕЛЬНЕЕ ЧИТАТЬ???

Или нужно мне было написать byte? По русски вроде понимаете…

Нужно внимательнее быть - это раз. И более детально изучать программирование, коли Вы сюды «вляпались». 1 байт - это МАКСИМАЛЬНО значение в 255. То есть если там в status «прилетело» 255 - это значит, что задержка будет 255 мс, а это всего 1/4 СЕКУНДЫ. Но скорее всего гораздо меньше.

Не нужно лезть туда, где не понимаешь. Лучше переформулировать и задать вопрос правильно. Вам нахуа избавление от делей в этом коде?

Привлекло #41.

Так всё там правильно написано. Но пока Вы 1 байт не знаете как в коде выражается - не беритесь за такие проекты. Не зря изначально начинающим говорят поморгать диодом и двигаться по нарастающей. Ну и книжки читать нужно. По программированию С++.