Требуется помощ по библиотеке TMRpcm
- Войдите на сайт для отправки комментариев
Втр, 25/03/2014 - 22:15
Добрый день! Использую библиотеку TMRpcm.h для воспроизведения звуковых файлов с карты. Все работает хорошо. Файлы воспроизводятся и все норм. Вопрос собственно, вот в чем. Мне нужно сделать так чтобы при нажатии на кнопку воспроизводился звуковой файл, а происходит следующее. Я нажимаю на кнопку и файл воспроизводится несколько раз, то 3 то 4 то 5. Короче непонятно почему так происходит и как это исправить. Надеюсь я все более менее понятно описал. Заранее спасибо за помощ!!
#include <SD.h> #define SD_ChipSelectPin 4 #include <TMRpcm.h> TMRpcm tmrpcm; int val = 0; void setup(){ pinMode(A0, INPUT); tmrpcm.speakerPin = 9; if (!SD.begin(SD_ChipSelectPin)) { return; } tmrpcm.volume(1); } void loop() { val=digitalRead(A0); if(val==HIGH) { if(tmrpcm.isPlaying()==0) tmrpcm.play("6.wav"); } }
Hobigo, помню уже давал вам совет как запустить этот скетч :)
По сути нового вопроса: -тут по идее не должен влиять дребезг, так что остаётся подключение кнопки к плате. Если вы подаёте на вход HIGH, значит этот вход дополнительно нужно притянуть через внешний резистор к LOW. Можно обойтись без резистора поменяв логику. Подключите кнопку между выводом A0 и общим, но в сетапе поменяйте строчку инициализации на: pinMode (A0, INPUT_PULLUP); Соответственно и в условии поменять if (val==LOW)
Попробовал програмный путь решения проблеммы. Так ничего вообще не работает
Попробовал поставить резистор и все заработало! Спасибо вам большое!
Здравствуйте,помогите пожалуйста с кодом. Нужен такой алгоритм работы : при удержании кнопки 2 -играет мелодия 2 однократно. при удержании кнопки 3 играет мелодия 3 циклично.A у меня работает так :нажал-отпустил кнопку проиграл файл 2,вторая кнопка аналогично.
код:
01
#include <SD.h>
02
#define SD_ChipSelectPin 10
03
#include <TMRpcm.h>
04
05
TMRpcm tmrpcm;
06
07
void
setup
()
08
{
09
pinMode(2,INPUT);
10
pinMode(3,INPUT);
11
tmrpcm.speakerPin = 9;
12
if
(!SD.begin(SD_ChipSelectPin))
13
{
14
return
;
15
}
16
tmrpcm.volume(1);
17
tmrpcm.play(
"start.wav"
);
18
19
}
20
21
22
void
loop
()
23
{
24
if
(digitalRead(2) == LOW)
25
tmrpcm.play(
"2.wav"
);
26
if
(digitalRead(3) == LOW)
27
tmrpcm.play(
"3.wav"
);
28
29
}
вместо 26 и 27 строки: while (digitalRead(3)==LOW) {tmrpcm.play("3.wav");}
Хотя может тоже не помочь, в той библе была какая-то особенность..а какая я уже забыл)
Вот эта особенность: http://arduino.ru/forum/apparatnye-voprosy/pomoshch-po-vosproizvedeniyu-wav-c-sd-karty#comment-60118
Нужно сначала проверить не воспроизводится ли что...
Вобщем 26 строка должна быть как-то так: if (digitalRead(3) == LOW && tmrpcm.isPlaying()==0)
Большое вам спасибо!!!Мелодия воспроизводится циклично без проблем. А как сделать чтобы нажал и держишь кнопку 2 ,файл 2 проиграл один раз? Кстати на счёт библиотеки не было никаких проблем,собрал схему,прошил и сразу всё заработало.Единсвенный косяк в конце воспроизведения файла слышен мерзский скрип,но для моего устройства это не критично.
kolyanych26, что б один раз.. тут могут быть варианты. Например можно проиграть, и сразу застопорить loop, ждать пока кнопку отпустят..
Спасибо за помощь,всё работает.
Помогите установить данную библиотеку , скачал там же https://github.com/TMRh20/TMRpcm/wiki почитал как влить в IDE . создалась папка в \Documents\Arduino\libraries\TMRpcm-master в ней вот это
туда сюда перекидывал эти файлы между этими папками для проверки ваш первый скейч проверяю , вылазят ошибки
примеры из этой библиотеки тоже выдают ошибки , 2 часа колдую с наладкой
Нужна не вся папка TMRpcm-master, а только папка TMRpcm, которая внутри неё. То есть, должно быть так: \Documents\Arduino\libraries\TMRpcm
Спасибо саработала, но странность есть что в версии 1,06 работает а в 1,6,3 немного ошибок есть нет там какого то файла , ругается в общем, папки у обоих версий для библиотек те же
D:\Insta\arduino-1.6.3\libraries\SD\src\utility перекинул вот этот Sd2Card.cpp фаил из 1,0,6 версии и ошибка исчезла , надеюсь я не нарушил работу 1,6,3 версии тем самым , теперь можно собрать схему и проверить
как отсюда сообщение удалить ,а то немного затупил
подкажите , а у вас тоже воспроизводит нормально на частоте только 22050 , моно, 8 бит, остальные частоты коряво звучат, но на частоте 22050 , присутствуют щелчки , заметил эти щелчки (помехи) тикают только на ниских басах мелодий , пробывал фильтры из кондёров потом к уселку подключаль пин колонки всё равно тикает , вы решили эту проблему если она есть у вас ? или это такая корявая библиотека ?
в общем тикает у меня приналичии звука в файле, пробывал уменьшить программно фаил с мелодией до 0 громкости и воспроизвести 0 этого треска нет , воспроизводилась тишина так как громкость в самом аудиофайле 0 была записана, но поднял даже на 20 -30 % громкость и записал на карту треск сразу появился , в чём это может быть проблема
приношу свои звининения не внимательно читал мануа по библиотеке
1- Format SD card and make sure the setting as attached picture.
2- Convert your music to .WAV files and make sure the below:
-Samples Per second(Hz):16000 и НИЖЕ - выше уже трещит в динамике
-Channel :Mono
- Bits Per Sample: 8
запутался в коде , необходимо поочерёдно воспроизводить мелодии по 1 разу после каждого нажатия кнопки 1 раз, а выходит что как буд то в хаотичном порядек они звучать инога даже одна и таже несколько раз при нажатии кнопки
CMEXIRK, да, это нормально, потому что нажав кнопку программа может успеть прокрутится десяток раз. Что бы этого избежать можно применить дополнительные ухищрения. Как-то так:
Если вы нажали на кнопку -ставится флажок работы, он не даёт запустится повторно пока не проверятся условия что: ничего уже не играет и кнопка была отпущена.
Спасибо проверю вашу логику, соорудил из примеров в теме с кнопкой вот как то так , проверил работает
Подскажите,что не так-хочу ,чтоб по приходу символа проигрывался трек с флешки позаимствовал код,с флешки вавки играют,а вот при отсылке символа через терминал ARDUINO IDE тишина
А с вами можно пообщаться насчет библтотеки TMRpcm ??? Я ни как не могу запустить воспроизведение . Ни кто толком ничего не говорит, а у вас это уже пройденный этап. Мне нужна не большая помощь. Вот моя личка :topoludoma@rambler.ru.
Здраствуйте , подскажите пожалуста , что надо изменить в скейче чтобы проигрывалось один раз при нажатой кнопки .
Перед посдедней скобочкой } написать
cli(); while(true);
И се.
Перед посдедней скобочкой } написать
cli(); while(true);
И се.
От жеж экстремист :)
Мне особенно cli понравилось, шедеврально ! Дайте две !
Ачонетак? Можно и abort() написать, там то же самое, да православные против.
Когда ТС научится ПРАВИЛЬНО формулировать мысли и вставлять код, мошт и без cli() абойдемса.
Пробывал вставить перед последней скобкой cli(); while(true); , не одна кнопка не играет ,в чем может причина . Подскажите пожалуста
A до этого играла?
значит сначала
else return; а потом
cli(); while(true);
Играло , чето не помогает , пишит ошибка.
почему не воспроизводит одновременно 2 wav файла? Arduino uno
при запуске 22.wav воспроизведение 1.wav прекращается...
настройки в pcmConfig.h:
?
Заранее спасибо!
Потому что внутри play() для single track mode сидит stopPlayback()