Воспроизведение сэмпла при нажатии кнопки

mobi3
Offline
Зарегистрирован: 02.07.2015

Друзья, подскажите пожалуйста. 

Несколько дней назада впервые столкнулся с Ардуино, так как возникла задача реализации данной схемы:

Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут, не принципиально будет ли это mp3 или wav или другой аудиоформат. По большому счету, функционал можно сравнить с дверным звонком. Важно, чтобы во время воспроизведения кнопка была не активна, т.е. аудиофайл должен доиграть до конца (наверное это не сложно реализовать в скетче). 

Очень буду признателен за любую помощь и подсказку (с чего начать), посоветуйте как целесообразней всего реализовать данное решение. 

Большое спасибо за внимание!

Araris
Offline
Зарегистрирован: 09.11.2012

Подсказываю: погуглите "arduino wtv020-sd-16p"

Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Подсказываю: погуглите "arduino wtv020-sd-16p"

Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.

Спасибо, читаю материал по данному модулю.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Я вчера такой получил ($2.64 обошелся), уже с ним разобрался, так что скетчем смогу помочь.

Нашел вариант где данный модуль используется без Ардуино. В моем случае это плюс, так как удешевляет всю схему. Подскажите пожалуйста, можно ли как-то без Ардуино сделать так, чтобы кнопка плей повторно не воспроизводила трек (проверить возможности нет, на всех видео показывают только переключение треков), может быть она и так не запускает трек повторно.

Araris
Offline
Зарегистрирован: 09.11.2012

Я с Ардуино использую, вряд ли подскажу. А разве в начале темы речь шла о нескольких аудиозаписях ?

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Я с Ардуино использую, вряд ли подскажу. А разве в начале темы речь шла о нескольких аудиозаписях ?

Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца. 

С Арудино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца. 

Araris
Offline
Зарегистрирован: 09.11.2012

mobi3 пишет:

Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца. 

С Ардуино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца. 

Да, конечно, можно. Примерно так:

If button_pressed

 {
 sendCommand(track_number); // play
 delay(50);
 while (digitalRead(WTV020_BUSY))  {   } // wait while...
 sendCommand(STOP); 
 }
 
С Ардуино много всего можно сделать )).
mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

mobi3 пишет:

Аудиозапись одна. Имеется ввиду, что бы при нажатии не срабатывала пауза и трек воспроиводился до конца. 

С Ардуино так можно сделать? Чтобы кнопка плей была неактивна, нажавший кнопку должен дослушать аудиозапись до конца. 

Да, конечно, можно. Примерно так:

If button_pressed

 {
 sendCommand(track_number); // play
 delay(50);
 while (digitalRead(WTV020_BUSY))  {   } // wait while...
 sendCommand(STOP); 
 }
 
С Ардуино много всего можно сделать )).

Пожалуйста, скажите, что нужно еще заказать, кроме самого модуля. И какую модификацию Ардуино?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
Araris
Offline
Зарегистрирован: 09.11.2012

mobi3 пишет:

Пожалуйста, скажите, что нужно еще заказать, кроме самого модуля. И какую модификацию Ардуино?

Задача, конечно, не для Ардуино, слишком просто все. Впрочем, дело хозяйское.

1. Ардуино. Возьмите Nano, меньше двух долларов на Алиэкспрессе. По USB подключите к компьютеру, в качестве блока питания можно пятивольтовое зарядное использовать.

2. wtv020-sd-16p. Запитать можно будет от пина 3V3 на Nano.

3. MicroSD карточка для wtv020-sd-16p. 1-2Гб, подробности погуглите, там есть элемент лотереи.

4. Динамик. Погуглите, с какими динамиками работает wtv020-sd-16p.

5. Кнопка.

6. Блок питания.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Araris, вот запитывать от 3.3в нано пожалуй не стоит, там 50ма макс. ток, а модуль с картой и динамиком кушает существенно поболее.

Araris
Offline
Зарегистрирован: 09.11.2012

dimax пишет:

Araris, вот запитывать от 3.3в нано пожалуй не стоит, там 50ма макс. ток, а модуль с картой и динамиком кушает существенно поболее.

Возможно и не стоит, я запитывал от Uno, там тоже указан максимальный ток 50 mA, работает без проблем. Самый длинный трек порядка 15-ти секунд.

