Звук на кнопки для викторин

Доброе время суток.

Ребята помогите сделать звук при нажатии на кнопки,что б на каждой кнопке играла своя музыка. Модуль mp3 купил (DFPlayer), но вот как подключить и как написать скетч не шарю.

Схему подключения и скетч брал из интернета, все собрал, скетч загрузил и все работает, но детям еще звук захотелось. Прошерстил весь интернет схему подключения нашел, но как привязать на кнопки не нашел
Вот изначальная схема кнопок, как сюда подключить mp3 модуль и привязать на кнопки, помогите кто понимает.

Вот сам скетч
bool _gtv1;

bool _gtv2;

bool _gtv3;

bool _gtv4;

bool _bounseInputD11S = 0;

bool _bounseInputD11O = 0;

unsigned long _bounseInputD11P = 0UL;

bool _bounseInputD12S = 0;

bool _bounseInputD12O = 0;

unsigned long _bounseInputD12P = 0UL;

bool _tim1I = 0;

bool _tim1O = 0;

unsigned long _tim1P = 0UL;

bool _tim2I = 0;

bool _tim2O = 0;

unsigned long _tim2P = 0UL;

bool _trgs1 = 0;

bool _trgs2 = 0;

void setup()

{

pinMode(12, INPUT_PULLUP);

pinMode(11, INPUT_PULLUP);

pinMode(10, OUTPUT);

digitalWrite(10, 0);

pinMode(9, OUTPUT);

digitalWrite(9, 0);

_bounseInputD11O = digitalRead(11);

_bounseInputD12O = digitalRead(12);

}

void loop()

{

bool _bounceInputTmpD11 = (digitalRead (11));

if (_bounseInputD11S)

{

if (millis() >= (_bounseInputD11P + 40))

{

_bounseInputD11O= _bounceInputTmpD11;

_bounseInputD11S=0;

}

}

else

{

if (_bounceInputTmpD11 != _bounseInputD11O)

{

_bounseInputD11S=1;

_bounseInputD11P = millis();

}

}

bool _bounceInputTmpD12 = (digitalRead (12));

if (_bounseInputD12S)

{

if (millis() >= (_bounseInputD12P + 40))

{

_bounseInputD12O= _bounceInputTmpD12;

_bounseInputD12S=0;

}

}

else

{

if (_bounceInputTmpD12 != _bounseInputD12O)

{

_bounseInputD12S=1;

_bounseInputD12P = millis();

}

}

//Плата:1

if (_gtv3)

{

if (_tim1I)

{

if (_isTimer(_tim1P, 5000))

{

_tim1O = 1;

}

}

else

{

_tim1I =1;

_tim1P = millis();

}

}

else

{

_tim1O = 0;

_tim1I = 0;

}

if(!(_gtv1)) _trgs1 = 1;

if(((_gtv4) || (_tim1O))) _trgs1 = 0;

_gtv3 = _trgs1;

digitalWrite(9, !(_gtv3));

_gtv1 = _bounseInputD11O;

digitalWrite(10, !(_gtv4));

_gtv2 = _bounseInputD12O;

if (_gtv4)

{

if (_tim2I)

{

if (_isTimer(_tim2P, 5000))

{

_tim2O = 1;

}

}

else

{

_tim2I =1;

_tim2P = millis();

}

}

else

{

_tim2O = 0;

_tim2I = 0;

}

if(!(_gtv2)) _trgs2 = 1;

if(((_gtv3) || (_tim2O))) _trgs2 = 0;

_gtv4 = _trgs2;

}

bool _isTimer(unsigned long startTime, unsigned long period)

{

unsigned long currentTime;

currentTime = millis();

if (currentTime>= startTime)

{

return (currentTime>=(startTime + period));

}

else

{

return (currentTime >=(4294967295-startTime+period));

}

}

Шо, опять флпрог?

А это что?

Опять обсуждаем неоформленный код? :slightly_smiling_face:

1 лайк

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

Ну, тогда скопируйте ещё что-нибудь.

И кстати, вставьте код правильно. Как правильно написано в пустом сообщении (перед тем, как Вы туда что-то впишете). Видимо, Вы не сочли нужным прочитать - писательский зуд не позволил.

