I have the speaker working with the tmrpcm.play working, but this only plays when the arduino is powered up or reset. Can i make the .wav play in anther other ways? I wan't the file to play when i open a closet and my LDR resistor is affected by light.

#include <SD.h>                           //include SD module library
#include <TMRpcm.h>                       //include speaker control library

#define SD_ChipSelectPin 4                //define CS pin

TMRpcm tmrpcm;                            //crete an object for speaker library

const int ledPin = 8;
const int buzzerPin = 10;
const int ldrPin = A0;
int ledState = LOW;  
int buzstate = 600;
unsigned long previousMillis = 0;        

int ldrStatus = analogRead(ldrPin);  //read the state of the LDR value

const long interval = 400; 

void setup () {

  tmrpcm.speakerPin = 9;    

  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ldrPin, INPUT);
void LedAndBuzzer(){
   unsigned long currentMillis = millis();
  int ldrStatus = analogRead(ldrPin);  //read the state of the LDR value

 if (ldrStatus >= 400) {

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
    digitalWrite(buzzerPin, ledState);
void soundon(){
    if (!SD.begin(SD_ChipSelectPin)) {      //see if the card is present and can be initialized
    return;                               //don't do anything more if not
  else {
  tmrpcm.setVolume(6);                    //0 to 7. Set volume level
  tmrpcm.play("4.wav"); }
void loop() {

  • Yes, that is totally possible. You need to write the code for it. What have you tried so far? Do you know how to read an LDR? Have you searched for tutorials? – chrisl May 4 at 19:27
  • @chrisl thanks for the respons, yes i have googled a lot, but im quite new to programming and working with the arduino. This is the code (updated the post) that in working on right know. There is one more element than my original question, i want it to start the led/buzzer loop at the same time as the .wav file is played. Is this posible? – Elisabot May 4 at 19:41
  • Is tmrpcm.play() a blocking function? – Fahad May 4 at 23:13
  • @Fahad i don't know what that means – Elisabot May 5 at 5:50
  • 1
    @Fahad tmrpcm.play() is non blocking. It starts playing then tmrpcm.stopPlayback() stops the music and tmrpcm.isPlaying() return the state of the player. – Dorian May 5 at 9:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.