UPD: да, пожалуй Вы правы, В нескольких местах нашел что-то типа "You need a source that can give 100mA while it talks without dropping out." Тем не менее, у меня от Uno - работает.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris, здравствуйте! Пожалуйста, помогите со схемой подключения. У меня есть Arduino Nano V3.0 AVR ATmega328 P-20AU, макетная плата + питание для макетной платы 5в/3.3в, блок питания на 5в, звуковой модуль WTV020-SD-16P + карточка на 256 мб. Я посмотрел несколько видео, в некоторых случаях используют резисторы и 4 кнопки (я так понимаю, для разных функций:play, next, prev, volume+\-). В общем, везде схемы разные, мне же нужен самый просто вариант, как Вы уже поняли, нажал кнопку - играет одна единственная запись на карте до конца. Кнопку я не смог купить, как ни странно не было в наличии, может быть дома, что-то разберу, но мне кажется, что можно сымитировать ее нажатие, замкнув контакт, не так ли? 

Это моя первая работа, если с кодом (С++) я знаком и скетчи мне понятны, то с железом вообще не приходилось работать, хоть и имею какое-то представление о его устройстве. Очень буду Вам признателен за помощь, извините, если где-то задаю глупые вопросы.

 

 

mobi3
Offline
Зарегистрирован: 02.07.2015

Попытался переделать схему для Arduino Uno под свою Nano по аналогии:

Исходник схемы https://www.sendspace.com/file/m8b5ak  для http://fritzing.org/home/

Я так понимаю, что эти кнопки не нужны, так же как и диод с резистором...

Araris
Offline
Зарегистрирован: 09.11.2012

mobi3 пишет:

Пожалуйста, помогите со схемой подключения.

1. Без проблем. Дойду до работы - все сюда выложу.

2. Карточка на 256 мб говорите ? Не факт, что подойдет. В Интернетах пишут, что карточки лучше на 1, или 2 Гб пользовать.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

mobi3 пишет:

Пожалуйста, помогите со схемой подключения.

1. Без проблем. Дойду до работы - все сюда выложу.

2. Карточка на 256 мб говорите ? Не факт, что подойдет. В Интернетах пишут, что карточки лучше на 1, или 2 Гб пользовать.

Спасибо большое! 256 есть под рукой, но я однозначно буду искать еще 1-2гб.

Araris
Offline
Зарегистрирован: 09.11.2012

Итак, выкладываю.

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), ее вполне достаточно.


#define WTV020_RESET       6 // digital pin connected to wtv020-sd-16p
#define WTV020_CLOCK       7 // digital pin connected to wtv020-sd-16p
#define WTV020_DATA        8 // digital pin connected to wtv020-sd-16p
#define WTV020_BUSY        9 // digital pin connected to wtv020-sd-16p

const unsigned int VOLUME_MAX = 0xFFF7;
const unsigned int STOP = 0xFFFF;

void setup()
{
pinMode(WTV020_CLOCK, OUTPUT);
pinMode(WTV020_DATA, OUTPUT);
pinMode(WTV020_RESET, OUTPUT);
pinMode(WTV020_BUSY, INPUT);
digitalWrite(WTV020_CLOCK, HIGH);
digitalWrite(WTV020_DATA, LOW);
// reset the module
digitalWrite(WTV020_RESET, HIGH);
delay(100);
digitalWrite(WTV020_RESET, LOW);
delay(10);
digitalWrite(WTV020_RESET, HIGH);
delay(100);
sendCommand(VOLUME_MAX);
delay(1000);
// play file 0000.ad4
sendCommand(0);                      // номер трека
delay(500);                          // пусть начнет играть
while (digitalRead(WTV020_BUSY)) { } // ждем пока проиграет
sendCommand(STOP);                   // на всякий случай
}

void loop()
{
}

void sendCommand(unsigned int command) 
{
// start bit
digitalWrite(WTV020_CLOCK, LOW);
delay(2);
// bit15, bit14, ... bit0
for (unsigned int mask = 0x8000; mask > 0; mask >>= 1) 
 {
 if (command & mask) { digitalWrite(WTV020_DATA, HIGH); } else { digitalWrite(WTV020_DATA, LOW);  }
 // clock low
 digitalWrite(WTV020_CLOCK, LOW);
 delayMicroseconds(200);
 // clock high
 digitalWrite(WTV020_CLOCK, HIGH);
 delayMicroseconds(200);
 }
// stop bit
delay(2);
}
Araris
Offline
Зарегистрирован: 09.11.2012

УПС ! Ошибка на первом рисунке. Там нумерация должна быть такая :

1                    16

2                    15

3                    14

4                    13

5                    12

6                    11

7                    10

