Хочу сделать интерактивную игрушку. Arduino по непонятной причине не запускает DFP mini. Может быть не правильно написан код. Вообщем 10,11 пин Arduino RX TX , d2,3,4,5 кнопки. При нажатии кнопки должно срабатывать условие. Ide не выдает ошибок компиляции но arduino все равно не запускает DFP mini, Кто шарит помогите плиз!!! Код (C++): #include "Arduino.h" #include "SoftwareSerial.h" #include "DFPlayer_Mini_Mp3.h" SoftwareSerial mySerial(10, 11); # define Start_Byte 0x7E # define Version_Byte 0xFF # define Command_Length 0x06 # define End_Byte 0xEF # define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info] # define ACTIVATED LOW int buttonSongs = 2; int buttonStories = 3; int buttonStory = 4; int buttonScore = 5; int i = 0; //счетчик buttonSongs int j = 10; //счетчик buttonStories int k = 20; //счетчик buttonStory int l = 30; //счетчик buttonScore boolean isPlaying = false; // Контроль воспроизведения void setup () { pinMode(buttonSongs, INPUT); digitalWrite(buttonSongs,HIGH); pinMode(buttonStories, INPUT); digitalWrite(buttonStories,HIGH); pinMode(buttonStory, INPUT); digitalWrite(buttonStory,HIGH); pinMode(buttonScore, INPUT); digitalWrite(buttonScore,HIGH); mySerial.begin (9600); delay(1000); } void loop () { if (digitalRead(buttonSongs) == ACTIVATED) //Песни { if(isPlaying == false ) { i++; mp3_play (i); isPlaying = true; if(i==10){i=0;} }else { mp3_stop(); isPlaying = false; } } if (digitalRead(buttonStories) == ACTIVATED) //Расказы { if(isPlaying == false ) { j++; mp3_play (); isPlaying = true; if(j==20){j=10;} }else { mp3_stop(); isPlaying = false; } } if (digitalRead(buttonStory) == ACTIVATED) // Сказки { if(isPlaying == false ) { k++; mp3_play (); isPlaying = true; if(k==30){k=20;} }else { mp3_stop(); isPlaying = false; } } if (digitalRead(buttonScore) == ACTIVATED) //Считалочки { if(isPlaying == false ) { l++; mp3_play (); isPlaying = true; if(l==40){l=30;} }else { mp3_stop(); isPlaying = false; } } }
оно срабатывает это значит, что синтаксически код верен запускает. Но через несколько миллисекунд останавливает. Затем снова запускает. И так по кругу. Начинать надо не с писанины, а с составления алгоритма. Но для начала надо почитать, как МК выполняет программу.
Конечно не запускает. Посмотрите в свой код - вы где-нибудь сообщили DFP , по какому Сериал ему команды принимать? - посмотрите примеры к библиотеке Это не считая того, что упомянул Паровоз, и еще очень многих ошибок
Ребят я не могу понять почему вы считаете что я должен быть уже гуру)))? Я нуб очень начинающий любитель))) Вы говорите то не так, это не так, ссылайтесь на строчки из кода. Потому что я еще многое не понимаю. Просто когда то давно учил С++ Если есть ошибки то покажите конкретно с примером а не с высоты птичьего полета Я к примеру не вижу чтоб она его запускала и потом сразу выключала. И я на основе примеров составлял код. И SoftwareSerial mySerial(10, 11); 10 и 11 пины по ним dfp принимает команды
а откуда библиотека поймет, что используется этот mySerial? в каждом примере из тех что я нашел используется функция mp3_set_serial
Можно например сделать флаг, который будет отвечать за однократное срабатывание при нажатии кнопки и освобождаться при отжатии кнопки. Код (C++): if ((digitalRead(buttonSongs) == ACTIVATED) && !buttonSongs_flag) //Песни { buttonSongs_flag=1; .... } if(buttonSongs_flag &&(digitalRead(buttonSongs) != ACTIVATED)) { buttonSongs_flag=0; } ну и какую-нибудь защиту от дребезга неплохо бы, хотя бы в виде банального delay(50);
Код (C++): /// MP3 PLAYER PROJECT /// http://educ8s.tv/arduino-mp3-player/ ////////////////////////////////////////// #include "Arduino.h" #include "SoftwareSerial.h" #include "DFPlayer_Mini_Mp3.h" SoftwareSerial mySerial(10, 11); # define Start_Byte 0x7E # define Version_Byte 0xFF # define Command_Length 0x06 # define End_Byte 0xEF # define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info] # define ACTIVATED LOW int buttonSongs = 2; int buttonStories = 3; int buttonStory = 4; int buttonScore = 5; int i = 0; //счетчик buttonSongs int j = 10; //счетчик buttonStories int k = 20; //счетчик buttonStory int l = 30; //счетчик buttonScore boolean isPlaying = false; // Контроль воспроизведения void setup () { Serial.begin (9600); mySerial.begin (9600); mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module mp3_set_volume (15);Serial.begin (9600); mySerial.begin (9600); mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module mp3_set_volume (15); pinMode(buttonSongs, INPUT); digitalWrite(buttonSongs,HIGH); pinMode(buttonStories, INPUT); digitalWrite(buttonStories,HIGH); pinMode(buttonStory, INPUT); digitalWrite(buttonStory,HIGH); pinMode(buttonScore, INPUT); digitalWrite(buttonScore,HIGH); delay(1000); } void loop () { if (digitalRead(buttonSongs) == ACTIVATED) //Песни { delay(500); if(isPlaying == false ) { i++; mp3_play (i); if(i==10){i=0;} delay(500); isPlaying = true; }else { mp3_stop(); delay(500); isPlaying = false; } } if (digitalRead(buttonStories) == ACTIVATED) //Расказы { delay(500); if(isPlaying == false ) { j++; mp3_play (j); if(j==20){j=10;} delay(500); isPlaying = true; }else { mp3_stop(); delay(500); isPlaying = false; } } if (digitalRead(buttonStory) == ACTIVATED) // Сказки { delay(500); if(isPlaying == false ) { k++; mp3_play (k); if(k==30){k=20;} delay(500); isPlaying = true; }else { mp3_stop(); delay(500); isPlaying = false; } } if (digitalRead(buttonScore) == ACTIVATED) //Считалочки { delay(500); if(isPlaying == false ) { l++; mp3_play (l); if(l==40){l=30;} delay(500); isPlaying = true; }else { mp3_stop(); delay(500); isPlaying = false; } } } Поработал над ошибками. Так все работает. Спасибо всем кто помогал