Untitled

mail@pastecode.io avatar
unknown
c_cpp
a month ago
2.9 kB
1
Indexable
Never
Чтобы добавить ограничение на общее время записи в 15 секунд, вам нужно включить дополнительную проверку времени в основной цикл записи. Это гарантирует, что запись прекратится, если общее время записи достигнет 15 секунд, даже если в это время идет речь.

Давайте модифицируем предыдущий код, добавив условие для ограничения общего времени записи:

```cpp
#include <SD.h>
#include <SPI.h>

const int chipSelect = 4; // Пин CS для SD-карты
const int micPin = A0;    // Пин подключения микрофона
const int silenceThreshold = 20; // Пороговое значение для детектирования тишины
const unsigned long maxSilenceDuration = 3000; // Максимальная продолжительность тишины (3 секунды)
const unsigned long maxRecordingTime = 15000; // Максимальное время записи (15 секунд)

void setup() {
  Serial.begin(9600);
  pinMode(micPin, INPUT);

  if (!SD.begin(chipSelect)) {
    Serial.println("Ошибка инициализации SD-карты");
    return;
  }

  File dataFile = SD.open("audio.txt", FILE_WRITE);

  if (dataFile) {
    unsigned long silenceStart = 0;
    unsigned long recordingStart = millis();
    bool isSilent = false;

    while (true) {
      if (millis() - recordingStart > maxRecordingTime) {
        break; // Прекращаем запись после 15 секунд
      }

      int micValue = analogRead(micPin);
      dataFile.println(micValue);

      if (micValue < silenceThreshold) {
        if (!isSilent) {
          isSilent = true;
          silenceStart = millis();
        } else if (millis() - silenceStart > maxSilenceDuration) {
          break; // Прекращаем запись после 3-5 секунд тишины
        }
      } else {
        isSilent = false;
      }

      delay(10); // Задержка для контроля частоты дискретизации
    }

    dataFile.close();
  } else {
    Serial.println("Ошибка открытия файла");
  }
}

void loop() {
  // Ничего не делаем в loop
}
```

Этот код теперь учитывает два условия для завершения записи: превышение максимального времени тишины (3-5 секунд) и превышение общего времени записи (15 секунд). Таким образом, запись будет остановлена, если любое из этих условий будет выполнено.
Leave a Comment