8                      9

 

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

УПС ! Ошибка на первом рисунке. Там нумерация должна быть такая :

1                    16

2                    15

3                    14

4                    13

5                    12

6                    11

7                    10

8                      9

 

Добрый день, спасибо Вам большое! К сожалению не смог ответить раньше. Я слегка запутался, вот сижу сейчас с макетной платой и пытаюсь все это соеденить. Не могу понять с землей на первом рисунке и на схеме второго рисунка. Если Вам не будет сложно, могли бы нарисовать схему под arduino nano. Я буду пробовать конечно осилисть самостоятельно, но было занчителньо легче для первого раза иметь схему под мою плату.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris

Вроде разобрался по первому рисунку, пробую собрать. Вы бы не могли поделиться сктетчем? 

Подскажите пожалуйста, для проверки, можно ли использовать динамик, от наушников? 

Araris
Offline
Зарегистрирован: 09.11.2012

Вторая картинка тут вообще необязательна, поскольку на первой картинке красным подписано, с каким пином Ардуино что соединять. Схема под Нано ничем принципиально не будет отличаться от схемы под Уно. Шесть проводов на Ардуино, два на динамик - это и схемой-то назвать стыдно. Разберитесь не торопясь, все получится. ))

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Вторая картинка тут вообще необязательна, поскольку на первой картинке красным подписано, с каким пином Ардуино что соединять. Схема под Нано ничем принципиально не будет отличаться от схемы под Уно. Шесть проводов на Ардуино, два на динамик - это и схемой-то назвать стыдно. Разберитесь не торопясь, все получится. ))

Разобрался, подключил все как у Вас на картинке. Не могу сообразить как мне в этой схеме впихнуть кнопку, чтобы по ее нажатию воспроизводился сэмпл. Хотел выложить фото моей конструкции, но к сожалению не загружаются картинки, какой-то баг. Как-то у меня за неделю, что этим не занимался все смешалось в голове.

upd: так и не осилил, жду Вас как манны небесной) не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.

mobi3
Offline
Зарегистрирован: 02.07.2015
Araris
Offline
Зарегистрирован: 09.11.2012

mobi3 пишет:

не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.

Вот здесь 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); }

 

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

mobi3 пишет:

не могу понять логику работы, как кнопкой заставить работать модуль. В теории я вижу себе это так: присваиваем какому-то пину кнопку, ловим ее нажатие и посылаем сигнал модулю для воспроизведения. Но как это физически сделать я не могу понять(.

Вот здесь 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. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы. 

Araris
Offline
Зарегистрирован: 09.11.2012

mobi3 пишет:

Подскажите пожалуйста, если у меня нет резистора, можно как-то подключить кнопку без него? Кнопку подключать к 3.3в тоже вместе с wtv020. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы. 

Если нет резистора, то гуглите фразу "arduino внутренний подтягивающий резистор".

Кнопку лучше подключать к 5В, к wtv020 она никакого отношения не имеет и никак с ним не связана (кроме как логикой программы, естественно).

Я не считаю вопросы глупыми, поэтому готовых ответов не даю сознательно, разбирайтесь самостоятельно, с готовых ответов толку не бывает.

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

mobi3 пишет:

Подскажите пожалуйста, если у меня нет резистора, можно как-то подключить кнопку без него? Кнопку подключать к 3.3в тоже вместе с wtv020. Я еще раз прощу прощения за глупые вопросы, но мне действительно не понятны некоторые азы. 

Если нет резистора, то гуглите фразу "arduino внутренний подтягивающий резистор".

Кнопку лучше подключать к 5В, к wtv020 она никакого отношения не имеет и никак с ним не связана (кроме как логикой программы, естественно).

Я не считаю вопросы глупыми, поэтому готовых ответов не даю сознательно, разбирайтесь самостоятельно, с готовых ответов толку не бывает.

Спасибо, прочитал две статьи, мне чуть тяжело въехать. Этот резистор подтягивается автоматически? 

Цитата:

Также возможна ситуация, когда функцией pinMode вывод сконфигурирован как вход (INPUT), после чего функцией digitalWrite на него подается высокий уровень HIGH. В этом случае к выводу будут подключены внутренние подтягивающие резисторы номиналом 20 кОм, что приведет к возникновению на нем высокого уровня HIGH. При считывании значение HIGH будет удерживаться до тех пор, пока внешними цепями на выводе не будет сформирован низкий уровень LOW. Именно так работает режим INPUT_PULLUP.

Абсолютно с Вами согласен на счет толка, от материала освоенного самостоятельно, он запоминается навсегда, но мне нужно завтра запустить эту схему, потому, от подсказок я не могу отказаться. Кроме Вас спросить не у кого. Подскажите, почему чаще всего в примерах идет 13 пин? Если подключить без резистора чем это чревато? 

Взгляните пожалуйста на схему, я правильно ее изобразил? Будем смотреть по 13 пину в каком он состоянии LOW или High и соответственно запускать сэмпл, если я правильно понял. 

mobi3
Offline
Зарегистрирован: 02.07.2015

Очень не хочется завтра искать резистор на 10 кОм, буду Вам крайне признателен если Вы покажите как в скетче реализовать внутренний подтягивающий резистор.

Вот, что нашел на форуме

pinMode(pin, INPUT); // настраиваем пин на вход

digitalWrite(pin, HIGH); //включаем подтягивающий резистор на 20К

 

Гриша
Offline
Зарегистрирован: 27.04.2014

mobi3 пишет:

Очень не хочется завтра искать резистор на 10 кОм,

на самом деле можно и не точно, полагаю хватит "попробовать" с любым в диапазоне 5к - 100к

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Давайте теперь я взорву вам вам мозг :)

