Привет, дрзья, давненько я здесь не был.)
Ну-ну, вот_вот с большой, привет.
Нужно просто чтобы плейлист выводился в монитор,
Далее просто при i++ следующий трек гавакал. а при i=i-1; пред. И хорошо бы, друзья мои, чтобы можно было паузу делать и начинать стой же папке
#include <SoftwareSerial.h>
#define ARD_RX 8 // подключить к TX модуля
#define ARD_TX 9 // подключить к RX модуля
#define BUTTON_PIN 2 // кнопка к GND (INPUT_PULLUP)
SoftwareSerial mp3(ARD_RX, ARD_TX);
uint8_t sendBuf[8];
void sendCommand(uint8_t cmd, uint8_t p1 = 0, uint8_t p2 = 0) {
sendBuf[0] = 0x7E;
sendBuf[1] = 0xFF;
sendBuf[2] = 0x06;
sendBuf[3] = cmd;
sendBuf[4] = 0x01; // feedback on (можно 0x00 если не нужно)
sendBuf[5] = p1;
sendBuf[6] = p2;
sendBuf[7] = 0xEF;
for (uint8_t i = 0; i < 8; ++i) mp3.write(sendBuf[i]);
}
// DFPlayer команды
#define CMD_PLAY_TRACK 0x03
#define CMD_SEL_DEV 0x09
#define CMD_FOLDER_CYCLE 0x17
#define CMD_PAUSE 0x0E
#define CMD_START 0x0D // resume
#define DEV_TF 0x02
// Debounce
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
int lastButtonState = HIGH;
int buttonState = HIGH;
// Pause state machine (non-blocking)
enum PauseState { IDLE, PAUSED_WAIT };
PauseState pauseState = IDLE;
unsigned long pauseStartMillis = 0;
const unsigned long pauseDuration = 55000UL; // 55 секунд
void setup() {
Serial.begin(9600);
mp3.begin(9600);
// выбрать TF (SD) на DFPlayer
sendCommand(CMD_SEL_DEV, 0, DEV_TF);
delay(1500); // даём модулю немного времени
// Запустить цикл по папке 01 (файлы в /01/)
sendCommand(CMD_FOLDER_CYCLE, 1, 0);
Serial.println("Started folder cycle (folder 01). Press button to pause 55s.");
}
void loop() {
delay(2222);
sendCommand(CMD_PAUSE);
delay(2222);
sendCommand(CMD_START);
delay(222222);
// Здесь можно обрабатывать другие события / читать данные от модуля, если нужно.
// Небольшая пауза для стабилизации цикла
delay(5);
}

