Arduino:Примеры/Simple Audio Player Zero: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
Строка 34: | Строка 34: | ||
==Код== | ==Код== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Простой аудиопроигрыватель для Arduino Zero | Простой аудиопроигрыватель для Arduino Zero |
Версия от 18:20, 14 мая 2023
{{#setlogo:ArduinoCommunityLogo.png}}
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Простой аудиопроигрыватель для Arduino Zero[1]
Этот пример показывает, как настроить Arduino Zero на проигрывание WAV-файла, хранящегося на SD-карте, при помощи библиотеки AudioZero и 10-битного цифро-аналогового преобразователя.
Необходимое оборудование
- Плата Arduino Zero
- Динамик или наушники на 8 Ом
- Модуль Arduino c SD-картой на CS4 (вроде модуля Arduino Wireless SD)
- Компоненты для построения цепи с внешним звукоусилителем: LM386 (маломощный звукоусилитель), потенциометр на 10 кОм, резистор на 10 Ом, 2 конденсатора на 10 мкФ, конденсатор на 0,05 мкФ (или 0,1 мкФ), конденсатор на 250 мкФ
Цепь
Модуль, в который вставлена SD-карта, помещается поверх Arduino Zero. Файл под названием «test.wav» записан в корневой директории SD-карты. В качестве теста можно попробовать подсоединить наушники напрямую к «земле» и DAC0 (в зависимости от полярности).
Чтобы подключить к плате динамик, между ним и контактом DAC0 нужно будет добавить цепь со звукоусилителем. Ее цель – увеличить громкость динамика. Существует много разных звукоусилителей, и один из самых распространенных – это LM386. Схема ниже показывает, как создать эту цепь при помощи LM386 и еще нескольких компонентов. Питание LM386 можно осуществить при помощи разных источников напряжения, и для этого нужно подключить его контакт Vs, например, к +5V на Arduino Zero или внешней 9-вольтовой батарее. Коэффициент усиления в цепи можно увеличить за счет конденсатора, подключенного к 1-ому и 8-ому контактам LM386. С конденсатором на 10 мкФ коэффициент усиления будет составлять «200», а без него – «50». Потенциометр позволяет управлять громкостью, производимой звукоусилителем.
Внимание: Подключать напрямую динамик к контактам Arduino Zero не следует.
Аудиофайл
Аудиофайл, хранящийся на SD-карте, должен быть в WAV-формате и в следующем качестве: моно, 8 бит, 88200 Гц, беззнаковая PCM. Такие файлы можно получить при помощи программ вроде audacity.
Код
/*
Простой аудиопроигрыватель для Arduino Zero
Демонстрирует использование библиотеки Audio для Arduino Zero
Необходимое оборудование:
* Модуль Arduino c SD-картой, подключенной к CS4
* Звуковой файл «test.wav» в корневой директории SD-карты
* Звукоусилитель, подключенный к DAC0 и «земле»
* Динамик, подключенный к звукоусилителю
Arturo Guadalupi <a.guadalupi@arduino.cc>
Angelo Scialabba <a.scialabba@arduino.cc>
Claudio Indellicati <c.indellicati@arduino.cc>
Этот код не защищен авторским правом.
http://www.arduino.cc/en/Tutorial/SimpleAudioPlayer
*/
#include <SD.h>
#include <SPI.h>
#include <Audio.h>
void setup() {
// запускаем последовательную коммуникацию на скорости 9600 бод (в отладочных целях):
Serial.begin(9600);
// настраиваем SD-карту:
Serial.print("Initializing SD card..."); // "Инициализация SD-карты..."
if (!SD.begin(4)) {
Serial.println(" failed!"); // " не удалась!"
while(true);
}
Serial.println(" done."); // " завершена успешно."
// стерео 44100 КГц = 88200; пребуферация – 100 миллисекунд:
Audio.begin(88200, 100);
}
void loop() {
int count = 0;
// открываем WAV-файл, записанный на SD-карту:
File myFile = SD.open("test.wav");
if (!myFile) {
// если файл не открылся, сообщаем об ошибке и останавливаем скетч:
Serial.println("error opening test.wav"); // "ошибка при попытке открыть test.wav"
while (true);
}
const int S = 1024; // количество сэмплов, считываемых за один блок
short buffer[S];
Serial.print("Playing"); // "Проигрывание"
// пока файл не закончится:
while (myFile.available()) {
// считываем сэмплы из файла в буфер:
myFile.read(buffer, sizeof(buffer));
// подготавливаем сэмплы:
int volume = 1024;
Audio.prepare(buffer, S, volume);
// скармливаем» сэмплы:
Audio.write(buffer, S);
// каждые 100 блоков пишем «.»:
count++;
if (count == 100) {
Serial.print(".");
count = 0;
}
}
myFile.close();
Serial.println("End of file. Thank you for listening!"); // "Конец файла. Спасибо за прослушивание!"
while (true) ;
}