ардуино и сама прекрасно играет вавки, без всяких плееров

и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)

будем продавать музыку в залоченных контроллерах, дабы пираты не спёрли ноты.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Клапауций 999 пишет:

будем продавать музыку в залоченных контроллерах, дабы пираты не спёрли ноты.

а ты будешь петь или играть?

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

а ты будешь петь или играть?

я буду продавать.

Araris
Offline
Зарегистрирован: 09.11.2012

Puhlyaviy пишет:

Давайте теперь я взорву вам вам мозг :)

ардуино и сама прекрасно играет вавки, без всяких плееров

и при условии что мелождия будет короткая ее можно прям во флеш и прошить вместе с програмулиной :)

Да, Вы взорвали нам нам мозг, однако в топикстарте задача была сформулирована как "Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут". Возможно ли прошить один минут аудиозаписи в память Нано, сомневаюсь.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Araris пишет:

Да, Вы взорвали нам нам мозг, однако в топикстарте задача была сформулирована как "Нажатие кнопки --> воспроизведение аудиозаписи длинной 1 минут". Возможно ли прошить один минут аудиозаписи в память Нано, сомневаюсь.

ну для воспроизведения точно не нужно ничего более чем СД, динамик, транзистор и несколько сопротивлений

к тому же ничего не говорилось о качестве вавки...в смысле понижая битрейт можно затолкать все что угодно.

Araris
Offline
Зарегистрирован: 09.11.2012

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); }

}

Araris
Offline
Зарегистрирован: 09.11.2012

Puhlyaviy пишет:

ну для воспроизведения точно не нужно ничего более чем СД, динамик, транзистор и несколько сопротивлений

к тому же ничего не говорилось о качестве вавки...

Согласен, но гуманно ли предлагать этот вариант человеку, испытывающему затруднения с подключением кнопки ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

в общем даже вот с кнопочками есть :) и прям на нано

http://www.instructables.com/id/Playing-Wave-file-using-arduino/

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Araris пишет:

Согласен, но гуманно ли предлагать этот вариант человеку, испытывающему затруднения с подключением кнопки ?

конечно, там же вон все разрисовано даже и скеч и даже 4 кнопки а не  одна :)

и даже как вавки на карточку записать :)

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

понижая битрейт можно затолкать все что угодно.

я же говорю - нужно однобитную музыку продавать 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Клапауций 999 пишет:

я же говорю - нужно однобитную музыку продавать 

вот это хорошая идея. по чем бит?

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

вот это хорошая идея. по чем бит?

то, что на фотке по 30 с чемто денег впаривают творцы.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Клапауций 999 пишет:

то, что на фотке по 30 с чемто денег впаривают творцы.

будем демпинговать? аль наоборот цену загнем, типа эксклюзив, всего пару килобайт продаем...

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

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); }

}

Добрый день, пробую запустить, я так опнимаю, что это не весь скетч? Может нужно какую-то библиотеку подключить? 

Arduino: 1.6.5 (Windows 7), Board: "Arduino Nano"
 
Build options changed, rebuilding all
 
