DFPlayer команды

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Здравствуйте!

Помогите, пожалуйста, новичку разобраться.
 

мне надо воспроизвести песни в случайном порядке одна за одной.

пробывал кучу библеотек там в них команда на воспроизведение такая есть но не работает или я не догоняю что к чему или подскажите пример busy pin ()

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  
  //----Set volume----
  myDFPlayer.volume(10);  //Set volume value (0~30).
  myDFPlayer.volumeUp(); //Volume Up
  myDFPlayer.volumeDown(); //Volume Down
  
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
//  myDFPlayer.EQ(DFPLAYER_EQ_POP);
//  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
//  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);
//  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);
//  myDFPlayer.EQ(DFPLAYER_EQ_BASS);
  
  //----Set device we use SD as default----
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);
  
  //----Mp3 control----
//  myDFPlayer.sleep();     //sleep
//  myDFPlayer.reset();     //Reset the module
//  myDFPlayer.enableDAC();  //Enable On-chip DAC
//  myDFPlayer.disableDAC();  //Disable On-chip DAC
//  myDFPlayer.outputSetting(true, 15); //output setting, enable the output and set the gain to 15
  
  //----Mp3 play----
  myDFPlayer.next();  //Play next mp3
  delay(1000);
  myDFPlayer.previous();  //Play previous mp3
  delay(1000);
  myDFPlayer.play(1);  //Play the first mp3
  delay(1000);
  myDFPlayer.loop(1);  //Loop the first mp3
  delay(1000);
  myDFPlayer.pause();  //pause the mp3
  delay(1000);
  myDFPlayer.start();  //start the mp3 from the pause
  delay(1000);
  myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
  delay(1000);
  myDFPlayer.enableLoopAll(); //loop all mp3 files.
  delay(1000);
  myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
  delay(1000);
  myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.stopAdvertise(); //stop advertise
  delay(1000);
  myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
  delay(1000);
  myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.
  delay(1000);
  myDFPlayer.randomAll(); //Random play all the mp3.
  delay(1000);
  myDFPlayer.enableLoop(); //enable loop.
  delay(1000);
  myDFPlayer.disableLoop(); //disable loop.
  delay(1000);

  //----Read imformation----
  Serial.println(myDFPlayer.readState()); //read mp3 state
  Serial.println(myDFPlayer.readVolume()); //read current volume
  Serial.println(myDFPlayer.readEQ()); //read EQ setting
  Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
  Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
  Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03
}

