Воспроизведение сэмпла при нажатии кнопки
- Войдите на сайт для отправки комментариев
Чт, 02/07/2015 - 13:25
Друзья, подскажите пожалуйста.
Несколько дней назада впервые столкнулся с Ардуино, так как возникла задача реализации данной схемы:
Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут, не принципиально будет ли это mp3 или wav или другой аудиоформат. По большому счету, функционал можно сравнить с дверным звонком. Важно, чтобы во время воспроизведения кнопка была не активна, т.е. аудиофайл должен доиграть до конца (наверное это не сложно реализовать в скетче).
Очень буду признателен за любую помощь и подсказку (с чего начать), посоветуйте как целесообразней всего реализовать данное решение.
Большое спасибо за внимание!
Подсказываю: погуглите "arduino wtv020-sd-16p"
Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.
Подсказываю: погуглите "arduino wtv020-sd-16p"
Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.
Спасибо, читаю материал по данному модулю.
Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.
Нашел вариант где данный модуль используется без Ардуино. В моем случае это плюс, так как удешевляет всю схему. Подскажите пожалуйста, можно ли как-то без Ардуино сделать так, чтобы кнопка плей повторно не воспроизводила трек (проверить возможности нет, на всех видео показывают только переключение треков), может быть она и так не запускает трек повторно.
Я с Ардуино использую, вряд ли подскажу. А разве в начале темы речь шла о нескольких аудиозаписях ?
Я с Ардуино использую, вряд ли подскажу. А разве в начале темы речь шла о нескольких аудиозаписях ?
Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца.
С Арудино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца.
Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца.
С Ардуино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца.
Да, конечно, можно. Примерно так:
If button_pressed
Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца.
С Ардуино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца.
Да, конечно, можно. Примерно так:
If button_pressed
Пожалуйста, скажите, что нужно еще заказать, кроме самого модуля. И какую модификацию Ардуино?
http://www.banggood.com/5V12V-MP3-Audio-Decoder-Board-Digital-With-TF-FM-Radio-USB-p-984591.html
http://www.banggood.com/5V12V-MP3-Audio-Decoder-Board-Digital-With-TF-FM...
Пожалуйста, скажите, что нужно еще заказать, кроме самого модуля. И какую модификацию Ардуино?
Задача, конечно, не для Ардуино, слишком просто все. Впрочем, дело хозяйское.
1. Ардуино. Возьмите Nano, меньше двух долларов на Алиэкспрессе. По USB подключите к компьютеру, в качестве блока питания можно пятивольтовое зарядное использовать.
2. wtv020-sd-16p. Запитать можно будет от пина 3V3 на Nano.
3. MicroSD карточка для wtv020-sd-16p. 1-2Гб, подробности погуглите, там есть элемент лотереи.
4. Динамик. Погуглите, с какими динамиками работает wtv020-sd-16p.
5. Кнопка.
6. Блок питания.
Araris, вот запитывать от 3.3в нано пожалуй не стоит, там 50ма макс. ток, а модуль с картой и динамиком кушает существенно поболее.
Araris, вот запитывать от 3.3в нано пожалуй не стоит, там 50ма макс. ток, а модуль с картой и динамиком кушает существенно поболее.
Возможно и не стоит, я запитывал от Uno, там тоже указан максимальный ток 50 mA, работает без проблем. Самый длинный трек порядка 15-ти секунд.
UPD: да, пожалуй Вы правы, В нескольких местах нашел что-то типа "You need a source that can give 100mA while it talks without dropping out." Тем не менее, у меня от Uno - работает.
Araris, здравствуйте! Пожалуйста, помогите со схемой подключения. У меня есть Arduino Nano V3.0 AVR ATmega328 P-20AU, макетная плата + питание для макетной платы 5в/3.3в, блок питания на 5в, звуковой модуль WTV020-SD-16P + карточка на 256 мб. Я посмотрел несколько видео, в некоторых случаях используют резисторы и 4 кнопки (я так понимаю, для разных функций:play, next, prev, volume+\-). В общем, везде схемы разные, мне же нужен самый просто вариант, как Вы уже поняли, нажал кнопку - играет одна единственная запись на карте до конца. Кнопку я не смог купить, как ни странно не было в наличии, может быть дома, что-то разберу, но мне кажется, что можно сымитировать ее нажатие, замкнув контакт, не так ли?
Это моя первая работа, если с кодом (С++) я знаком и скетчи мне понятны, то с железом вообще не приходилось работать, хоть и имею какое-то представление о его устройстве. Очень буду Вам признателен за помощь, извините, если где-то задаю глупые вопросы.
Попытался переделать схему для Arduino Uno под свою Nano по аналогии:
Исходник схемы https://www.sendspace.com/file/m8b5ak для http://fritzing.org/home/
Я так понимаю, что эти кнопки не нужны, так же как и диод с резистором...
Пожалуйста, помогите со схемой подключения.
1. Без проблем. Дойду до работы - все сюда выложу.
2. Карточка на 256 мб говорите ? Не факт, что подойдет. В Интернетах пишут, что карточки лучше на 1, или 2 Гб пользовать.
Пожалуйста, помогите со схемой подключения.
1. Без проблем. Дойду до работы - все сюда выложу.
2. Карточка на 256 мб говорите ? Не факт, что подойдет. В Интернетах пишут, что карточки лучше на 1, или 2 Гб пользовать.
Спасибо большое! 256 есть под рукой, но я однозначно буду искать еще 1-2гб.
Итак, выкладываю.
1. Звуковые файлы: файлы должны иметь определенный формат и определенные имена. Подробно об этом написано, например, здесь http://www.buildcircuit.com/how-to-convert-mp3-and-wav-files-to-ad4-format-wtv020sd-tutorial/ . Я конвертировал mp3 в формат ad4 (sampling rate 32kHz) с помощью http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Widgets/USBRecordingNbk1.3.0.zip.
2. Карточка: форматируем в FAT 16 (Windows называет это просто FAT). Записываем туда 0000.ad4, 0001.ad4, 0002.ad4, 0003.ad4, сколько там их нужно.
3. Схемы подключения:
Выбор номеров пинов, естественно, на Ваше усмотрение.
Питаю модуль я от Ардуины. Допускаю, что это не вполне правильно, но ведь работает же ))
4. Скетч: библиотекой я решил не пользоваться, в начале скетча ручками делаем ресет модуля, а дальше есть просто void sendCommand(unsigned int command), ее вполне достаточно.
УПС ! Ошибка на первом рисунке. Там нумерация должна быть такая :
1 16
2 15
3 14
4 13
5 12
6 11
7 10
8 9
УПС ! Ошибка на первом рисунке. Там нумерация должна быть такая :
1 16
2 15
3 14
4 13
5 12
6 11
7 10
8 9
Добрый день, спасибо Вам большое! К сожалению не смог ответить раньше. Я слегка запутался, вот сижу сейчас с макетной платой и пытаюсь все это соеденить. Не могу понять с землей на первом рисунке и на схеме второго рисунка. Если Вам не будет сложно, могли бы нарисовать схему под arduino nano. Я буду пробовать конечно осилисть самостоятельно, но было занчителньо легче для первого раза иметь схему под мою плату.
Araris
Вроде разобрался по первому рисунку, пробую собрать. Вы бы не могли поделиться сктетчем?
Подскажите пожалуйста, для проверки, можно ли использовать динамик, от наушников?
Вторая картинка тут вообще необязательна, поскольку на первой картинке красным подписано, с каким пином Ардуино что соединять. Схема под Нано ничем принципиально не будет отличаться от схемы под Уно. Шесть проводов на Ардуино, два на динамик - это и схемой-то назвать стыдно. Разберитесь не торопясь, все получится. ))
Вторая картинка тут вообще необязательна, поскольку на первой картинке красным подписано, с каким пином Ардуино что соединять. Схема под Нано ничем принципиально не будет отличаться от схемы под Уно. Шесть проводов на Ардуино, два на динамик - это и схемой-то назвать стыдно. Разберитесь не торопясь, все получится. ))
Разобрался, подключил все как у Вас на картинке. Не могу сообразить как мне в этой схеме впихнуть кнопку, чтобы по ее нажатию воспроизводился сэмпл. Хотел выложить фото моей конструкции, но к сожалению не загружаются картинки, какой-то баг. Как-то у меня за неделю, что этим не занимался все смешалось в голове.
upd: так и не осилил, жду Вас как манны небесной) не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.
кнопка просто воткнута в плату
не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.
Вот здесь http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku написано более чем достаточно для того, чтобы разобраться с кнопками. После того, как научитесь ловить нажатие кнопки, получится что-то вроде
if ( buttonPressed ) // дальше используйте строки 27-30 из приведенного мной выше скетча
{ sendCommand(0); delay(500);
while
(digitalRead(WTV020_BUSY)) {}
sendCommand(STOP); }не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.
Вот здесь http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku написано более чем достаточно для того, чтобы разобраться с кнопками. После того, как научитесь ловить нажатие кнопки, получится что-то вроде
if ( buttonPressed ) // дальше используйте строки 27-30 из приведенного мной выше скетча
{ sendCommand(0); delay(500);
while
(digitalRead(WTV020_BUSY)) {}
sendCommand(STOP); }Спасибо, читаю. Очень познавательная статья. Подскажите пожалуйста, если у меня нет резистора, можно как-то подключить кнопку без него? Кнопку подключать к 3.3в тоже вместе с wtv020. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы.
Подскажите пожалуйста, если у меня нет резистора, можно как-то подключить кнопку без него? Кнопку подключать к 3.3в тоже вместе с wtv020. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы.
Если нет резистора, то гуглите фразу "arduino внутренний подтягивающий резистор".
Кнопку лучше подключать к 5В, к wtv020 она никакого отношения не имеет и никак с ним не связана (кроме как логикой программы, естественно).
Я не считаю вопросы глупыми, поэтому готовых ответов не даю сознательно, разбирайтесь самостоятельно, с готовых ответов толку не бывает.
Подскажите пожалуйста, если у меня нет резистора, можно как-то подключить кнопку без него? Кнопку подключать к 3.3в тоже вместе с wtv020. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы.
Если нет резистора, то гуглите фразу "arduino внутренний подтягивающий резистор".
Кнопку лучше подключать к 5В, к wtv020 она никакого отношения не имеет и никак с ним не связана (кроме как логикой программы, естественно).
Я не считаю вопросы глупыми, поэтому готовых ответов не даю сознательно, разбирайтесь самостоятельно, с готовых ответов толку не бывает.
Спасибо, прочитал две статьи, мне чуть тяжело въехать. Этот резистор подтягивается автоматически?
Также возможна ситуация, когда функцией pinMode вывод сконфигурирован как вход (INPUT), после чего функцией digitalWrite на него подается высокий уровень HIGH. В этом случае к выводу будут подключены внутренние подтягивающие резисторы номиналом 20 кОм, что приведет к возникновению на нем высокого уровня HIGH. При считывании значение HIGH будет удерживаться до тех пор, пока внешними цепями на выводе не будет сформирован низкий уровень LOW. Именно так работает режим INPUT_PULLUP.
Абсолютно с Вами согласен на счет толка, от материала освоенного самостоятельно, он запоминается навсегда, но мне нужно завтра запустить эту схему, потому, от подсказок я не могу отказаться. Кроме Вас спросить не у кого. Подскажите, почему чаще всего в примерах идет 13 пин? Если подключить без резистора чем это чревато?
Взгляните пожалуйста на схему, я правильно ее изобразил? Будем смотреть по 13 пину в каком он состоянии LOW или High и соответственно запускать сэмпл, если я правильно понял.
Очень не хочется завтра искать резистор на 10 кОм, буду Вам крайне признателен если Вы покажите как в скетче реализовать внутренний подтягивающий резистор.
Вот, что нашел на форуме
pinMode(pin, INPUT); // настраиваем пин на вход
digitalWrite(pin, HIGH); //включаем подтягивающий резистор на 20К
Очень не хочется завтра искать резистор на 10 кОм,
на самом деле можно и не точно, полагаю хватит "попробовать" с любым в диапазоне 5к - 100к
Давайте теперь я взорву вам вам мозг :)
ардуино и сама прекрасно играет вавки, без всяких плееров
и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)
и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)
будем продавать музыку в залоченных контроллерах, дабы пираты не спёрли ноты.
будем продавать музыку в залоченных контроллерах, дабы пираты не спёрли ноты.
а ты будешь петь или играть?
а ты будешь петь или играть?
я буду продавать.
Давайте теперь я взорву вам вам мозг :)
ардуино и сама прекрасно играет вавки, без всяких плееров
и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)
Да, Вы взорвали нам нам мозг, однако в топикстарте задача была сформулирована как "Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут". Возможно ли прошить один минут аудиозаписи в память Нано, сомневаюсь.
Да, Вы взорвали нам нам мозг, однако в топикстарте задача была сформулирована как "Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут". Возможно ли прошить один минут аудиозаписи в память Нано, сомневаюсь.
ну для воспроизведения точно не нужно ничего более чем СД, динамик, транзистор и несколько сопротивлений
к тому же ничего не говорилось о качестве вавки...в смысле понижая битрейт можно затолкать все что угодно.
mobi3, ну если на завтра, то буду конкретен.
Не подключайте кнопку к пину 13, это специфический пин, на нем аппаратно подвешен светодиод, пин d13 обычно используют как OUTPUT.
Итак, один контакт кнопки - земля, другой, предположим, пин 10.
В скетче:
#define BUTTON_PIN 10
void setup()
{
pinMode(BUTTON_PIN, INPUT); // настраиваем пин на вход
digitalWrite(BUTTON_PIN, HIGH); //включаем подтягивающий резистор на 20К
}
void loop()
{
if ( digitalRead(BUTTON_PIN) )
{ sendCommand(0); delay(500); while (digitalRead(WTV020_BUSY)) {} sendCommand(STOP); }
}
ну для воспроизведения точно не нужно ничего более чем СД, динамик, транзистор и несколько сопротивлений
к тому же ничего не говорилось о качестве вавки...
Согласен, но гуманно ли предлагать этот вариант человеку, испытывающему затруднения с подключением кнопки ?
в общем даже вот с кнопочками есть :) и прям на нано
http://www.instructables.com/id/Playing-Wave-file-using-arduino/
Согласен, но гуманно ли предлагать этот вариант человеку, испытывающему затруднения с подключением кнопки ?
конечно, там же вон все разрисовано даже и скеч и даже 4 кнопки а не одна :)
и даже как вавки на карточку записать :)
понижая битрейт можно затолкать все что угодно.
я же говорю - нужно однобитную музыку продавать
я же говорю - нужно однобитную музыку продавать
вот это хорошая идея. по чем бит?
вот это хорошая идея. по чем бит?
то, что на фотке по 30 с чемто денег впаривают творцы.
то, что на фотке по 30 с чемто денег впаривают творцы.
будем демпинговать? аль наоборот цену загнем, типа эксклюзив, всего пару килобайт продаем...
mobi3, ну если на завтра, то буду конкретен.
Не подключайте кнопку к пину 13, это специфический пин, на нем аппаратно подвешен светодиод, пин d13 обычно используют как OUTPUT.
Итак, один контакт кнопки - земля, другой, предположим, пин 10.
В скетче:
#define BUTTON_PIN 10
void setup()
{
pinMode(BUTTON_PIN, INPUT); // настраиваем пин на вход
digitalWrite(BUTTON_PIN, HIGH); //включаем подтягивающий резистор на 20К
}
void loop()
{
if ( digitalRead(BUTTON_PIN) )
{ sendCommand(0); delay(500); while (digitalRead(WTV020_BUSY)) {} sendCommand(STOP); }
}
Добрый день, пробую запустить, я так опнимаю, что это не весь скетч? Может нужно какую-то библиотеку подключить?
Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.
Друзья, помогите пожалуйста со скетчем. У меня вышло как-то так, но не работает в чем я не удивлен.
Моя последня схема:
Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.
Сейчас попробую, сделать. Посмотрите пожалуйста, что у меня вышло в последнем сообщении. Хотя бы по схеме, там все правильно?
Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.
Просмотрел тему, Вы показывали некоторые части скетча, но в целом его не выкладывали. Несколько раз просмотрел.
mobi3, вставляйте пожалуйста код в сообщение по правилам , принятым на форуме: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii Рисунок тоже нужно уменьшать при вставке, там есть опция ввести другой размер изображения.
mobi3, вставляйте пожалуйста код в сообщение по правилам , принятым на форуме: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii Рисунок тоже нужно уменьшать при вставке, там есть опция ввести другой размер изображения.
Извините пожалуйста, исправился. Так подойдет?
Пробуйте: