Попытка сохранить файлы .wav с новым именем в каждом цикле.

Я построил установку с Arduino UNO, подключенной к переключателю, так что всякий раз, когда переключатель переключается с ВЫСОКОГО на НИЗКИЙ, звук сохраняется на SD-карту. Я использую библиотеку TMRpcm. Проблема в том, что текущий код сможет записать только 1 аудиофайл; Я хочу, чтобы Arduino работал в течение длительного периода времени, собирая несколько аудиофайлов при включении и выключении переключателя. Мне нужен способ, который позволит это сделать так, чтобы каждый раз, когда переключатель нажимался обратно, следующий сохраненный файл имел другое имя, чем имя ранее сохраненного (желательно увеличенное числовое значение, например «1.wav» и «2.wav» ). Я попробовал audio.startRecording(audiofile+".wav", 16000, A0);, и в результате ни один файл, сохраняемый на SD-карту, не принимает пустой файл с простым названием «WAV». Я пробовал использовать переключатель, но он не позволит мне достичь значения более 10 без исчерпания оперативной памяти. В настоящее время мой код может сохранить 1 аудиофайл, но я хочу, чтобы он достиг точки, когда он может сохранять столько, сколько может вместить SD-карта, без необходимости перезапуска программного обеспечения .

Мой текущий код находится здесь. Любая помощь будет принята с благодарностью

///////////////////////////////////////// SD КАРТА
#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>
#define SD_ChipSelectPin 10
TMRpcm audio;
///////////////////////////////////////// СЛУЧАЙ ПЕРЕКЛЮЧАТЕЛЯ
int audiofile = 0;     // номер записи
unsigned long i = 0;
bool recmode = 0;      // состояние записи
//////////////////////////////////////// ВЫКЛЮЧАТЕЛЬ
int inPin = 2;         // входной контакт переключателя
int state = HIGH;      // переключатель текущего состояния
int reading;           // текущее чтение с коммутатора

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);  // Микрофон
  pinMode(inPin, INPUT_PULLUP); // Выключатель
  //////////////////////////////////////// SD CARD
  SD.begin(SD_ChipSelectPin);
  audio.CSPin = SD_ChipSelectPin;
}

void loop() {

  reading = digitalRead(inPin);
  /////////////////////////////////////////////////////////////////////////////////
  while (i < 300000) {
    i++;
  }
  i = 0;
  /////////////////////////////////////////////////////////////////////////////////
  if (reading == LOW) {
    if (recmode == 0) {
      recmode = 1;

      Serial.println("Recording");

      audiofile++; // Чтобы переместить регистр
      audio.startRecording("1.wav", 16000, A0);
    }
  }
  /////////////////////////////////////////////////////////////////////////////////
  else if (reading == HIGH) {
    recmode = 0;

    Serial.println("Hung-Up");
    audio.stopRecording("1.wav");
  }
}      

, 👍0

Обсуждение

Вы не можете просто добавить целое число к строковому литералу с помощью audiofile + ".WAV" из-за разных типов. Но вы можете использовать буфер char и sprintf("%i.WAV",audiofile);, @chrisl

Также вопрос: https://forum.arduino.cc/index.php?topic=587263. Если вы собираетесь это сделать, пожалуйста, будьте достаточно внимательны, чтобы добавить ссылки на другие места, где вы размещаете перекрестные публикации. Это позволит нам избежать траты времени из-за дублирования усилий, а также поможет другим, у кого возникнут такие же вопросы и кто найдет ваше сообщение, найти всю необходимую информацию., @per1234

@chrisl Большое спасибо, это почти решило все мои проблемы!, @TSauer52

@per1234 мои извинения. На сегодняшний день я новичок на форумах и изучаю основные правила их правильного использования. Спасибо за внимание!, @TSauer52


1 ответ


Лучший ответ:

1

Я бы использовал (и использую) snprintf для форматирования строки как имени файла:

// Глобальная область видимости или локальная статическая
uint32_t myFileNumber = 1;
char filename[12];

// в вашей функции - результат 00000001.WAV
snprintf(filename, 12, "%08d.WAV", myFileNumber);

%08d допускает диапазон от 00000000.WAV до 99999999.WAV и всегда с 8 цифрами. Еще немного — и он будет усечен и поврежден (100000000.WA), но не приведет к переполнению буфера. Вам придется принять меры предосторожности, чтобы у вас никогда не было более 100 миллионов файлов ;)

,