Проблема с плеером Grove mp3 v3

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

Пытаюсь подключить Grove MP3 V3 к Ардуино леонардо. Беру код с официального сайта производителя, ничего не работает. Но один аудиофайл воспроизводится при нажатии кнопки перезапуска на плеере, он работает. Библиотеки подключены. Плата и порт выбраны.

Код:

 
#include "WT2003S_Player.h"
 
 
 
#ifdef __AVR__
 
#include <SoftwareSerial.h>
 
SoftwareSerial SSerial(2, 3); // RX, TX
 
#define COMSerial SSerial
 
#define ShowSerial Serial
 
 
 
WT2003S<SoftwareSerial> Mp3Player;
 
#endif
 
 
 
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
 
#define COMSerial Serial1
 
#define ShowSerial SerialUSB
 
 
 
WT2003S<Uart> Mp3Player;
 
#endif
 
 
 
#ifdef ARDUINO_ARCH_STM32F4
 
#define COMSerial Serial
 
#define ShowSerial SerialUSB
 
 
 
WT2003S<HardwareSerial> Mp3Player;
 
#endif
 
 
 
 
 
uint8_t vol = 10;
 
uint32_t spi_flash_songs = 0;
 
uint32_t sd_songs = 0;
 
STROAGE workdisk = SD;
 
struct Play_history {
 
uint8_t disk;
 
uint16_t index;
 
char name[8];
 
}* SPISong, *SDSong;
 
 
 
void readSongName(struct Play_history* ph, uint32_t num, STROAGE disk) {
 
Mp3Player.volume(0);
 
delay(100);
 
switch (disk) {
 
case SPIFLASH:
 
Mp3Player.playSPIFlashSong(0x0001);
 
break;
 
case SD:
 
Mp3Player.playSDRootSong(0x0001);
 
break;
 
case UDISK:
 
Mp3Player.playUDiskRootSong(0x0001);
 
break;
 
}
 
ShowSerial.println("2...");
 
for (int i = 0; i < num ; i++) {
 
delay(300);
 
ph[i].disk = disk;
 
ph[i].index = Mp3Player.getTracks();
 
Mp3Player.getSongName(ph[i].name);
 
Mp3Player.next();
 
}
 
ShowSerial.println("4...");
 
Mp3Player.pause_or_play();
 
Mp3Player.volume(14);
 
delay(100);
 
}
 
 
 
void getAllSong() {
 
uint8_t diskstatus = Mp3Player.getDiskStatus();
 
ShowSerial.println(diskstatus);
 
spi_flash_songs = Mp3Player.getSPIFlashMp3FileNumber();
 
ShowSerial.print("SPIFlash:");
 
ShowSerial.println(spi_flash_songs);
 
if (spi_flash_songs > 0) {
 
SPISong = (struct Play_history*)malloc((spi_flash_songs + 1) * sizeof(struct Play_history));
 
readSongName(SPISong, spi_flash_songs, SPIFLASH);
 
}
 
if (diskstatus && 0x02) { // have SD
 
sd_songs = Mp3Player.getSDMp3FileNumber();
 
ShowSerial.print("SD:");
 
ShowSerial.println(sd_songs);
 
if (sd_songs > 0) {
 
SDSong = (struct Play_history*)malloc((sd_songs + 1) * sizeof(struct Play_history));
 
ShowSerial.println("1...");
 
readSongName(SDSong, sd_songs, SD);
 
}
 
}
 
}
 
void printSongs() {
 
ShowSerial.print("-------------------");
 
ShowSerial.print("index");
 
ShowSerial.print("<-------->");
 
ShowSerial.print("name");
 
ShowSerial.print("-------------------");
 
ShowSerial.println();
 
ShowSerial.println("-------------------spi flash-------------------------------");
 
for (int i = 0 ; i < spi_flash_songs; i++) {
 
ShowSerial.print("-------------------");
 
ShowSerial.print(SPISong[i].index);
 
ShowSerial.print("<-------->");
 
ShowSerial.print(SPISong[i].name);
 
ShowSerial.print("-------------------");
 
ShowSerial.println();
 
}
 
ShowSerial.println("-------------------sd card-------------------------------");
 
for (int i = 0 ; i < sd_songs; i++) {
 
ShowSerial.print("-------------------");
 
ShowSerial.print(SDSong[i].index);
 
ShowSerial.print("<-------->");
 
ShowSerial.print(SDSong[i].name);
 
ShowSerial.print("-------------------");
 
ShowSerial.println();
 
}
 
}
 
 
 
void setup() {
 
while (!ShowSerial);
 
ShowSerial.begin(9600);
 
COMSerial.begin(9600);
 
ShowSerial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
 
Mp3Player.init(COMSerial);
 
 
 
ShowSerial.println("0...");
 
getAllSong();
 
printMenu();
 
printSongs();
 
}
 
 
 
