Доброго времени суток. Появилось желание сделать обучающую игрушку для ребёнка, в виде плюшевой зверушки. Т.е. идея такая на флешке будет записано 6-7 папок с 9 записями в каждой. Хотелось, чтобы каждая кнопка отвечала за свой номер трека и была возможность переключаться между папками. Но получается так, что 9 кнопок отвечают только за 1-ую папку, а при переключении между папками и нажатии кнопки любого трека ардуино всё равно перекидывает на первую папку и воспроизводит от туда.
#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 12, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 13, необходимо соединить с выводом RX дисплея
SoftwareSerial mySoftwareSerial(12, 13); // RX, TX для плеера DFPlayer Mini
DFRobotDFPlayerMini myDFPlayer;
int i = 1; // счётчик папок
int j = 0; // счётчик файлов
int folders = 0; // максимальное количество папок
int files = 1; // количество треков в папке
int buttonKey2 = 2; // кнопка трек 1
int buttonKey3 = 3; // кнопка трек 2
int buttonKey4 = 4; // кнопка трек 3
int buttonKey5 = 5; // кнопка трек 4
int buttonKey6 = 6; // кнопка трек 5
int buttonKey7 = 7; // кнопка трек 6
int buttonKey8 = 8; // кнопка трек 7
int buttonKey9 = 9; // кнопка трек 8
int buttonKey10 = 10; // кнопка трек 9
int buttonNextFolder = 11; // кнопка следующая папка
boolean isPlaying = false; // статус воспроизведения/пауза
void setup() {
pinMode(buttonKey2, INPUT_PULLUP);
pinMode(buttonKey3, INPUT_PULLUP);
pinMode(buttonKey4, INPUT_PULLUP);
pinMode(buttonKey5, INPUT_PULLUP);
pinMode(buttonKey6, INPUT_PULLUP);
pinMode(buttonKey7, INPUT_PULLUP);
pinMode(buttonKey8, INPUT_PULLUP);
pinMode(buttonKey9, INPUT_PULLUP);
pinMode(buttonKey10, INPUT_PULLUP);
pinMode(buttonNextFolder, INPUT_PULLUP);
mySoftwareSerial.begin(9600);
Serial.begin(9600);
delay(1000);
Serial.println();
Serial.println("DFPlayer Mini Demo");
Serial.println("Initializing DFPlayer...");
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("Unable to begin:");
Serial.println("1.Please recheck the connection!");
Serial.println("2.Please insert the SD card!");
while (true);
}
Serial.println(F("Подключено."));
myDFPlayer.setTimeOut(300);
//----Set volume----
myDFPlayer.volume(15); //Set volume value (0~30).
//----Set different EQ----
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
myDFPlayer.play(1); //Воспроизведение первого mp3
isPlaying = true; // воспроизводим
Serial.println("Playing..");
//----Читать информацию----
Serial.println(myDFPlayer.readState()); //читать состояние mp3
Serial.println(myDFPlayer.readVolume()); //Текущая громкость
Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
}
void loop() {
if (digitalRead(buttonKey2) == LOW) {
if (isPlaying) {
myDFPlayer.play (1); // Track 1
Serial.println("Track 1.");
}
delay(500);
}
if (digitalRead(buttonKey3) == LOW) {
if (isPlaying) {
myDFPlayer.play (2); // Track 2
Serial.println("Track 2.");
}
delay(500);
}
if (digitalRead(buttonKey4) == LOW) {
if (isPlaying) {
myDFPlayer.play (3); //Track 3
Serial.println("Track 3.");
}
delay(500);
}
if (digitalRead(buttonKey5) == LOW) {
if (isPlaying) {
myDFPlayer.play (4); //Track 4
Serial.println("Track 4.");
}
delay(500);
}
if (digitalRead(buttonKey6) == LOW) {
if (isPlaying) {
myDFPlayer.play (5); //Track 5
Serial.println("Track 5.");
}
delay(500);
}
if (digitalRead(buttonKey7) == LOW) {
if (isPlaying) {
myDFPlayer.play (6); //Track 6
Serial.println("Track 6.");
}
delay(500);
}
if (digitalRead(buttonKey8) == LOW) {
if (isPlaying) {
myDFPlayer.play (7); //Track 7
Serial.println("Track 7.");
}
delay(500);
}
if (digitalRead(buttonKey9) == LOW) {
if (isPlaying) {
myDFPlayer.play (8); //Track 8
Serial.println("Track 8.");
}
delay(500);
}
if (digitalRead(buttonKey10) == LOW) {
if (isPlaying) {
myDFPlayer.play (9); //Track 9
Serial.println("Track 9.");
}
delay(500);
}
if (digitalRead(buttonPrevious) == LOW) {
if (isPlaying) {
j++;
if (j > files)
j = 1;
myDFPlayer.playFolder(i, j); //воспроизводить определенный mp3 в SD: /15/004.mp3; Имя папки (1 ~ 99);
Serial.print("Next folder = ");
Serial.print(i);
Serial.print(", mp3 file = ");
Serial.println(j);
}
delay(500);
}
}