Arduino по непонятной причине не запускает dfp mini

Тема в разделе "Arduino & Shields", создана пользователем banan4ik, 28 фев 2021.

?

При нажатии кнопки должно срабатывать условие. Ide не выдает ошибок компиляции но arduino все равно

  1. проблема с кодом

    2 голосов
    100,0%
  2. проблема в чем то в другом

    1 голосов
    50,0%
Можно выбрать сразу несколько вариантов.
  1. banan4ik

    banan4ik Нуб

    Хочу сделать интерактивную игрушку.
    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;
         
        }
      }
    }
     
     
  2. parovoZZ

    parovoZZ Гуру

    оно срабатывает

    это значит, что синтаксически код верен

    запускает. Но через несколько миллисекунд останавливает. Затем снова запускает. И так по кругу.
    Начинать надо не с писанины, а с составления алгоритма. Но для начала надо почитать, как МК выполняет программу.
     
  3. b707

    b707 Гуру

    Конечно не запускает. Посмотрите в свой код - вы где-нибудь сообщили DFP , по какому Сериал ему команды принимать? - посмотрите примеры к библиотеке
    Это не считая того, что упомянул Паровоз, и еще очень многих ошибок
     
    banan4ik нравится это.
  4. banan4ik

    banan4ik Нуб

    Ребят я не могу понять почему вы считаете что я должен быть уже гуру)))?
    Я нуб очень начинающий любитель)))
    Вы говорите то не так, это не так, ссылайтесь на строчки из кода.
    Потому что я еще многое не понимаю. Просто когда то давно учил С++
    Если есть ошибки то покажите конкретно с примером а не с высоты птичьего полета
    Я к примеру не вижу чтоб она его запускала и потом сразу выключала.
    И я на основе примеров составлял код.
    И SoftwareSerial mySerial(10, 11); 10 и 11 пины по ним dfp принимает команды
     
  5. banan4ik

    banan4ik Нуб



    И SoftwareSerial mySerial(10, 11); 10 и 11 пины по ним dfp принимает команды
     
  6. akl

    akl Гуру

    а откуда библиотека поймет, что используется этот mySerial?
    в каждом примере из тех что я нашел используется функция mp3_set_serial
     
    banan4ik и Airbus нравится это.
  7. parovoZZ

    parovoZZ Гуру

    Погоняй в симуляторе или в дебагере, раз не видишь. Там всё наглядно.
     
  8. akl

    akl Гуру

    Можно например сделать флаг, который будет отвечать за однократное срабатывание при нажатии кнопки и освобождаться при отжатии кнопки.
    Код (C++):

    if ((digitalRead(buttonSongs) == ACTIVATED) && !buttonSongs_flag)   //Песни
    {
        buttonSongs_flag=1;
        ....
    }
    if(buttonSongs_flag &&(digitalRead(buttonSongs) != ACTIVATED))
    {
       buttonSongs_flag=0;
    }
    ну и какую-нибудь защиту от дребезга неплохо бы, хотя бы в виде банального delay(50);
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Что мешает использовать аппаратный Serial?
     
  10. Airbus

    Airbus Радиохулиган Модератор

    А кто и где в коде их отправляет?
     
  11. b707

    b707 Гуру

    примеры есть в библиотеке
     
  12. Airbus

    Airbus Радиохулиган Модератор

  13. banan4ik

    banan4ik Нуб

    в частности примером брал здесь но изменял под свою механику
     
  14. b707

    b707 Гуру

    по ссылке код кривой. Смотрите лучше примеры к библиотеке
     
  15. banan4ik

    banan4ik Нуб

    Код (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;
         
        }
      }
      }
     
    Поработал над ошибками. Так все работает. Спасибо всем кто помогал