Ошибка при воспроизведении музыкальных файлов Sparkfun MP3 Shield и Arduino Due.
Код работал на моем Arduino Uno. Я подключил его точно так же и теперь получаю ошибку.
Вот ошибка, которую я получаю при попытке загрузить свой код на сайт:
Arduino: 1.8.5 (Windows 10), Board: "Arduino Due (Programming Port)"
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp: In static member function 'static void SFEMP3Shield::refill()':
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp:1984:7: error: 'sei' was not declared in this scope
sei();
^
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp:2006:9: error: 'cli' was not declared in this scope
cli(); // allow transfer to occur with out interruption.
^
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp: In member function 'void SFEMP3Shield::SendSingleMIDInote()':
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp:2053:7: error: 'cli' was not declared in this scope
cli(); // allow transfer to occur with out interruption.
^
C:\Program Files (x86)\Arduino\libraries\SFEMP3Shield\SFEMP3Shield.cpp:2067:7: error: 'sei' was not declared in this scope
sei(); // renable interrupts for other processes
^
exit status 1
Error compiling for board Arduino Due (Programming Port).
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Вот мой код:
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
SdFat sd;
SFEMP3Shield MP3player;
const uint8_t volume = 10; // Громкость MP3-плеера 0=макс., 255=самая низкая (выкл.)
//10 для нормального, 50 для тестирования
const uint16_t monoMode = 1;
void setup() {
initSD();
initMP3Player();
}
void loop() {
if(!MP3player.isPlaying()){
MP3player.playTrack(1);
}
}
void initSD() {
if(!sd.begin(SD_SEL, SPI_HALF_SPEED))
sd.initErrorHalt();
if(!sd.chdir("/"))
sd.errorHalt("sd.chdir");
}
void initMP3Player() {
uint8_t result = MP3player.begin();
MP3player.setVolume(volume, volume);
MP3player.setMonoMode(monoMode);
}
@Wes Summers, 👍1
1 ответ
Библиотека написана для Uno, а не для Due. Он основан на двух инструкциях, доступных только в компиляторе AVR.
Новые версии ядра предоставляют пару макросов: interrupts()
и noInterrupts()
, которые следует использовать вместо sei()
и cli()
соответственно, которые также должны предоставляться ядром Due, чтобы сделать его кроссплатформенным. Однако эта библиотека никогда не обновлялась для работы с этими макросами.
Вы можете заменить вызовы sei()
и cli()
в библиотеке на interrupts()
и noInterrupts()
, однако это может не заставить его работать, поскольку он был написан с учетом Uno и других чипов на базе AVR.
- Использование экрана SD-карты на Arduino Due
- Как снять Arduino Due и Mega shields без изгиба штифтов?
- Arduino Due vs Mega 2560
- SD-карта не инициализируется
- Точность часов времени Arduino
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- Неиспользуемые контакты в Arduino L293D motor shield?
У меня нет разрешения на изменение этого файла библиотеки. Знаешь, как мне это получить?, @Wes Summers
У вас должно быть разрешение на его редактирование, иначе вы не сможете его установить. Или вы находитесь в какой-то странной системе, контролируемой некой всеобъемлющей всезнающей силой?, @Majenko
Я просто изменил разрешения в свойствах. Код загружается, но плата ничего не делает. Он даже не мигает, когда я нажимаю сброс., @Wes Summers
Я боялся этого. Библиотеке, вероятно, нужно много работать, чтобы работать в срок., @Majenko
есть ли у вас предложения, как мне воспроизводить mp3-файлы на каком-либо устройстве, может быть, на другом щите или что-то в этом роде?, @Wes Summers
Вам просто нужна либо библиотека для этого щита, которая работает с должным, либо нужно узнать, как работает щит и написать для него новую библиотеку., @Majenko
Мега использует те же библиотеки, что и уно, верно?, @Wes Summers