Как заставить 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]) ;
  }
}

Спасибо

, 👍0


1 ответ


1

Я думаю, вы хотите использовать команду [Воспроизведение одного цикла], которая имеет вид 7E FF 06 08 00 00 01 EF (00 01 ближе к концу номер песни для воспроизведения).

Все команды подробно описаны в руководстве.

,

Где я должен поместить это в свой код?, @elimar008

@ elimar008 вместо вашей текущей команды воспроизведения. Вы также можете добавить команду установки громкости., @Majenko