void loop()
{
  static unsigned long timer = millis();
  
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
  
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вон же там - randomAll() имеется.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

спасибо, что подсказали но он не работает 

sadman41
Offline
Зарегистрирован: 19.10.2016

"Random playback of the whole storage device. This command is used to randomly play sound files in the storage device according to physical sequence ..."

Должно работать.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Должно но почемуто не работает(( можете представить рабочий скетч

sadman41
Offline
Зарегистрирован: 19.10.2016

Представить я что угодно могу - и рабочий и нерабочий.

Я проверил только что - всё играет. А что вы имеете ввиду под словом "не работает" я угадывать не хочу.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

Представить я что угодно могу - и рабочий и нерабочий.

Я проверил только что - всё играет. А что вы имеете ввиду под словом "не работает" я угадывать не хочу.

Уверяю Вас, я тоже проверил его то, что вы говорите "все играет" это действительно так - но он играет по 3 секунды каждую песню, а я хотел полное проигрывание, такой скетч мне сложно пока понять - поэтому я попросил пример сминимальным набором строк, спасибо

sadman41
Offline
Зарегистрирован: 19.10.2016

Предлагаю поступить наоборот - вы постите сюда пример, который у вас не работает, с минимальным набором строк. Мы смотрим и, может быть, советуем как быть далее. 

Тот экзампл, что в первом сообщении, физически не может играть по три секунды. Может у вас вообще более ничего нет, м?

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

 Может у вас вообще более ничего нет, м?

Вы абсолютно правы, у меня действительно больше нет примеров, потому и обратился за помощью.

Приведенный выше пример сложен для меня (я пока не такой понимающий в этом деле) и к сожалению мою задачу в полном объеме не выполняет(((.

Мне нужен скетч с минимальным набором строк, который играет рандомно песни целиком, СПАСИБО!!!

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Удалите или закоментируйте строки 104-107.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nurgazin_d@mail.ru пишет:

Приведенный выше пример сложен для меня (я пока не такой понимающий в этом деле) и к сожалению мою задачу в полном объеме не выполняет(((.

Мне нужен скетч с минимальным набором строк, который играет рандомно песни целиком, СПАСИБО!!!

У Вас два варианта:

1. Вы учитесь самостоятельно работать с Ардуиной. Возможно, для этого портебуется отложить на некоторое время упомянутый Вами проект и сначала собрать пару-тройку проектов попроще.

2. Заказать работу за деньги в разделе "Ищу исполнителя".

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

b707 пишет:

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

Какой смысл в этом высказывании??? Или вы думаете, что я вообще не в курсе как и че, я и дата шит, и библиотеки  перелопатил, везде примерчик типа этого:

#include <SoftwareSerial.h>

#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    
    mp3_set_volume (25);
    delay (100);
    mp3_play ();
    delay (100);
}
void loop () {        
    mp3_next (); // Следующий трек
    delay (10000); // пуза 10 секунд
}

 

или такой: 

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    //set Serial for DFPlayer-mini mp3 module 
  delay (100);
  mp3_set_volume (25);
  delay (100);
  mp3_play (); // запускаем трек 
  delay (100);
  mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности
}
void loop () {        
}

так что не говорите мне, что я ленюсь, это обидно слушать, когда ты почти год бьешься над этим проектом.

Я говорил, что у меня проблемы с этим модулем (судя по форуму даже у гуру программирования проблемы с этим модулем), о боги приведите сюда просвещенного, дабы он просветил меня.)))

Если вы такой умный решите на основании этих двух примеров выше поставленную задачу. СПАСИБО

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ВСЕМ СПАСИБО!!! вроди сделал!!!

только теперь вопрос такой : почему после команды

  • mp3_pause (); // пауза
    mp3_stop (); // остановить воспроизведение
  • воспроизведение начинается с начала а не в случайном порядке т.е.
  • допустим он формирует список
  • 0003
  • 0009
  • 0015
  • но при каждом запуске воспроизводит его же
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    //set Serial for DFPlayer-mini mp3 module 
  delay (100);
  mp3_set_volume (25);
  delay (100);
  mp3_play (); // запускаем трек 
  delay (100);
  mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности
}
void loop () {        
}

и последний вопрос как воспроизвести определенную песню из папки т.е.

команды\0001.мр3

  mp3_play (команды\1); // запускаем трек 

а песни\0001..0019

 mp3_random_play ();

только не работает так?

не знаю команду воспроизводи рандомно из этой папки и просто воспроизведи эту песню из этой папки

sadman41
Offline
Зарегистрирован: 19.10.2016

Random из папки плеер не умеет делать. И воспроизводить он будет не #1, #3, #4, #2 а вполне себе может отчудить #1, #3, #1, #2, #4.

Полноценный random из папки, как мне кажется, средствами самого плеера не получить.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

Random из папки плеер не умеет делать. И воспроизводить он будет не #1, #3, #4, #2 а вполне себе может отчудить #1, #3, #1, #2, #4.

Полноценный random из папки, как мне кажется, средствами самого плеера не получить.

Спасибо большое!!!

а как сделать так, чтобы например проиграл он допустим #1, #5, #19 и после нажатия на паузу продолжил играть дальше #2, #4, #68 и тд а то после команды mp3_pause (); или mp3_stop (); он опять начинает играть #1, #5, #19

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

b707 пишет:

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

Какой смысл в этом высказывании??? Или вы думаете, что я вообще не в курсе как и че

 

Я ничего про вас не думаю - я всего лишь просил прочесть комменты в скетче. Если б вы это сделали - вы нашли бы три строчки, которые останавливают проигрывание песни после 3 секунд - и проблема была бы решена. Вместо этого вы предпочли ругаться и кидать в меня какими-то обрывками кодов.

 

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

а как сделать так, чтобы например проиграл он допустим #1, #5, #19 и после нажатия на паузу продолжил играть дальше #2, #4, #68 и тд а то после команды mp3_pause (); или mp3_stop (); он опять начинает играть #1, #5, #19

ну вы же все равно ардуиной управляете - так и случайное воспроизведение делайте не командами плеера, а ардуиной. Запросите список треков или хотя бы просто их число в каталоге - сформируйте случайный порядок номеров и заказывайте песни в этом порядке...

делов то...

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

делов то...

Не всё так просто и волшебно в этом плеере, конечно, но алгоритм, в целом такой. 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

а почему он при команде плей играет только одну песню и не продолжает дальше, как быть??

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

b707 пишет:

ну вы же все равно ардуиной управляете - так и случайное воспроизведение делайте не командами плеера, а ардуиной. Запросите список треков или хотя бы просто их число в каталоге - сформируйте случайный порядок номеров и заказывайте песни в этом порядке...

делов то...

[/quote]

блин а как получить список, рандом радуино это где че (((( примерчик есть плииииз

sadman41
Offline
Зарегистрирован: 19.10.2016

Как быть... читать комментарии в коде: 

myDFPlayer.play(1);  //Play the first mp3

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

myDFPlayer.play(1);  //воспроизведение первого mp3, ну как бы я читал 

а как воспроизвести все песни??? 

я сейчас использую вот эту библиотеку #include <DFPlayer_Mini_Mp3.h>

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

 а как воспроизвести все песни???

ну блин, вы спите что ли? или бухаете?

вот, к примеру - песни с первой по двадцатую

for (byte i =1; i <21; i++) {
myDFPlayer.play(i);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Там, под комментом 

//----Mp3 play----
 

Приведены команды библиотеки. Вам лень их поочередно перепробовать?

sadman41
Offline
Зарегистрирован: 19.10.2016

b707, включится только 20-й трэк. Исправь совет ;)

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

b707
Offline
Зарегистрирован: 26.05.2017

а "примерчики" готовые - я считаю давать вредно. Вот только в эти выходные имели на форуме опыт - после 80 сообщений совершенного тупизма и глупости некий ленивый новичок все-таки выпросил кусок готового кода.

И что вы-таки думаете? - остался недоволен, что его так долго мурыжили, не дали код сразу. Вместо благодарности обложил форум и ушел.

 

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

о, круто :) это я пальцем в небо попал :)

А он хотя бы выставляет какой-то флаг, что окончил играть очередную пьессу? :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman, а у DFPlayera ноги Busy нету?  Чота мне такое помница... 

(смотреть неудобно, я с тапка) 

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

sadman41 пишет:

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

о, круто :) это я пальцем в небо попал :)

А он хотя бы выставляет какой-то флаг, что окончил играть очередную пьессу? :)

Статус можно кверить или за бази пин щупать. Но с последним тоже весело.

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

sadman, а у DFPlayera ноги Busy нету?  Чота мне такое помница... 

(смотреть неудобно, я с тапка) 

Есть. Поэтому я цитировать сообщение не стал - вдруг b707 исправить захочет совет на правильный.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Ребята вы молодци все спасибо буду пробывать за ногу busy

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

 а у DFPlayera ноги Busy нету? 

Есть, но там творится веселуха - не всегда срабатывает, насколько я заметил: было такое, что ещё играет, а BUSY сообщает, что свободен, типа. Кмк, лучше запрашивать статус. 

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Есть. Поэтому я цитировать сообщение не стал - вдруг b707 исправить захочет совет на правильный.

не, второй раз выступать не буду. Похоже, этот плеер надо сначала в руках подержать.

глупость моя пусть останется - некрасиво это, затирать ошибки, когда их уже кто-то заметил и тебе указал. Архатом попахивает :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

DIYMan пишет:

DetSimen пишет:

 а у DFPlayera ноги Busy нету? 

Есть, но там творится веселуха - не всегда срабатывает, насколько я заметил: было такое, что ещё играет, а BUSY сообщает, что свободен, типа. Кмк, лучше запрашивать статус. 

А я где-то читал, што этот плэер ничо по сериалу не отдает, только принимает командные последовательности, или это было не про него?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не работал с ним, могу ашыбацца

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

А я где-то читал, што этот плэер ничо по сериалу не отдает, только принимает командные последовательности, или это было не про него?

Просишь в пакете байтиком - отдает, не просишь - не отдает. В последнем случае просто 10мс надо подождать между командами.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ты токо это... НовыйГод досрочно не встреть, а то опять от коллектива отобъешься.

Ruslan_Kulibin
Offline
Зарегистрирован: 23.07.2017

Уважаемые, подскажите, а можно как-то этот модуль заставить сразу воспроизводить файл автоматически при подаче питания?

alik_sn
Offline
Зарегистрирован: 08.10.2021
myDFPlayer.play(1);

эта команда проигрывает трек1 полностью и потом останавливается?

b707
Offline
Зарегистрирован: 26.05.2017

alik_sn пишет:

myDFPlayer.play(1);

эта команда проигрывает трек1 полностью и потом останавливается?

ответ в сообщении #25

Party
Offline
Зарегистрирован: 03.02.2022

А как заставить стабильно страбатывать по BUSY? Бывает треков 10-20 нормально играет, потом затык на одном пока кнопкой на следующий не переключиш, и повторно затык через надцать треков. 

Nakonechnyy Igo...
Offline
Зарегистрирован: 04.02.2022

Помогите разобраться.

Сделал робота на 4 приводах с ультразвуковым датчиком, всё работает чётенько, но я прикрутил ещё DFPlayerMini что бы он комментировал свои действия. Вопрос в том что не могу вставить строки в свой скетч чтобы при повороте направо он проговорил:

  myMP3.play(1);                       // Воспроизведение трека 0001 "поворот направо"
  delay(1000);                           // Пауза 1 секунд
 
отдельно тестовый скетч работает, а вот внедрить в в свой никак не выходит
Вот весь код:
 
#include <AFMotor.h>  // Add Adafruit Motor Shield for Arduino kit library.
#include <Servo.h>    // Add Servo Motor library.
#include <SoftwareSerial.h>               // Подключаем библиотеку SoftwareSerial
#include <DFPlayerMini_Fast.h>            // Подключаем библиотеку DFPlayerMini_Fast
SoftwareSerial mySerial(10, 11);          // Указываем к какими портам подключен DFPlayer
DFPlayerMini_Fast myMP3;                  // Создаем объект 
#define BuzzPIN A0  // Назначьте PIN A0 как BuzzPIN (соедините PIN "A0" Arduino UNO с PIN "+" зуммера).
#define TrigPIN 8  // Assign PIN A1 as TrigPIN (Connect Arduino UNO "A1" PIN with Ultrasonic Sonar Sensor "Trig" PIN).
#define EchoPIN 9  // Assign PIN A2 as EchoPIN (Connect Arduino UNO "A2" PIN with Ultrasonic Sonar Sensor "Trig" PIN).
#define LEDBPIN A3  // Assign PIN A3 as LEDBPIN (Connect Arduino UNO "A3" PIN with RGB Diffused Common Cathode "LEDB" PIN).
#define LEDGPIN A4  // Assign PIN A4 as LEDGPIN (Connect Arduino UNO "A4" PIN with RGB Diffused Common Cathode "LEDG" PIN).
#define LEDRPIN A5  // Assign PIN A5 as LEDRPIN (Connect Arduino UNO "A5" PIN with RGB Diffused Common Cathode "LEDR" PIN).
#define DCMROFF 25  // This sets Offset to allow differences between the two DC traction Motors.
AF_DCMotor M1 (1, MOTOR12_64KHZ); // Create DCMotor #1 using M1 output, Set to 64kHz PWM frequency.
AF_DCMotor M2 (2, MOTOR12_64KHZ); // Create DCMotor #1 using M2 output, Set to 64kHz PWM frequency.
AF_DCMotor M3 (3, MOTOR12_64KHZ); // Create DCMotor #1 using M3 output, Set to 64kHz PWM frequency.
AF_DCMotor M4 (4, MOTOR12_64KHZ); // Create DCMotor #2 using M4 output, Set to 64kHz PWM frequency.
Servo SER1; // Create Servo object to control Servo.
int Search (void) {                   // Объявление переменной целочисленного типа.
  float Duration = 0.0;               // Объявление переменной типа Float.
  float CM = 0.0;                     // Объявление переменной типа Float.
  digitalWrite (TrigPIN, LOW);        // Выход TrigPIN как 0 В (логический низкий уровень).
  delayMicroseconds (2);              // Задержка на 2 секунды, отправка импульса высокого уровня длительностью 10 секунд на датчик ультразвукового сонара "TrigPIN".
  digitalWrite (TrigPIN, HIGH);       // Выход TrigPIN как 5 В (логический высокий уровень).
  delayMicroseconds (10);             // Задержка в течение 10 с.
  digitalWrite (TrigPIN, LOW);        // Выход TrigPIN как 0 В (логический низкий уровень).
  Duration = pulseIn (EchoPIN, HIGH); // Начните отсчитывать время, до тех пор, пока EchoPIN не вернется к логическому "Высокому уровню", и поместите "Время" в переменную под названием "Продолжительность".
  CM = (Duration/58.8);               // Переведите расстояние в CM.
  return CM;                          // Возврат к странице CM.
}
int RightDistance, LeftDistance;  // Расстояния по обе стороны.
float Distance = 0.00;            // Объявление переменной типа Float.
void setup () {               // Установочный цикл.
  mySerial.begin(9600);                   // Открываем последовательную связь
  myMP3.begin(mySerial);                  // инициализация
  myMP3.volume(20);                       // Указываем громкость (0-30)
 
  pinMode (BuzzPIN, OUTPUT);  // Объявить BuzzPIN как "Выходной PIN".
  pinMode (TrigPIN, OUTPUT);  // Declare TrigPIN as "Output PIN".
  pinMode (EchoPIN, INPUT);   // Declare EchoPIN as "Output PIN".
  pinMode (LEDBPIN, OUTPUT);  // Declare LEDBPIN as "Output PIN".
  pinMode (LEDGPIN, OUTPUT);  // Declare LEDGPIN as "Output PIN".
  pinMode (LEDRPIN, OUTPUT);  // Declare LEDRPIN as "Output PIN".
  SER1.attach (10);           // Присоединяет сервопривод к контакту 10 (SER1 на наборе Adafruit Motor Shield for Arduino к объекту сервопривода)..
 
}
void loop () {                                    // Основной цикл
  SER1.write (80);                                // Приказывает сервоприводу занять положение 80 градусов (лицом вперед).
  delay (100);                                    // Задержка на 0,1 с.
  Distance = Search ();                           // Измерение расстояния в CM.
  if (Distance < 30) {                            // Если препятствие обнаружено в 30 см.
    digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 5V (Logic high level).
    digitalWrite (LEDBPIN, LOW);                  // LEDBPIN output as 0V (Logic low level).
    digitalWrite (LEDGPIN, LOW);                  // LEDGPIN output as 0V (Logic low level).
    digitalWrite (LEDRPIN, HIGH);                 // LEDRPIN output as 5V (Logic high level).
    M1.setSpeed (200);                            // скорость.
    M2.setSpeed (200);                            // скорость.
    M3.setSpeed (200);                            // скорость.
    M4.setSpeed (200);                            // скорость.
    ChangePath ();                                // Если движение вперед заблокировано, измените направление.
  }
  
 
  else if ((Distance >= 30) && (Distance < 40)) { // Если препятствие обнаружено на расстоянии от 30 см до 40 см.
    digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 0V (Logic low level).
    digitalWrite (LEDBPIN, HIGH);                 // LEDBPIN output as 5V (Logic high level).
    digitalWrite (LEDGPIN, LOW);                  // LEDGPIN output as 0V (Logic low level).
    digitalWrite (LEDRPIN, LOW);                  // LEDRPIN output as 0V (Logic low level).
  }
 
  else if ((Distance >= 60) && (Distance < 90)) { // Если препятствие обнаружено на расстоянии от 60 см до 90 см.
    digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 0V (Logic low level).
    digitalWrite (LEDBPIN, LOW);                  // LEDBPIN output as 0V (Logic low level).
    digitalWrite (LEDGPIN, HIGH);                 // LEDGPIN output as 5V (Logic high level).
    digitalWrite (LEDRPIN, LOW);                  // LEDRPIN output as 0V (Logic low level).
  }
  else {                                          // Если препятствие не может быть найдено в 90 см.
    digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 0V (Logic low level).
    digitalWrite (LEDBPIN, LOW);                 // LEDBPIN output as 5V (Logic high level).
    digitalWrite (LEDGPIN, LOW);                 // LEDGPIN output as 5V (Logic high level).
    digitalWrite (LEDRPIN, LOW);                 // LEDRPIN output as 5V (Logic high level).
    
    M1.setSpeed (250);                            // Полное увеличение скорости.
    M2.setSpeed (250);                            // Speed increase fully.
    M3.setSpeed (250);                            // Speed increase fully.
    M4.setSpeed (250);                            // Speed increase fully.
    Forward ();                                   // Robot move to Forward direction.
  }
}
void ChangePath () {         // Петля изменения траектории.
  Stop ();                   // Остановка робота.
  Backward ();               // Работа робота Направление назад.
  Stop ();                   // Остановка робота.
  SER1.write (12);           // Проверьте расстояние справа.
  delay (300);               // Задержка на 0,5 с.
  RightDistance = Search (); // Установить правое расстояние.
  delay (300);               // Задержка на 0,5 с.
  SER1.write (160);          // Проверьте расстояние слева.
  delay (300);              // Задержка на 1s.
  LeftDistance = Search ();  // Установить левое расстояние.
  delay (300);               // Задержка на 0.5s.
  SER1.write (80);           // Вернуться в центр.
  delay (300);               // Задержка на 0.5s.
  CompareDistance ();        // Найти наибольшее расстояние.
}
void CompareDistance () {                   // Петля сравнения расстояний.
  if (RightDistance > LeftDistance) {       // Если справа меньше препятствий.
     TurnRight ();                          // Робот поворачивает в правую сторону.
    }
  else if (LeftDistance > RightDistance) {  // Если слева меньше препятствий.
      TurnLeft ();                          // Поворот робота в левую сторону.
    }
  else {                                    // Если оба препятствия одинаковы.
      TurnAround ();                        // Робот разворачивается.
    }
}
void Forward () {   // Forward петля.
  M1.run (FORWARD); // Turn DCMotor #1 to Forward.
  M2.run (FORWARD); // Turn DCMotor #1 to Forward.
  M3.run (FORWARD); // Turn DCMotor #1 to Forward.
  M4.run (FORWARD); // Turn DCMotor #1 to Forward.
}
void Backward () {    // Backward loop.
  M1.run (BACKWARD);  // Turn DCMotor #1 to Backward.
  M2.run (BACKWARD);  // Turn DCMotor #2 to Backward.
  M3.run (BACKWARD);  // Turn DCMotor #3 to Backward.
  M4.run (BACKWARD);  // Turn DCMotor #4 to Backward.
  delay (100);       // Задержка на 0.7 с.
}
void TurnRight () {           // Right Turn loop.
  M1.run (FORWARD);           // Turn DCMotor #1 to Forward.
  M2.run (FORWARD);           // Turn DCMotor #2 to Forward.
  M3.run (BACKWARD);          // Turn DCMotor #3 to Backward.
  M4.run (BACKWARD);          // Turn DCMotor #4 to Backward.
  delay (200);                // Задержка на 1.5s.
}
void TurnLeft () {            // Left Turn loop.
  M1.run (BACKWARD);          // Turn DCMotor #1 to Backward.
  M2.run (BACKWARD);          // Turn DCMotor #2 to Backward.
  M3.run (FORWARD);           // Turn DCMotor #3 to Forward.
  M4.run (FORWARD);           // Turn DCMotor #4 to Forward.
  delay (200);                // Задержка на 1.5s.
  
}
void TurnAround () {          // Разворот на месте.
  digitalWrite (BuzzPIN, HIGH);                  // BuzzPIN output as 5V (Logic high level).
  delay (500);                                   // Задержка на 0.1s.
  digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 0V (Logic low level).
  M1.run (FORWARD);           // Turn DCMotor #1 to Forward.
  M2.run (FORWARD);           // Turn DCMotor #2 to Forward.
  M3.run (BACKWARD);          // Turn DCMotor #3 to Backward.
  M4.run (BACKWARD);          // Turn DCMotor #4 to Backward.
  delay (500);               // Задержка на 2.1s.
}
void Stop () {      // Остановка.
  digitalWrite (BuzzPIN, HIGH);                  // BuzzPIN output as 5V (Logic high level).
  delay (50);                                   // Задержка на 0.01s.
  digitalWrite (BuzzPIN, LOW);                  // BuzzPIN output as 0V (Logic low level).
  M1.run (RELEASE); // Release DCMotor #1.
  M2.run (RELEASE); // Release DCMotor #2.
  M3.run (RELEASE); // Release DCMotor #3.
  M4.run (RELEASE); // Release DCMotor #4.
  delay (100);      // Задержка на 0.1s.
}
 
Помогите пожалуйста.

 

Vlad_58
Offline
Зарегистрирован: 14.03.2020

Всем огромный привет.Решил я тоже зимой от нечего делать собрать конструкцию на ардуино и купленным  DFPiaer mini MP3 .Как описывалось выше в постах я сразу впаял в цепь UART резисторы по 1 кОм,по ссылке:https://portal-pk.ru/news/247-delaem-mp3-pleer-na-dfplayer-mini-i-arduino.html,  подключил библиотеку :"DFRobotDFPlayerMini.h".Вроде как бы меня устраивало всё до того момента,пока не столкнулся с проблемой-ничего то я прочитать не могу из плеера,а хотелось бы увидеть уровень громкости,состояние плеера,номер проигрываемого трека и многое другое.На экранчик ничего не выводится,т.е. выводится как на мониторе компа-

-1

0

-1
-1
-1
Вопрос:может ли кто чего подсказать по этому поводу,повторюсь,все мои комады плеер выполняет,но от туда ничего не выдаёт.
  Serial.println(myDFPlayer.readState()); //read mp3 state
  Serial.println(myDFPlayer.readVolume()); //read current volume
  Serial.println(myDFPlayer.readEQ()); //read EQ setting
  Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
  Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
  Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read file counts in folder SD:/03
вот то что я запрашиваю у Плеера.Заранее прошу прощения за может быть не правильные термины.

 

Vlad_58
Offline
Зарегистрирован: 14.03.2020

Гробовая тишина,неужели никто не знает???

 

vrd
Offline
Зарегистрирован: 20.01.2022

Опишите переменные в сериал:

  Serial.print("read mp3 state ");
  Serial.println(myDFPlayer.readState()); //read mp3 state
  Serial.print("read current volume ");
  Serial.println(myDFPlayer.readVolume()); //read current volume
  Serial.print("read EQ setting ");
  Serial.println(myDFPlayer.readEQ()); //read EQ setting
  Serial.print("read all file counts in SD card ");
  Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
  Serial.print("read current play file number ");
  Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
  Serial.print("read file counts in folder SD:/03 ");
  Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read file counts in folder SD:/03

Какое значение к чему привязано. Попробуйте команду "тустринг". Может команды возвращают код ошибки. Вариантов много.

Vlad_58
Offline
Зарегистрирован: 14.03.2020

А зачем их описывать,если эти методы есть в библиотеке,я их просто в скетче вызываю?

 

vrd
Offline
Зарегистрирован: 20.01.2022

Тогда какая переменная выдаёт пустую строку? Какая переменная выдаёт ноль? Какая переменная выдаёт минус 1?

Vlad_58
Offline
Зарегистрирован: 14.03.2020

Ни одно из значений запрашиваемых из модуля(плеера имеется ввиду) не выводится,т.е. выводится "0".К примеру я запрашиваю текущее состояние громкости:myDFPlayer.readVolume(); пакет запроса выглядит таким образом:

7E FF 06 43 01 00 00 FE B7 EF

пакет ответа выглядит так:

7E FF 06 43 01 00 00 FE B7 EF
т.е. судя по 4-му байту у меня стоит 01 из даташита это означает подтверждение принятого пакета,и всё,данных в 5-ом и 6-ом байте отсутствуют,такое положение и с треками и с запросом состоянии эквалайзера.На форумах нигде не упоминается об этом,видимо вс е довольны тем что заслал команду и работает и ладно,но мне хотелось вывести эту инфу на экран,но там нет "никого".Вот и встал у меня вопрос как сделать.Команды все команды плеер реагирует и работает,нет обратной связи.Спасибо.
raven78
Offline
Зарегистрирован: 03.11.2019

Vlad_58 пишет:

На форумах нигде не упоминается об этом,видимо вс е довольны тем что заслал команду и работает и ладно,но мне хотелось вывести эту инфу на экран,но там нет "никого".

Почему? Вот тут  http://arduino.ru/forum/proekty/nalivator-avtomatizirovannaya-mashina-ko... мучаемся с этими левыми плеерами

Vlad_58
Offline
Зарегистрирован: 14.03.2020

Спасибо,счас почитаю что пишут знающие люди.