Mp3Player.ino: In function 'void loop()':
Mp3Player:19: error: 'sendCommand' was not declared in this scope
Mp3Player:19: error: 'WTV020_BUSY' was not declared in this scope
Mp3Player:19: error: 'STOP' was not declared in this scope
'sendCommand' was not declared in this scope
 
 
Araris
Offline
Зарегистрирован: 09.11.2012

Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.

mobi3
Offline
Зарегистрирован: 02.07.2015

Друзья, помогите пожалуйста со скетчем. У меня вышло как-то так, но не работает в чем я не удивлен.

Моя последня схема:

#include <Wtv020sd16p.h>
#define BUTTON_PIN 10


int resetPin = 6;  // The pin number of the reset pin.

int clockPin = 7;  // The pin number of the clock pin.

int dataPin = 8;  // The pin number of the data pin.

int busyPin = 9;  // The pin number of the busy pin.

Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

void setup()
//Initializes the module.
{
wtv020sd16p.reset();



pinMode(BUTTON_PIN, INPUT); // настраиваем пин на вход

digitalWrite(BUTTON_PIN, HIGH); //включаем подтягивающий резистор на 20К

}


void loop()
{
wtv020sd16p.sendCommand(0xFFF3);


if ( digitalRead(BUTTON_PIN) ) 

{ 
  wtv020sd16p.sendCommand(0); delay(500); while (digitalRead(busyPin)) {} wtv020sd16p.sendCommand(0xFFFF); }

}

 

 
 
mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.

Сейчас попробую, сделать. Посмотрите пожалуйста, что у меня вышло в последнем сообщении. Хотя бы по схеме, там все правильно?

mobi3
Offline
Зарегистрирован: 02.07.2015

Araris пишет:

Нет, это не весь скетч, это дополнение к тому скетчу, который я приводил выше. Возьмите первый скетч, добавьте строки из второго скетча в соответствующие разделы ( начало, setup(), loop() ) первого. Удалите строки 26-30 из первого, там они уже не нужны.

Просмотрел тему, Вы показывали некоторые части скетча, но в целом его не выкладывали. Несколько раз просмотрел. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

mobi3, вставляйте пожалуйста код в сообщение по правилам , принятым на форуме: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii  Рисунок тоже нужно уменьшать при вставке, там есть опция ввести другой размер изображения.

mobi3
Offline
Зарегистрирован: 02.07.2015

dimax пишет:

mobi3, вставляйте пожалуйста код в сообщение по правилам , принятым на форуме: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii  Рисунок тоже нужно уменьшать при вставке, там есть опция ввести другой размер изображения.

Извините пожалуйста, исправился. Так подойдет? 

Araris
Offline
Зарегистрирован: 09.11.2012

Пробуйте:

#define WTV020_RESET       6
#define WTV020_CLOCK       7
#define WTV020_DATA        8
#define WTV020_BUSY        9
#define BUTTON_PIN        10

const unsigned int VOLUME_MAX = 0xFFF7;
const unsigned int STOP = 0xFFFF;

void setup()
{
pinMode(WTV020_CLOCK, OUTPUT);
pinMode(WTV020_DATA, OUTPUT);
pinMode(WTV020_RESET, OUTPUT);
pinMode(WTV020_BUSY, INPUT);
pinMode(BUTTON_PIN, INPUT);
digitalWrite(BUTTON_PIN, HIGH);
digitalWrite(WTV020_CLOCK, HIGH);
digitalWrite(WTV020_DATA, LOW);
// reset the module
digitalWrite(WTV020_RESET, HIGH);
delay(100);
digitalWrite(WTV020_RESET, LOW);
delay(10);
digitalWrite(WTV020_RESET, HIGH);
delay(100);
sendCommand(VOLUME_MAX);
delay(1000);
}

void loop()
{
if ( digitalRead(BUTTON_PIN) ) 
 { 
 sendCommand(0);
 delay(500);
 while ( digitalRead(WTV020_BUSY) ) 
  {}
 sendCommand(STOP);
 }
}

void sendCommand(unsigned int command) 
{
// start bit
digitalWrite(WTV020_CLOCK, LOW);
delay(2);
// bit15, bit14, ... bit0
for (unsigned int mask = 0x8000; mask > 0; mask >>= 1) 
 {
 if (command & mask) { digitalWrite(WTV020_DATA, HIGH); } else { digitalWrite(WTV020_DATA, LOW);  }
 // clock low
 digitalWrite(WTV020_CLOCK, LOW);
 delayMicroseconds(200);
 // clock high
 digitalWrite(WTV020_CLOCK, HIGH);
 delayMicroseconds(200);
 }
// stop bit
delay(2);
}