【问题标题】:Playing a wav sample on Arduino when a button is pressed按下按钮时在 Arduino 上播放 wav 样本
【发布时间】:2019-04-25 11:33:31
【问题描述】:

每当按下按钮但没有成功时,我一直在努力制作一个 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()
{

【问题讨论】:

    标签: audio arduino sample


    【解决方案1】:

    您的所有代码都在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");
      }
    

    【讨论】:

    • 您好,谢谢您的回答!现在它至少会发出一点哔哔声并确认按下的按钮,但它仍然没有播放完整的样本。你知道为什么会这样吗?
    • @saniv 这是一个开始!我编辑了我的答案,以纠正我认为您的问题来自何处。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多