我正在尝试创建一个程序,从 sd 播放音乐,然后通过红外控制器控制房间的灯光。我需要能够在播放音乐时向灯泡发送红外信号。 然后我会添加一个操纵杆来选择音乐和颜色或灯光,但这是下一步(目前是婴儿步骤,我还在学习,这是我的第一个项目)。
我写了下面的草图。我已将所有内容都放在设置部分,因为我只是在进一步测试之前测试不同的功能。
IR let 连接到引脚 3,sd CS 连接到引脚 4
#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. for IR remote librairy
#include <IRremote.hpp>
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> // need to include the SPI library
TMRpcm tmrpcm;
void setup() {
tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
Serial.begin(9600);
Serial.println("Light on");
IrSender.sendNEC(0x0, 0x45, 10);
if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
{
Serial.println("SD fail");
return;
}
tmrpcm.setVolume(3); //
Serial.println("Music Start");
tmrpcm.play("Forest.wav");
delay(2000);
// tmrpcm.disable();
IrSender.sendNEC(0x0, 0x47, 10);
Serial.println("Light Off");
delay(5000);
tmrpcm.disable();
Serial.println("Music Off");
}
void loop() {
// put your main code here, to run repeatedly:
}
上传代码时,灯亮,音乐开始,但音乐开始后灯不会熄灭。如果我取消注释“// tmrpcm.disable();”灯熄灭了,但我停止了音乐,这不是我想要的。
看论坛,好像是两个库之间的冲突。我已经尝试将 tmrpcm 配置为仅使用计时器 2(通过取消注释配置文件中的命令(“#define USE_TIMER2”),然后将扬声器连接到引脚 3,但它不起作用。
我已经设法为 IR LED 使用了一个非 pwd 引脚(例如引脚 7)它确实打开了灯,但在关闭它时也出现了同样的问题。这很奇怪,因为我虽然通过使用引脚 7 我没有使用定时器 2,所以应该没有任何问题。
我也尝试过使用我发现的一些代码,据说可以在没有定时器的情况下发送红外信号,但从未设法让它们工作。
我的想法已经用完了,理想情况下我不想使用另一块板(然后我可以向第二块板发出信号来播放音乐),因为我需要降低成本。我想我想要实现的目标在 Arduino 中是可行的。
感谢您的帮助。
米歇尔