/******************************************************************************* Lecteur MP3 de proximité Bare Conductive Commentaire et retour série traduit par Etienne MOY Pour Les Petits Débrouillards. ------------------------------ proximity_mp3.ino - lecture MP3 déclenchée par la proximité Basé sur le code de Jim Lindblom et inspiré par le Freescale Fiches techniques sur les semi-conducteurs et notes d'application. Code Bare Conductive écrit par Stefan Dzisiewski-Smith et Peter Krige. Ce travail est sous licence du MIT https://opensource.org/licenses/MIT Copyright (c) 2016, Bare Conductive L'autorisation est accordée, sans frais, à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter dans le logiciel sans restriction, y compris, sans limitation, les droits d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, d'accorder des sous-licences et/ou de vendre des copies du logiciel, et de permettre aux personnes à qui le logiciel est fourni pour ce faire, sous réserve des conditions suivantes : L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation doivent être inclus dans tous les des copies ou des parties substantielles du logiciel. LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITES, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, L'APTITUDE À UN USAGE PARTICULIER ET LA NON-CONTREFAÇON. EN AUCUN CAS, LE LES AUTEURS OU LES DÉTENTEURS DE DROITS D'AUTEUR SOIENT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE LA RESPONSABILITÉ, QU'ELLE SOIT CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, EN DEHORS OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIELS. *******************************************************************************/ // traitement des erreurs du compilateur #include "Compiler_Errors.h" // Inclusions du touché #include #include #define MPR121_ADDR 0x5C #define MPR121_INT 4 // inclusion du mp3 #include #include #include #include // variables mp3 SFEMP3Shield MP3player; byte result; int lastPlayed = 0; // mp3 behaviour defines #define REPLAY_MODE TRUE // Par défaut, le fait de toucher une électrode de manière répétée // rejoue la piste depuis le début à chaque fois. // // Si vous réglez ce paramètre sur FALSE, en touchant de façon répétée un // l'électrode arrêtera la piste si elle est déjà // jouer, ou la jouer dès le début si elle ne l'est pas. // définitions du comportement tactile #define firstPin 0 #define lastPin 11 // instanciation de la carte sd SdFat sd; void setup(){ Serial.begin(57600); pinMode(LED_BUILTIN, OUTPUT); //while (!Serial) ; {} //dé-commenter lors de l'utilisation du moniteur en série Serial.println("Lecteur MP3 a proximite Bare Conductive"); if(!sd.begin(SD_SEL, SPI_HALF_SPEED)) sd.initErrorHalt(); if(!MPR121.begin(MPR121_ADDR)) Serial.println("erreur de mise en place de MPR121"); MPR121.setInterruptPin(MPR121_INT); // Changements par rapport à Touch MP3 // il s'agit du seuil de déclenchement - le régler à un niveau bas le rend plus proche d'un déclencheur de proximité // la valeur par défaut est de 40 pour le toucher MPR121.setTouchThreshold(3); // <---- Baisser la valeur de cette variable //pour rendre votre touch board plus sensible // !!ATTENTION A TOUJOUR LA LAISSER // SUPERIEUR A CETTE VALEUR // || // \ / // \/ // c'est le seuil de rejet - doit TOUJOURS être inférieur au seuil de toucher // la valeur par défaut est de 20 pour le toucher MPR121.setReleaseThreshold(2); result = MP3player.begin(); MP3player.setVolume(10,10); if(result != 0) { Serial.print("Erreur Code : "); Serial.print(result); Serial.println(" lorsque vous essayez de demarrer le lecteur MP3"); } } void loop(){ readTouchInputs(); } void readTouchInputs(){ if(MPR121.touchStatusChanged()){ MPR121.updateTouchData(); // ne faire une action que si nous avons une ou plusieurs quilles touchées // ignorer les touches multiples if(MPR121.getNumTouches()<=1){ for (int i=0; i < 12; i++){ // Vérifier quelles électrodes ont été pressées if(MPR121.isNewTouch(i)){ //pin i viens d'être touché Serial.print("pin "); Serial.print(i); Serial.println(" viens d'etre touche"); digitalWrite(LED_BUILTIN, HIGH); if(i<=lastPin && i>=firstPin){ if(MP3player.isPlaying()){ if(lastPlayed==i && !REPLAY_MODE){ // si nous jouons déjà le morceau demandé, arrêtez-le // (mais seulement si nous sommes dans REPLAY_MODE) MP3player.stopTrack(); Serial.print("Arret de la piste "); Serial.println(i-firstPin); } else { // si nous jouons déjà un morceau différent (ou si nous sommes dans // REPLAY_MODE), s'arrêter et jouer le nouveau MP3player.stopTrack(); MP3player.playTrack(i-firstPin); Serial.print("playing track "); Serial.println(i-firstPin); // n'oubliez pas de mettre à jour lastPlayed - sans cela, nous ne // ont une histoire lastPlayed = i; } } else { // si on ne joue rien, jouer le morceau demandé // et mise à jour jouée en dernier MP3player.playTrack(i-firstPin); Serial.print("Debut de la piste "); Serial.println(i-firstPin); lastPlayed = i; } } }else{ if(MPR121.isNewRelease(i)){ Serial.print("pin "); Serial.print(i); Serial.println(" n'est plus touché"); digitalWrite(LED_BUILTIN, LOW); } } } } } }