Проблема с библиотекой TMRpcm.

Тема в разделе "Arduino & Shields", создана пользователем Fendragon, 1 сен 2019.

  1. Fendragon

    Fendragon Нуб

    Я скачал библиотеку TMRpcm и попробовал скомпилировать скетч
    Код (C++):
    #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;

    void setup() {
      pinMode(A0, INPUT);
      pinMode(6, OUTPUT);
      pinMode(2, INPUT_PULLUP);
      attachInterrupt(0, button, LOW);
      SD.begin(SD_ChipSelectPin);
      audio.CSPin = SD_ChipSelectPin;

    }

    void loop() {
    }

    void button() {
      while (i < 300000) {
        i++;
      }
      i = 0;
      if (recmode == 0) {
        recmode = 1;
        audiofile++;
        digitalWrite(6, HIGH);
        switch (audiofile) {
          case 1: audio.startRecording("1.wav", 16000, A0); break;
          case 2: audio.startRecording("2.wav", 16000, A0); break;
          case 3: audio.startRecording("3.wav", 16000, A0); break;
          case 4: audio.startRecording("4.wav", 16000, A0); break;
          case 5: audio.startRecording("5.wav", 16000, A0); break;
          case 6: audio.startRecording("6.wav", 16000, A0); break;
          case 7: audio.startRecording("7.wav", 16000, A0); break;
          case 8: audio.startRecording("8.wav", 16000, A0); break;
          case 9: audio.startRecording("9.wav", 16000, A0); break;
          case 10: audio.startRecording("10.wav", 16000, A0); break;
        }
      }
      else {
        recmode = 0;
        digitalWrite(6, LOW);
        switch (audiofile) {
          case 1: audio.stopRecording("1.wav"); break;
          case 2: audio.stopRecording("2.wav"); break;
          case 3: audio.stopRecording("3.wav"); break;
          case 4: audio.stopRecording("4.wav"); break;
          case 5: audio.stopRecording("5.wav"); break;
          case 6: audio.stopRecording("6.wav"); break;
          case 7: audio.stopRecording("7.wav"); break;
          case 8: audio.stopRecording("8.wav"); break;
          case 9: audio.stopRecording("9.wav"); break;
          case 10: audio.stopRecording("10.wav"); break;
        }
      }
    }
    Но мне выдало ошибку. Якобы в этой библиотеке нет метода startRecording.
    Попробовал загрузить пример из библиотеки , но там тоже выдает ошибку.
    Код (C++):
    /*
    This sketch demonstrates recording of standard WAV files that can be played on any device that supports WAVs. The recording
    uses a single ended input from any of the analog input pins. Uses AVCC (5V) reference currently.

    Requirements:
    Class 4 or 6 SD Card
    Audio Input Device (Microphone, etc)
    Arduino Uno,Nano, Mega, etc.

    Steps:
    1. Edit pcmConfig.h
        a: On Uno or non-mega boards, #define buffSize 128. May need to increase.
        b: Uncomment #define ENABLE_RECORDING and #define BLOCK_COUNT 10000UL

    2. Usage is as below. See https://github.com/TMRh20/TMRpcm/wiki/Advanced-Features#wiki-recording-audio for
       additional informaiton.

    Notes: Recording will not work in Multi Mode.
    Performance is very dependant on SD write speed, and memory used.
    Better performance may be seen using the SdFat library. See included example for usage.
    Running the Arduino from a battery or filtered power supply will reduce noise.
    */


    #include <SD.h>
    #include <SPI.h>
    #include <TMRpcm.h>

    #define SD_ChipSelectPin 53  //example uses hardware SS pin 53 on Mega2560
    //#define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins

    TMRpcm audio;   // create an object for use in this sketch

    void setup() {
     
      audio.speakerPin = 11; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
      pinMode(12,OUTPUT);  //Pin pairs: 9,10 Mega: 5-2,6-7,11-12,46-45
     
      Serial.begin(115200);
     
      if (!SD.begin(SD_ChipSelectPin)) {
        return;
      }else{
        Serial.println("SD OK");
      }
      // The audio library needs to know which CS pin to use for recording
      audio.CSPin = SD_ChipSelectPin;
    }


    void loop() {
     
        if(Serial.available()){                          //Send commands over serial to play
          switch(Serial.read()){
            case 'r': audio.startRecording("test.wav",16000,A0); break;    //Record at 16khz sample rate on pin A0
            case 'R': audio.startRecording("test.wav",16000,A0,1); break;  //Record, but with passthrough to speaker.
            case 't': audio.startRecording("test.wav",16000,A0,2); break;  //Do not record. Output direct to speaker
                                               //Note: If samples are dropped before writing, it
                                               //      will not be heard in passthrough mode
            case 's': audio.stopRecording("test.wav"); break;              //Stop recording
            case 'p': audio.play("test.wav"); break;                       //Play the recording
            case '=': audio.volume(1); break;                              //Increase volume by 1. Does not affect recording
            case '-': audio.volume(0); break;                              //Decrease volume by 1. Does not affect recording
            case 'S': audio.stopPlayback(); break;                         //Stop all playback
           
          }
        }
    }

    Скачивал с сайта https://radioprog.ru/post/270#download.
     
  2. Asper Daffy

    Asper Daffy Иксперд

    А от нас-то чего хочешь? Просто сообщить решил? Или вопрос какой есть?
     
  3. b707

    b707 Гуру

    Fendragon - в том самом примере, что вы привели - в комментарии написано, как его запускать, чтобы этой ошибки не было. Вы эти рекомендации выполнили?
     
  4. Fendragon

    Fendragon Нуб

    Простите но в комментариях к данному примеру я нашел лишь системные требования , например тип карты. А а на счет этой ошибки нет . Там еще дается ссылка на сайт с примерами , но там просто описываются команды. А про возможные проблемы с этими командами нет.
     
  5. b707

    b707 Гуру

    хм... а вот я вижу рекомендации. которые надо выполнить.
     
  6. Fendragon

    Fendragon Нуб

    Пожалуйста можете скопировать именно те указания, раз я такой слепой. Заранее спасибо.
     
  7. Daniil

    Daniil Гуру

    Сова просит посмотреть не комментарии к примеру, а комментарии в примере. Сверху красным по голубому написано:
    "Notes: Recording will not work...".
    Добавлено.
    Хотя, в примере есть описанные вами параметры карточки и ссылка на пример:eek:мы разные комментарии читаем?
     
  8. Fendragon

    Fendragon Нуб

    Это я прочитал , но все равно не понимаю что надо делать для того чтобы пропала ошибка.
     
  9. b707

    b707 Гуру

    да вы что, реально слепые все? :)
    Написано же ясным языком:

    Steps:
    1. Edit pcmConfig.h
    a: On Uno or non-mega boards, #define buffSize 128. May need to increase.
    b: Uncomment #define ENABLE_RECORDING and #define BLOCK_COUNT 10000UL

    Пока вы не включите макрос ENABLE_RECORDING, у вас никаких методов, связанных с записью(Recording), в библиотеке не появится. Особенно ТС касается - как же надо невнимательно читать, чтобы даже после прямой подсказки не увидеть этих настроек??
     
    Daniil и Andrey12 нравится это.