Здравствуйте, участники форума! У меня дисплей NEXTION, ARDUINO UNO и DFPlayerMini. Код (C++): int knopka = 7; // Состояние проигрывателя int b = false; // Логика проигрывателя #include <SoftwareSerial.h> #include <Nextion.h> #include <DFPlayer_Mini_Mp3.h> SoftwareSerial nextion(2, 3);// RX-2, TX-3 Nextion myNextion(nextion, 9600); void setup() { Serial.begin (9600); mp3_set_serial (Serial); delay (100); pinMode (7, INPUT); // Инициализация 7-го пина на вход myNextion.init(); } void loop() { int kn = digitalRead(7); // считываем состояние кнопки delay (20); if (b==1) { mp3_play (); if (kn==1) {mp3_next(); } delay (200); // проигрываем следующий файл } /////////////////////////////////////////////////////////////КНОПКА START////////////////////////////////////////////////////////////// String message = myNextion.listen(); //check for message if(message == "100") { b=1; mp3_set_volume (20); // ГРОМКОСТЬ } //////////////////////////////////////////////////////////////END////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////КНОПКА STOP ///////////////////////////////////////////////////////////// if(message == "300") { b=0; mp3_stop (); // остановить воспроизведение delay (100); } if(message != ""){ Serial.println(message); } } С дисплея отправляю команды например print "100" на воспроизведение музыки в ARDUINO ловлю их и по условиям воспроизвожу музыку, как видно по скетчу я использую для перехода на след. трек bussy контакт от мр3 модуля и считываю его состояние на d7 (int kn = digitalRead(7); // считываем состояние кнопки) если 0 играю если 1 то след. трек. (вообще надо, чтобы нажав на плай проиграли все песни одна за другой) все работает отлично, только иногда трек играет подряд 2 раза или перескочит с 3 на 5й вообщем не стабильно все это. Пробовал другую библиотеку "DFRobotDFPlayerMini.h" но при подключении ее SoftwareSerial mySoftwareSerial(10, 11); // RX, TX переставали приходить команды от дисплея а без него все играет хорошо даже bussy контакт не нужен просто myDFPlayer.randomAll(); //Random play all the mp3. и все играет ВОПРОС как заставить это работать на старой библиотеке или как совместить дисплей с этой библиотекой (DFRobotDFPlayerMini.h) Я прошу помощи делаю для себя, не коммерция. кто не хочет помочь прошу Вас не тратить мое и свое время! всем кто может и хочет помочь ЗАРАНЕЕ СПАСИБО!
куда? Неуважение к русскому языку теперь так называется? я так понял, что что-то с чем-то не сходится. я хочу помочь!
1. Зачем объявляете переменную "knopka" и присваиваете ей значение, если далее пользуетесь только значением, а переменную вообще не используете? 2. Значение, присваиваемое переменной "b", не соответствует заявленному типу данных. Заявлено целое число (int), присваивается булево значение (bool), а дальше по листингу это булево значение сравнивается с числом. И присваивается число. Так что, очень сомневаюсь, что условие if (b==1) будет выполнено пока "b" равно "false". А следовательно все, что лежит внутри этого "if", будет проигнорировано до присвоения "b" значения "1". Замените "false" на 0: Код (C++): int b = 0; // Логика проигрывателя
СПАСИБО! все исправил, согласно замечаниям, буду пробовать. Забыл совсем) я песни проигрываю через флешку зацепил к пинам mp3 модуля гнездо usb, чтобы проигрывать через флешку а не через microcd usb+ usb- 5+ gnd все играет отлично только иногда звук на 1-2 сек. пропадает, случайно не вкурсе из-за чего
Опыта работы с данными модулями не имею. Могу лишь предположить (не более), что возможна просадка по питанию. Флэшка возможно жручая. Но это далеко не факт. Есть закономерность в пропадании звука? И в чем оно (пропадание) заключается? Пауза? Пропадание громкости? P.S. Иностранцы зависнут от этой фразы...
Danik. зачем у вас в самом конце выводится message в сериал? Код (C++): if(message != ""){ Serial.println(message); }
b707 Здравствуйте! я по примеру библиотеки некстион делал там было так. решил оставить, я так понимаю условие такое: если что то пришло, отправь это что то в порт?
все бы ничего, только у вас к этому же порту подключен МП3 плеер, так что выходит что вы постоянно сбрасываете ему непонятные для него команды, мож поэтому он и заикается...
вот вот)) я пытался разделить их один на аппаратный другой на программный, но увы(( про юарт читал пытаюсь разобраться serial.begin serial1.begin я не понял этот кусок вообще Код (C++): SoftwareSerial nextion(2, 3);// RX-2, TX-3 Nextion myNextion(nextion, 9600); void setup() { Serial.begin (9600); mp3_set_serial (Serial); delay (100); в библиотеке к мр3 модулю от дфробот было так Код (C++): #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; так вообще команды с дисплея не понимает ардуино скорость должна быть разная?
я тоже не вполне понял. что вы пытаетесь сказать. Могу только отметить несколько вещей - может станет яснее 1. Если вы нашли пример и в нем встречается Serial1, Serial2 и тд - сразу откладывайте в сторону, это код для Мега или СТМ32, на Уно он работать не будет 2. На Уно одновременно можно запустить только два Сериала (акробатику не учитываем) - один аппаратный на пинах 0 и 1, он же USB-UART. И второй программный SoftwareSerial - на любых цифровых пинах кроме 0 и 1. У вас же в коде вы сейчас делаете вид, что у вас три Сериала - один для Некстион, один для МП3, и еще один - вывод сообщений в порт. Поскольку от первых двух вы отказаться не можете - вывод в порт придется убрать. иначе он будет мешать одному из девайсов
все верно! у меня два сериала - аппаратный (0 и 1) мр3 модуль на нем, программный (2 и 3) для некстиона Код (C++): SoftwareSerial nextion(2, 3);// RX-2, TX-3 вопрос можно программных сделать 2шт, вот так? Код (C++): SoftwareSerial nextion(2, 3);// RX-2, TX-3 SoftwareSerial mySerial(10, 11); // RX, TX Serial.begin (9600); Nextion myNextion(nextion, 9600); mySerial.begin (9600); просто так не работает( мне не надо 3 сериала 2х достаточно) просто в примере от библиотеки дфробот там программный сериал но библиотека хорошая лучше чем эта Код (C++): #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 file 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 DFPlayerUSBInserted: Serial.println("USB Inserted!"); break; case DFPlayerUSBRemoved: Serial.println("USB Removed!"); 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; } } я в этом примере ни пойму почему скорость разная 115200 и 9600 сериал один же программный?
если коротко, то нельзя, работать не будет а вы уверены, что она с аппаратным не работает? - попробуйте С чего вдруг тут один сериал? Вот же их два: Код (C++): mySoftwareSerial.begin(9600); Serial.begin(115200); вы меня убиваете своими туп .... нелогичными вопросами...