Воспроизведение сэмпла WAV на Arduino при нажатии кнопки - PullRequest
0 голосов
/ 25 апреля 2019

Я изо всех сил пытался заставить Arduino воспроизводить сэмплы (загруженные на SD-карту и подключенные к плате Arduino Uno) при каждом нажатии кнопки, но безуспешно.Когда я запускаю код, он не ждет нажатия кнопки, он сразу начинает воспроизводить семпл.

Он даже не распознает, что кнопка была нажата.Однако это прекрасно работает, когда я просто заставляю играть разные частоты через зуммер.Но как только я переключаюсь на сэмплы wav вместо базовых частот, он не хочет работать.

#include <SD.h> //Include the library.
#include <TMRpcm.h> //Include the library.

TMRpcm tmrpcm; //Creating a player object.
const int chipSelect = 4;


void setup()
{

  pinMode(9,INPUT);

  Serial.begin(9600); //Initializing serial port. Speed 9600.
  if(!SD.begin(chipSelect)) //If the card is available.
  {
    Serial.println("SD fail"); //Write in the serial port "SD fail".
    return; //Return.
  }
  Serial.println("SD working");

  if(digitalRead(9)==1){  
  tmrpcm.play("transMono1.wav"); //Play music file 
   Serial.println("button 1 pressed");
  }
}

void loop()
{

1 Ответ

0 голосов
/ 25 апреля 2019

Весь ваш код находится в setup, поэтому он будет запущен только один раз.Если вы хотите, чтобы состояние кнопки проверялось несколько раз, попробуйте ввести

if(digitalRead(9)==1){  
  tmrpcm.play("transMono1.wav"); //Play music file 
  Serial.println("button 1 pressed");
  }

в loop().

Кроме того, из TMRPCM Reference , образцывоспроизводятся асинхронно , поэтому вам также необходимо проверить, что ваш предыдущий семпл закончен, прежде чем пытаться воспроизвести его снова.В библиотеке есть метод проверки:

if(digitalRead(9)==1 && !tmrpcm.isPlaying()) //check if button is pressed, and nothing is playing.
  {  
    tmrpcm.play("transMono1.wav"); //Play music file 
    Serial.println("button 1 pressed");
  }
...