void loop() {
 
if (ShowSerial.available()) {
 
char cmd = ShowSerial.read();
 
switch (cmd) {
 
case '+': {
 
ShowSerial.print("Volume up: ");
 
vol = Mp3Player.getVolume();
 
Mp3Player.volume(++vol);
 
ShowSerial.print(vol);
 
ShowSerial.println();
 
break;
 
}
 
case '-': {
 
ShowSerial.print("Volume down: ");
 
vol = Mp3Player.getVolume();
 
if (--vol > 31) {
 
vol = 0;
 
}
 
Mp3Player.volume(vol);
 
ShowSerial.print(vol);
 
ShowSerial.println();
 
break;
 
}
 
case 't': {
 
uint8_t status;
 
ShowSerial.print("status:");
 
status = Mp3Player.getStatus();
 
if (status == 0x01) {
 
ShowSerial.print("playing");
 
}
 
if (status == 0x02) {
 
ShowSerial.print("stop");
 
}
 
if (status == 0x03) {
 
ShowSerial.print("pause");
 
}
 
ShowSerial.println();
 
break;
 
}
 
case 'n': {
 
Mp3Player.next();
 
break;
 
}
 
case 'p': {
 
Mp3Player.pause_or_play();
 
break;
 
}
 
case 'w': {
 
Mp3Player.playMode(SINGLE_SHOT);
 
break;
 
}
 
case 'x': {
 
Mp3Player.playMode(SINGLE_CYCLE);
 
break;
 
}
 
case 'y': {
 
Mp3Player.playMode(CYCLE);
 
break;
 
}
 
case 'z': {
 
Mp3Player.playMode(RANDOM);
 
break;
 
}
 
case 'c': {
 
ShowSerial.print(Mp3Player.copySDtoSPIFlash());
 
break;
 
}
 
case '1':
 
case '2':
 
case '3':
 
case '4':
 
case '5':
 
case '6':
 
case '7':
 
case '8':
 
case '9':
 
ShowSerial.print("play:");
 
if (workdisk == SD) {
 
Mp3Player.playSDRootSong(cmd - '0' - 1);
 
ShowSerial.print(cmd + ": ");
 
ShowSerial.print(SDSong[cmd - '0'].name);
 
}
 
if (workdisk == SPIFLASH) {
 
Mp3Player.playSPIFlashSong(cmd - '0' - 1);
 
ShowSerial.print(cmd + ": ");
 
ShowSerial.print(SPISong[cmd - '0'].name);
 
}
 
ShowSerial.println();
 
break;
 
default:
 
break;
 
}
 
}
 
}
 
 
 
void printMenu(void) {
 
ShowSerial.println("MP3 Command List:");
 
ShowSerial.println("-----------------");
 
ShowSerial.println("'+' or '-' : raise/lower volume");
 
ShowSerial.println("'1' ~ '9' : select a song");
 
ShowSerial.println("'n' : next song");
 
ShowSerial.println("'s' : switch play disk, spi flash");
 
ShowSerial.println("'p' : play or pause");
 
ShowSerial.println("'w' : set playmode single no loop");
 
ShowSerial.println("'x' : set playmode single loop");
 
ShowSerial.println("'y' : set playmode all loop");
 
ShowSerial.println("'z' : set playmode random");
 
ShowSerial.println("'c' : Copy mp3 to SPIFlash");
 
ShowSerial.println(" (Yes, this really does go by copy order.)");
 
ShowSerial.println();
 
ShowSerial.println("Any other key to show this menu");
 
ShowSerial.println();
 
}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

SoftwareSerial Library

The Arduino hardware has built-in support for serial communication on pins 0 and 1 (which also goes to the computer via the USB connection). The native serial support happens via a piece of hardware (built into the chip) called a UART. This hardware allows the Atmega chip to receive serial communication even while working on other tasks, as long as there room in the 64 byte serial buffer.

The SoftwareSerial library has been developed to allow serial communication on other digital pins of the Arduino, using software to replicate the functionality (hence the name "SoftwareSerial"). It is possible to have multiple software serial ports with speeds up to 115200 bps. A parameter enables inverted signaling for devices which require that protocol.

The version of SoftwareSerial included in 1.0 and later is based on the NewSoftSerial library by Mikal Hart.

To use this library
#include <SoftwareSerial.h>

Limitations

The library has the following known limitations:

  • If using multiple software serial ports, only one can receive data at a time.
  • Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  • Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
  • On Arduino or Genuino 101 the current maximum RX speed is 57600bps
  • On Arduino or Genuino 101 RX doesn't work on Pin 13

If your project requires simultaneous data flows, see Paul Stoffregen's AltSoftSerial library. AltSoftSerial overcomes a number of other issues with the core SoftwareSerial, but has it's own limitations. Refer to the AltSoftSerial site for more information.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1. Код вставить по правилам не смог.

2. На Леонардо есть хард сериал (ысчо адын). Нахера софтварный???

3. Выше привел кусок документации - ТАК КАК ТЫ НАПИСАЛ -- НЕЛЬЗЯ!

====================

Вывод: долбо..б. Фтопку!

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

rx воткнуть в 8? А с кодом че?