Помогите с кодом для Music Shield - за вознаграждение!

Тема в разделе "Закажу проект", создана пользователем Da2143, 19 янв 2015.

  1. Da2143

    Da2143 Нуб

    Здравствуйте!

    Имеется: 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 раз и молчит то совсем молчит и попукивает ((

    Поэтому помогите дорогие , кому легко может это! переведу деньги на карту или на телефон, или в центре города Москва. Спасибо!! Жду предложений гонорара )
     
  2. 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(); Работает только тогда когда плеер что-то воспроизводит...

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