Добрый день. Плата должна включать/отключать нагреватель в зависимости от температуры. А также параллельно записывать ЛОГ файл на СД карту. Проблема - спустя 1,5-2 часа работы плата полностью встает, либо начинает записывать какую то ерунду на СД карту. В чем может быть проблема. Код прикладываю. Код (C++): #include "pin_map.h" #include "settings.h" // библиотека для работы I²C #include <Wire.h> #include <SPI.h> #include <SD.h> #include <TimerOne.h> // библиотека для работы с метеосенсором #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> // создаём объект для работы с датчиком в камере Adafruit_BME280 bme; // Переменные для хранения метеоданных volatile float pressure = 0; volatile float temperature = 0; volatile float humidity = 0; unsigned long timestampTelemetryWrite = 0; //переменные для диода boolean InitSD; boolean InitMeteo; void writeSD(String str) { File logFile = SD.open("log1.txt", FILE_WRITE); // if the file is available, write to it: if (logFile) { logFile.println(String(millis()) + ":::" + " "+ str); logFile.close(); Serial.println("Write to log1.txt---OK"); InitSD = true; } // if the file isn't open, pop up an error: else { Serial.println("error opening log1.txt"); InitSD = false; } } void initMeteoSensor() { // печатаем сообщение об успешной инициализации Serial-порта Serial.println("Meteo begin init..."); writeSD("Meteo begin init..."); // начало работы с датчиком unsigned status; status = bme.begin(0x76); if (!status) { Serial.println("Meteo Sensor init FAIL"); writeSD("Meteo Sensor init FAIL"); InitMeteo = false; } else { Serial.println("Meteo Sensor init OK"); writeSD("Meteo Sensor init OK"); InitMeteo = true; } } void updateSensorData() { pressure = bme.readPressure() / 100.0f; temperature = bme.readTemperature(); humidity = bme.readHumidity(); } void warmControl() { Serial.println("Temperature in camera:" + String(temperature)); writeSD("Temperature in camera:" + String(temperature)); // Если температура ниже минимальной if (temperature < TEMPERATURE_IN_CAMERA_MIN) { // то включаем подогрев digitalWrite(WARM_CONTROL_PIN, ON); Serial.println("Warm is ON"); Serial.println("Write WARM_CONTROL_PIN = " + String(ON)); writeSD("Warm is ON"); } // Если больше максимальной else if (temperature > TEMPERATURE_IN_CAMERA_MAX) { // То выключаем подогрев digitalWrite(WARM_CONTROL_PIN, OFF); Serial.println("Warm is OFF"); Serial.println("Write WARM_CONTROL_PIN = " + String(OFF)); writeSD("Warm is OFF"); } else { /* code */ } if (millis() - timestampTelemetryWrite > TELEMETRY_DELAY_MS) { Serial.println("Telemetry Write Start"); writeSD("Telemetry Write Start"); String result = ""; result += String(millis()/60000); result += ":min"; result += ":::"; result += " TemperatureInCamera = " + String(temperature) + " "; result += " PressureInCamera = " + String(pressure) + " "; result += " HumidityInCamera = " + String(humidity) + " "; result += "\n"; Serial.println(result); File dataFile = SD.open("datalog1.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.println(result); dataFile.close(); Serial.println("Write to datalog1.txt---OK"); } // if the file isn't open, pop up an error: else { Serial.println("error opening datalog1.txt"); } timestampTelemetryWrite = millis(); Serial.println("Telemetry Write End"); writeSD("Telemetry Write End"); } } void setup() { Serial.begin(115200); // Init Sensor initMeteoSensor(); if (!SD.begin(SD_CARD_ENABLE_PIN)) { Serial.println("Card failed, or not present"); // don't do anything more: } Serial.println("card initialized."); // Настройка пина управления подогревателем pinMode(WARM_CONTROL_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); } void loop() { static unsigned long timestampSensorUpdate = 0; static unsigned long warmControlTimestamp = 0; if (millis() - warmControlTimestamp > 1000) { // контроль температуры в барокамере //Serial.println("warmControl"); //writeSD("warmControl"); warmControl(); warmControlTimestamp = millis(); } if (millis() - timestampSensorUpdate > 1000) { updateSensorData(); timestampSensorUpdate = millis(); } if (InitSD and InitMeteo) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } } Господа, заранее спасибо!