1 лайк
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _bounseInputD11S = 0;
bool _bounseInputD11O = 0;
unsigned long _bounseInputD11P = 0UL;
bool _bounseInputD12S = 0;
bool _bounseInputD12O = 0;
unsigned long _bounseInputD12P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _trgs1 = 0;
bool _trgs2 = 0;
void setup()
{
    pinMode(12, INPUT_PULLUP);
    pinMode(11, INPUT_PULLUP);
    pinMode(10, OUTPUT);
    digitalWrite(10, 0);
    pinMode(9, OUTPUT);
    digitalWrite(9, 0);
    _bounseInputD11O =  digitalRead(11);
    _bounseInputD12O =  digitalRead(12);
}
void loop()
{
    bool  _bounceInputTmpD11 =  (digitalRead (11));
    if (_bounseInputD11S)
    {
        if (millis() >= (_bounseInputD11P + 40))
        {
            _bounseInputD11O= _bounceInputTmpD11;
            _bounseInputD11S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD11 != _bounseInputD11O)
        {
            _bounseInputD11S=1;
            _bounseInputD11P = millis();
        }
    }
    bool  _bounceInputTmpD12 =  (digitalRead (12));
    if (_bounseInputD12S)
    {
        if (millis() >= (_bounseInputD12P + 40))
        {
            _bounseInputD12O= _bounceInputTmpD12;
            _bounseInputD12S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD12 != _bounseInputD12O)
        {
            _bounseInputD12S=1;
            _bounseInputD12P = millis();
        }
    }
    //Плата:1
    if (_gtv3)
    {
         if (_tim1I) 
        {
             if (_isTimer(_tim1P, 5000)) 
            {
                _tim1O = 1;
            }
        }
         else 
        {
            _tim1I =1;
            _tim1P = millis();
        }
    }
     else 
    {
        _tim1O = 0;
        _tim1I = 0;
    }
    if(!(_gtv1)) _trgs1 = 1;
    if(((_gtv4) || (_tim1O))) _trgs1 = 0;
    _gtv3 = _trgs1;
    digitalWrite(9, !(_gtv3));
    _gtv1 = _bounseInputD11O;
    digitalWrite(10, !(_gtv4));
    _gtv2 = _bounseInputD12O;
    if (_gtv4)
    {
         if (_tim2I) 
        {
             if (_isTimer(_tim2P, 5000)) 
            {
                _tim2O = 1;
            }
        }
         else 
        {
            _tim2I =1;
            _tim2P = millis();
        }
    }
     else 
    {
        _tim2O = 0;
        _tim2I = 0;
    }
    if(!(_gtv2)) _trgs2 = 1;
    if(((_gtv3) || (_tim2O))) _trgs2 = 0;
    _gtv4 = _trgs2;
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) 
    {
        return (currentTime>=(startTime + period));
    }
     else 
    {
        return (currentTime >=(4294967295-startTime+period));
    }
}

Извиняюсь, исправился.
сделал как положено спасибо за замечание.

Знову! И, как всегда, борьба с переполнением миллис :slight_smile:

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

Вообще не понял вопроса?!?

Причем здесь дохлый кот с детьми и кнопка? В чем здесь связь не понятно?

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

Я зашел к вам на форум за помощью с кнопкой может кто поможет это реализовать, это же форум про ардуино и электроники?

Вот и я не понимаю - зачем тащить сюда бред с флпрога и просить заставить его мяучить.

А что не получится?
Я же говорю не понимаю в этом просто спрашиваю

Обьясняю- Ваш код написан роботом. Есть такая программа, что генерирует код - ФЛПрог называется. Так вот, ваш код - от нее.

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

1 лайк

Спасибо, теперь понял.
Извиняюсь не хотел обидеть.

Вот подключение.
Обратите внимание на это:


Берете кнопки с двумя независимыми контактными группами. У каждой кнопки одну пару контактов используете для флпрога, а вторую пару - для замыкания ADKEY1/ADKEY2 на землю. После этого нужно только правильно записать мп3-шки на карту. На мой взгляд - это самый простой выход.

Спасибо, так и сделаю.

Не уверен. Я так понимаю, что музыка, как и подсветка, нужна для определения, кто первым нажал кнопку. Как поведет себя плеер, если нажать сначала одну, а потом вторую кнопку? Мне не на чем проверить, но почему-то кажется, что в итоге будет играть мелодия “припозднившегося” игрока.

Этого я не знаю, но может и так, конечно. Хотя, этот плеер любит в busy уходить - возможно это спасёт.
Если нет, то можно кнопки на релюшки повесить - запараллелить второй модуль с синенькими релюхами и контактные пары на плеер завести. Тогда точно будет ок.

1 лайк

Да идея такая