Yahoo refuse tous les emails du site. Si vous avez une adresse chez un autre prestataire, c'est le moment de l'utiliser
En cas de soucis, n'hésitez pas à aller faire un tour sur la page de contact en bas de page.
Boite à musique Arduino + lecteur MP3 série
par skywodd | | Langue : C++ | Licence : GPLv3
Description :
Boite à samples avec une carte Arduino et un module MP3 KT403A.
Permet de lire 12 échantillons audio via 12 boutons poussoir.
Code source :
Voir le code source brut | Télécharger music_box.ino | Télécharger music_box.ino.zip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | /**
* Boite à samples avec une carte Arduino et un module MP3 KT403A.
* Permet de lire 12 échantillons audio via 12 boutons poussoir.
*/
/* Constantes pour les boutons */
const byte BUTTONS_PIN[] = {
2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, A0
};
const byte BUTTONS_COUNT = 12;
/* Constantes pour le reste du montage */
const byte STATUS_LED_PIN = 13;
/* Constantes pour la communication avec le module KT403A */
const byte COMMAND_BYTE_START = 0x7E;
const byte COMMAND_BYTE_VERSION = 0xFF;
const byte COMMAND_BYTE_STOP = 0xEF;
/* Constantes pour la commande selectSourceDevice() */
const byte DEVICE_UDISK = 0x01;
const byte DEVICE_SDCARD = 0x02;
/** Reset the MP3 module */
void resetPlayer() {
send_kt_command(0x0C, 0, 0, 100);
}
/** Select the source device for playing */
void selectSourceDevice(byte device) {
send_kt_command(0x09, 0, device, 200);
}
/** Set the volume to the given level (0 ~ 30) */
void setVolume(byte volume) {
if (volume > 30) volume = 30;
send_kt_command(0x06, 0, volume, 10);
}
/** Select the source track from the "MP3" (case insensitive) folder */
void selectSourceTrackInMp3Directory(uint16_t track_number) {
// Assert 0 ~ 9999
send_kt_command(0x12, highByte(track_number), lowByte(track_number), 10);
}
/** Fonction de bas niveau pour envoyer une commande au module KT403A */
void send_kt_command(byte command, byte data_h, byte data_l, unsigned long cmd_delay) {
Serial.write(COMMAND_BYTE_START);
Serial.write(COMMAND_BYTE_VERSION);
Serial.write((byte) 0x06);
Serial.write(command);
Serial.write((byte) 0x00);
Serial.write(data_h);
Serial.write(data_l);
Serial.write(COMMAND_BYTE_STOP);
// 16-bits checksum is optionnal
delay(cmd_delay);
}
/** Fonction setup() */
void setup() {
/* Place les boutons en entrées avec pull-up */
for (byte i = 0; i < BUTTONS_COUNT; ++i) {
pinMode(BUTTONS_PIN[i], INPUT_PULLUP);
}
/* Place la LED de statut en sortie */
pinMode(STATUS_LED_PIN, OUTPUT);
digitalWrite(STATUS_LED_PIN, HIGH);
/* Initialise le port série */
Serial.begin(9600);
/* Initialise le module KT403A */
resetPlayer();
selectSourceDevice(DEVICE_SDCARD);
setVolume(15);
}
/** Fonction loop() */
void loop() {
/* Test chaque bouton */
for (byte i = 0; i < BUTTONS_COUNT; ++i) {
/* Bouton actif ? */
if (digitalRead(BUTTONS_PIN[i]) == LOW) {
digitalWrite(STATUS_LED_PIN, LOW);
/* Joue la musique */
selectSourceTrackInMp3Directory(i + 1);
delay(40);
/* Attend que le bouton soit relâché */
while(digitalRead(BUTTONS_PIN[i]) == LOW);
delay(40);
digitalWrite(STATUS_LED_PIN, HIGH);
}
}
}
|