Здравствуйте! Имеется: Mega; music shield 2.0; кнопка (зажата = 0), 2шт на цифровходах 4/5; резистор давления+резистор на 1 КОм, на аналогвходе 1 (порт выдает без нажатия 1023 требуемое усилие выдает около 650). Задача:Сначала ждем комманду от другой Ардуины (на любой порт) если она пришла (какая надо скажите) то мониторим резистор давления. Если резистор "нажат" (>650), то: { на цифровыход(10)HIGH,delay(50),на цифровыход(10)LOW, на цифровыход(11)HIGH, запустить играть покругу муз.файл "№1", подождать N секунд, на цифровыход(11)LOW,подать на цифровыход(12)high,запустить играть покругу муз.файл "№2"} Если в то время когда {играет файл2 и выход12=High} (да и в любое время), будет нажата кнопка(4), то выключить все это: {12=Low+музыка молчит и начать все с начала: void(* resetFunc) (void) = 0; // Reset MC function}. А если в любое время (! даже без сигнала от другой ардуины) нажата кнопка(5), то сделать все тоже самое что и при нажатии на резистор давления. Сам вроде все могу, но что-то оч тяжело идет дело с <MusicPlayer.h>, руки опуслилсь. То проигрывает 1 раз и молчит то совсем молчит и попукивает (( Поэтому помогите дорогие , кому легко может это! переведу деньги на карту или на телефон, или в центре города Москва. Спасибо!! Жду предложений гонорара )
Music Shield занимает на Arduino пины MOSI, MISO, CLK (11, 12, 13 на Arduino Uno) плюс 10-й пин, который выполняет роль чип-селектора (CS). Другие платы расширения, работающие через SPI могут работать совместно с Music Shield за исключением случаев, когда они также используют 10-й пин в качестве чип-селектора. К счастью, реализованный в библиотеке класс MusicPlayer позволяет легко отключать логику встроенного управления воспроизведением, что позволяет высвободить цифровые входы с третьего по седьмой, которые в штатном режиме заняты кнопками на Music Shield. Из аналоговых входов нам остаются четвёртый и пятый. В пятницу игрался с Music shield, для начала нужно отключить кнопки управления и прописать функции для пинов: Код (Text): //Пин сенсора const int Sensor1=3; boolean ButtonChange = 0; MusicPlayer myplayer; void setup() { Serial.begin(9600); myplayer.begin(); //Стартуем плеер myplayer.keyDisable(); //Отключаем кнопки myplayer.digitalControlEnable(); //включаем прослушку цифровых входов myplayer.attachDigitOperation(3,playPause,HIGH); //Слушаем 3 пин myplayer.creatPlaylist(); //Создаем плейлист myplayer.setVolume(0); //Ставим максимальную громкость } На 3 пин я подсоединил емкостный датчик, при прикосновении к нему я запускаю плейлист. Так как на карте он у меня один я не использую функцию myplayer.playSong("test.wav"); При втором прикосновении плеер у меня останавливается. Код (Text): void loop() { if (digitalRead(Sensor1)==HIGH) { myplayer.playList(); } //Если плеер закончил играть, то меняем значение сенсора if (playingState==2){ ButtonChange=0; } } void playPause() { if (ButtonChange) { myplayer.opStop(); } else { myplayer.opPlay(); } ButtonChange=!ButtonChange; delay(100); } В библиотеке есть глобальная переменная playingState. Показывает в каком состоянии плеер.... Функция myplayer.attachDigitOperation(); Работает только тогда когда плеер что-то воспроизводит... Попробуй поиграться с моим кодом, я свою задачу выполнил...