Помогите разобраться с WTV020M1 шилдом
- Войдите на сайт для отправки комментариев
Ср, 21/10/2015 - 13:53
Приобретен шилд ( http://1mdl.ru/shop/arduino_ardino_1/modul_audio_wtv020m01_v1_00/ ) был для озвучивания проектов на ардуино. Но некак не пойму как им упровлять с помощью Ардуино. Алгоритм примерно такой: Пины А0-А5 задаются на считывание. Если на пине А0 лог 1 то проигрываем трек №1 если после лог 1 следует лог 0 то проигрываем трек №2. Ну и по аналогу на всех следующих пинах. Информацию по шилду нашел только упровление спомощью кнопок но это не подходит(((
Если кто работал с ним подскажите пожалуйсто)
Это не шилд, а модуль.
Подключение:
SD-карта должна быть не более 2 Гб, отформатирована в FAT16.
Файлы (максимум 512 файлов) должны быть в формате AD4, битрейт предпочитетельно 32 кГц, называния файлов 0000.ad4, 0001.ad4, 0002.ad4 (как конвертировать, примеры файлов). WAV и MP3 модуль не воспроизводит.
Питание модуля должно быть 3,3 В, при питании от 5 В карта памяти сразу умирает, модуль после пары таких включений тоже умирает.
Если Arduino 5-вольтовая, то сигнальные линии также должны подключаться через резисторы 470 Ом - 1 кОм (на схеме не показаны).
Ссылка на библиотеку.
Мануал на модуль.
Скетч
/* Example: Control a WTV020-SD-16P module to play voices from an Arduino board. Created by Diego J. Arevalo, August 6th, 2012. Released into the public domain. */ #include <Wtv020sd16p.h> int resetPin = 2; // The pin number of the reset pin. int clockPin = 3; // The pin number of the clock pin. int dataPin = 4; // The pin number of the data pin. int busyPin = 5; // The pin number of the busy pin. /* Create an instance of the Wtv020sd16p class. 1st parameter: Reset pin number. 2nd parameter: Clock pin number. 3rd parameter: Data pin number. 4th parameter: Busy pin number. */ Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Initializes the module. wtv020sd16p.reset(); } void loop() { //Plays synchronously an audio file. Busy pin is used for this method. wtv020sd16p.playVoice(0); //Plays asynchronously an audio file. wtv020sd16p.asyncPlayVoice(1); //Plays audio file number 1 during 2 seconds. delay(5000); //Pauses audio file number 1 during 2 seconds. wtv020sd16p.pauseVoice(); delay(5000); //Resumes audio file number 1 during 2 seconds. wtv020sd16p.pauseVoice(); delay(5000); //Stops current audio file playing. wtv020sd16p.stopVoice(); //Plays synchronously an audio file. Busy pin is used for this method. wtv020sd16p.asyncPlayVoice(2); delay(2000); //Mutes audio file number 2 during 2 seconds. wtv020sd16p.mute(); delay(2000); //Unmutes audio file number 2 during 2 seconds. wtv020sd16p.unmute(); delay(2000); //Stops current audio file playing. wtv020sd16p.stopVoice(); }Спасибо огромное!!!
Гугл знает всё... ;)
Небольшая опечатка в схеме( 7-ой и 10-й пины на модуле
Собрал по схемке и загрузил библиотеку. Чудо динамик ожил поёт))) Как бы теперь запелить чтобы воспроизводился нужный трек по определённому действию?
хех, вы ждете готового решения?
Я с функциями не очень дружу(( Натолкните немного с чего начать. Примерно понемаю что нужно мониторить порты и на каком есть изменение тот трек и запускать. Но как ето записать пока незнаю(
Я с функциями не очень дружу(( Натолкните немного с чего начать. Примерно понемаю что нужно мониторить порты и на каком есть изменение тот трек и запускать. Но как ето записать пока незнаю(
Начните с этого: http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf
И с функциями подружитесь и как записать будете знать.
Спасибо) Литература действительно достойная. Будем изучать))
Можете подсказать где порописать wtv020sd16p.asyncPlayVoice(5); что-бы проиграло трек 1 раз после включения ардуинки?
#include <Wtv020sd16p.h> int resetPin = 2; // The pin number of the reset pin. int clockPin = 3; // The pin number of the clock pin. int dataPin = 4; // The pin number of the data pin. int busyPin = 5; // The pin number of the busy pin. Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Initializes the module. wtv020sd16p.reset(); } void loop() { wtv020sd16p.asyncPlayVoice(5); delay(5000);По этому наброску трек с номером 0005.ad4 играется в цикле.
строки 16-17 перенести после 12-й.
Я сразу так и написал(( но тогда вообще не чего не происходит (молчит совсем).
После ресета попробуйте секундную паузу сделать.
После ресета попробуйте секундную паузу сделать.
Спасибо))) Пауза помогла) А то я сломал уже всю голову и сьел две плитки шоколада)
Помогите, собрал по такой схеме
При воспроизведении светодиод гаснет, в динамике какой то ели слышимый шум, голоса нет. Что может быть?
какие характеристики динамика? Файлы правильно сконвертировал в AD4?
динамик 4 ома 3 вата, файл в AD4, у другого человека этот файл воспроизводится
Скетч бы еще не помешал.
У меня на некоторых уровнях громкости тоже хрипит.
И както 4ом 3вт мне кажется жестоко, попробуйте динамик сменить на менее мощьный.
у меня наушник обычный подсоединен 16 ом
#include "DHT.h"//библиотека для работы датчика температуры и влажности #define DHTPIN 6 //датчик подключен к пину 6 #define DHTTYPE DHT11 //тип датчика #include <Wtv020sd16p.h> //библиотека работы модуля WTV020 int resetPin = 7; //подключение ножки сброса модуля к пину 7 int clockPin = 8; //подключение ножки тактового сигнала модуля к пину 8 int dataPin = 5; //подключение информационного вывода модуля к пину 5 int busyPin = 4; //подключение вывода "занятости" модуля к пину 4 Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); //объявляем модулю, куда что подключили int info; //переменная для записи пришедшего в Serial-порт значения DHT dht(DHTPIN, DHTTYPE); //внутренняя функция библиотеки DHT в которую указывается тип и пин подключения датчика void setup() { //функция начальной настройки микроконтроллера (вызывается едноразово, при подаче питания) Serial.begin(9600); //инициализируем Serial порт на работу со скоростью 9600 бод dht.begin(); //инициализируем датчик DHT22 wtv020sd16p.reset(); //перед работой с модулем WTV020, его необходимо "сбросить" } void loop() { //циклическая функция if(Serial.available() > 0){ //если что-то пришло в Serial-порт info = Serial.parseInt(); //то записать это значение в переменную info switch(info){ //проверяем содержимое info case 1: //если пришел код 1 int temperature = dht.readTemperature(); //то записать в temperature значение температуры int humidity = dht.readHumidity(); //записать в humidity значениие влажности Serial.println(temperature); //вывод значения температуры в Serial Serial.println(humidity); //вывод значения влажности в Serial temperature = temperature + 90; //записи температурных значений (0-49 С) начинаются с 91го файла, поэтому прибавляем к значению температуры 90 humidity = humidity - 5; //записи значений влажности (10-94%) начинаются с 5го файла, поэтому вычитаем от значения влажности 5 /* Пример: Температура 2 градуса. Файл с записанным значением находится под номером 92. Что бы после обратиться к файлу 92, проведем операцию: temperature = temperature + 90; 92 = 90 + 2; В результате переменная temperature будет равна 92 */ wtv020sd16p.playVoice(4); //воспроизвести файл №4 с записью "информация с датчиков" delay(1900); //ждем 1,9 сек для воспроизведения* wtv020sd16p.playVoice(15); //воспроизвести файл №temperature delay(10); //ждем 10 мс для воспроизведения* wtv020sd16p.playVoice(humidity); //воспроизвести файл №humidity /* - задержки подобраны опытным путем, поскольку модуль при воспроизведении должен использовать выход busy, но, иногда, по неизвестным причинам, не делает этого (возможно мне просто попался такой модуль)*/ delay(100); break; } //скобка закрытия switch } //скобка закрытия проверки Serial-порта } //закрытие циклической функции loopДа вроде ничего криминального, а с выводом занято и таиймингами отличными от тех что в даташите это известная проблема у модуля.
Я недавно переписывал библиотеку. Если не забуду то выложу.
А по хрипу, попробуйте всетаки динамик менее мощный.
убери все, что не относится к звуковому модулю и прверь.
Все то же самое, небольшой писк в начале и шипение, это все ели слышно
Питание модуля должно быть 3,3 В, при питании от 5 В карта памяти сразу умирает, модуль после пары таких включений тоже умирает.
Если Arduino 5-вольтовая, то сигнальные линии также должны подключаться через резисторы 470 Ом - 1 кОм (на схеме не показаны).
Подскажите пожалуйста, сигнальные линии - это все что из ардуины выходят, кроме питания и земли?
Да
всю голову и сьел две плитки шоколада)
Ничего себе, как жизнь-то поменялась! Мы как-то пивом обходились :)
Добрый день.
я использую в качестве инициирующего сигнала проверку напряжения с фоторезистора, при этом если свет есть ардуина запускает трект поле каждого цикла, подскажите как можно прогрывать композицию пока она не закончиться, но при этом если инициирующий сигнал пропал сразу выключать ее.
Я думал сделать проверку того что трек играет, но не нашёл такой функции в библиотеке(
#include <Wtv020sd16p.h> int resetPin = 3; // The pin number of the reset pin. int clockPin = 4; // The pin number of the clock pin. int dataPin = 5; // The pin number of the data pin. int busyPin = 6; // The pin number of the busy pin. int photocellPin = A1; // сенсор и понижающий резистор на 10 кОм подключены к a1 int photocellReading; // данные считываемые с аналогового пина Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Initializes the module. wtv020sd16p.reset(); } void loop() { photocellReading = analogRead(photocellPin); Serial.print("Analog reading = "); Serial.print(photocellReading); // аналоговые значения if (photocellReading < 800) { Serial.println(" - Bright"); wtv020sd16p.stopVoice(); } else { Serial.println(" - Very bright"); //wtv020sd16p.asyncPlayVoice(1); } delay(1000); }светодиод во время трека горит/гаснет? Если да, то можно сигнал с 15 вывода считывать - это и будет индикатор воспроизведения - как погас - значит сразу делаем stopVoice.
По второй хотелке аналогично - stopVoice если превышен заданный порог.
к сожалению светодиод никак не реагирует на треки(
Разобрался. Реально чото запупил)
Ввел переменную х и состояние сохранял в нее
#include <Wtv020sd16p.h> int resetPin = 3; // The pin number of the reset pin. int clockPin = 4; // The pin number of the clock pin. int dataPin = 5; // The pin number of the data pin. int busyPin = 6; // The pin number of the busy pin. int photocellPin = A1; // сенсор и понижающий резистор на 10 кОм подключены к a0 int photocellReading; // данные считываемые с аналогового пина int x = 0; Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Initializes the module. wtv020sd16p.reset(); } void loop() { photocellReading = analogRead(photocellPin); Serial.print("Analog reading = "); Serial.print(photocellReading); // аналоговые значения if (photocellReading < 800) { Serial.println(" - Bright"); Serial.println(x); wtv020sd16p.stopVoice(); x = 0; } else { if ( x == 0) { Serial.println(" - Very bright"); Serial.println(x); wtv020sd16p.asyncPlayVoice(2); x = 1; } else { Serial.println(" - Very busy"); Serial.println(x); } } delay(1000); }Что за чудо SD карта если не секрет, что прочиталась этой тварью? :)
У меня их было сцуко 5 (пять, Карл!), и ни одна не алё. Флешки к ним с того же магазина 128 М, специально под них. Питание 3.3. Сигналы 3.3. И всё им побоку, что с кнопок, что по его подобию Serial. Пришлось уходить в самопальные проекты вроде TMRh20PCM.
ну я его запустил с третьего подхода, но честно говоря ардуина китайская вся так пускается)))
у меня 2 Gb Silicon Power - достал из старого филипса)
больше такую лажу не куплю)
Господа, приветствую!
Есть крайне неприятная неприятность, в моем случае все воспроизводится, звук шикарный , всё супер-кроме одного!!
Задача проста как апельсин-нажали кнопку-один трек, отпустили-переключился на другой, но не сразу , а доигрывает, asyncPlayVoice(2) работать категорически отказывается, stopVoice() туда же-никак не реагирует(
работает только playVoice( игрался целый вечер с delay-результата нуль
может кто сталкивался, помогите советом(