Как заставить MP3-плеер YX5300 воспроизводить песни в цикле?
Я делаю рождественский проект, и у меня есть ультразвуковой датчик, который определяет, находится ли перед ним человек. Я хочу, чтобы, если кто-то находится перед ним, он зажигал светодиоды, что он и делает, и он также должен был играть рождественскую песню, чего он не делает. Я пытался заставить его играть рождественскую песню, но ничего не происходит. Кроме того, светодиоды мигают только тогда, когда вы подносите руку к ультразвуковому датчику. Я хочу, чтобы светодиоды загорались на то же время, что и песня, 28 секунд, затем светодиоды должны останавливаться, а ультразвуковой датчик должен ждать другого человека, и это повторяется. Я новичок в этом, поэтому, пожалуйста, будьте конкретны в своих рекомендациях. Вот мой код:
#define trigPin 10
#define echoPin 13
#include <SoftwareSerial.h>
#define ARDUINO_RX 7//должен подключаться к TX модуля Serial MP3 Player
#define ARDUINO_TX 6//подключиться к RX модуля
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);
static int8_t Send_buf[8] = {0} ;
#define CMD_SEL_DEV 0X09
#define DEV_TF 0X02
#define CMD_PLAY_W_VOL 0X22
#define CMD_PLAY 0X0D
#define CMD_PAUSE 0X0E
#define CMD_PREVIOUS 0X02
#define CMD_NEXT 0X01
int red1 = 5;
int red2 = 4;
int green1 = 3;
int green2 = 2;
long lCnt = 0;
unsigned long lStart;
void setup(){
Serial.begin (9600);
mySerial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(red1,OUTPUT);
pinMode(red2,OUTPUT);
pinMode(green1,OUTPUT);
pinMode(green2,OUTPUT);
delay(500);//ждем завершения инициализации чипа
sendCommand(CMD_SEL_DEV, DEV_TF);//выбираем карту TF
delay(200);//ждать 200 мс
}
void loop(){
float duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) * 0.0344;
if(distance > 0 && distance <=60){
digitalWrite(red1,HIGH);
delay(50);
digitalWrite(red2,HIGH);
digitalWrite(green1,HIGH);
delay(50);
digitalWrite(red1,LOW);
delay(50);
digitalWrite(red2,LOW);
digitalWrite(green2,HIGH);
delay(50);
digitalWrite(green1,LOW);
digitalWrite(green2,LOW);
delay(50);
sendCommand(CMD_PLAY_W_VOL, 0X1E01);
}
}
void sendCommand(int8_t command, int16_t dat)
{
delay(20);
Send_buf[0] = 0x7e; //начальный байт
Send_buf[1] = 0xff; //версия
Send_buf[2] = 0x06; //количество байтов команды без начального байта и конечного байта
Send_buf[3] = command; //
Send_buf[4] = 0x00;//0x00 = нет обратной связи, 0x01 = обратная связь
Send_buf[5] = (int8_t)(dat >> 8);//данные
Send_buf[6] = (int8_t)(dat); // дата
Send_buf[7] = 0xef; //конечный байт
for(uint8_t i=0; i<8; i++)//
{
mySerial.write(Send_buf[i]) ;
}
}
Спасибо
@elimar008, 👍0
1 ответ
Я думаю, вы хотите использовать команду [Воспроизведение одного цикла]
, которая имеет вид 7E FF 06 08 00 00 01 EF
(00 01
ближе к концу номер песни для воспроизведения).
Все команды подробно описаны в руководстве.
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
- Какой тип разъема использует система GROVE?
- Улавливают ли ультразвуковые датчики прозрачные материалы?
- Как подключить более 10 датчиков к Arduino uno r3
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
Где я должен поместить это в свой код?, @elimar008
@ elimar008 вместо вашей текущей команды воспроизведения. Вы также можете добавить команду установки громкости., @Majenko