Bonjour chiara667
Voilà le schéma de la version Arduino Mega:
SoundboardMega32boutons.pdf (78.9 KB)
et la liste des câbles:
ARDFR_chiara667_soundboardMega_Brochages.pdf (94.8 KB)
Le programme (toute première version !)
/*
Name: chiara667_Soundboard.ino
Created: 31.05.2023
Author: jpbbricole/chiara667
https://forum.arduino.cc/t/soundboard-prototype/1130052
Commande de 32 MP3 via 32 boutons et un module DY-SV5W
https://grobotronics.com/images/companies/1/datasheets/DY-SV5W%20Voice%20Playback%20ModuleDatasheet.pdf?1559812879320
*/
//------------------------------------- Pour UNO
//const int sv5wIOpin[] = {A0, A1, A2, A3};
//const int btnMp3Pin[] = {2, 3, 4, 5, 6, 7, 8, 9};
//------------------------------------- Pour MEGA
const int btnMp3Pin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, // Pin des boutons
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
const int btnMp3Nombre = sizeof(btnMp3Pin) / sizeof(btnMp3Pin[0]); // Nombre de boutons
const int btnMp3EtatOn = LOW; // Etat lu du bouton quand pressé
const int sv5wIOpin[] = {4, 5, 6, 7, 8, 9, 10, 11}; // Pin des commandes IO0 à IO7 vers SV5W
const int sv5wIOnombre = sizeof(sv5wIOpin) / sizeof(sv5wIOpin[0]); // Nombre de boutons
const int sv5wIOetatOn = LOW; // Etat de la sortie IO quand activée
const unsigned long sv5wIOetatOnPulse = 1000; // Durée de l'impulsion de commande
int mp3selectionnee = 0;
void setup()
{
Serial.begin(115200);
//--------------------------------- Initialisation des entrées des boutons
for (int b = 0; b < btnMp3Nombre; b ++)
{
pinMode(btnMp3Pin[b], INPUT_PULLUP); // Donc actif à LOW
}
//--------------------------------- Initialisation des sorties de commandes vers le module SV5W
for (int i = 0; i < sv5wIOnombre; i ++)
{
pinMode(sv5wIOpin[i], OUTPUT);
digitalWrite(sv5wIOpin[i], !sv5wIOetatOn); // Mettre la sortie à OFF
}
}
void loop()
{
mp3selectionnee = btnMp3Lecture();
if (mp3selectionnee > 0)
{
sv5WIOcommande(mp3selectionnee);
delay(sv5wIOetatOnPulse);
sv5WIOcommande(0); // Tout les IOn OFF
}
}
/*/
Lecture des boutons MP3 seul le premier bouton pressé est pris en compte
retourne 0 si aucun bouton est pressé
*/
int btnMp3Lecture()
{
for (int b = 0; b < btnMp3Nombre; b ++)
{
if (digitalRead(btnMp3Pin[b]) == btnMp3EtatOn) // Si bouton pressé
{
return b + 1; // On retourne le numéro du bouton presse de 1 à btnMp3Nombre
}
}
return 0;
}
/*/
Commande du module MP3 SV5W sur ses ports IO0 à IO7
Transformation décimale en binaire du numéro du MP3
Si mp3Num est 0 tout les IOn sont mis OFF
*/
void sv5WIOcommande(int mp3Num)
{
for (int b = 0; b < sv5wIOnombre; b ++) // On lit les bits de mp3Num
{
if (bitRead(mp3Num, b) == 1)
{
digitalWrite(sv5wIOpin[b], sv5wIOetatOn); // Mettre la sortie à IOb à ON
}
else
{
digitalWrite(sv5wIOpin[b], !sv5wIOetatOn); // Mettre la sortie à IOb à OFF
}
}
}
C'est testé "en vrai" sur un Arduino Uno.
A ta disposition pour toutes questions.
Cordialement
jpbbricole