Go Down

Topic: Music Shield et microrupteur (Read 193 times) previous topic - next topic

axelbrun

Bonjour,

Je poste sur ce forum, car m'étant mis à l'électronique et au langage C++ depuis peu, je rencontre une difficulté sur un projet que je réalise.

Peux être seriez vous m'aider ?

Le projet se fait à partir d'une carte arduino uno, assemblé à un music shield (v2 de seedstudio).

Un son ("Ambiance") est joué en continue mais lorsqu'un contact est enregistré par le microrupteur un autre son ("Moineau") est joué, jusqu'à que celui-ci se termine, tout autre contact sur le microrupteur ne provoquera aucun autre changement. A la fin du deuxième, c'est le premier qui est rejoué, jusqu'à qu'un nouveau contact soit enregistré.

Pour l'instant mon problème est que le premier son et bien joué mais il n'y a pas de changement lorsque j'appuie sur le microrupteur.

Ainsi auriez vous une idée de ce qui ne va pas dans le code suivant peut être ?

Merci d'avance pour votre aide !

Code: [Select]

#include <SD.h>
#include <SPI.h>
#include <arduino.h>
#include <MusicPlayer.h>
MusicPlayer mesChants = MusicPlayer();  // bibliothèque Music Player..
   
int pinContact=8;// define Microrupteur on pin 8
 
void setup()
{
Serial.begin(9600);
player.begin();  //will initialize the hardware and set default mode to be normal.
player.keyDisable();
player.setPlayMode(PM_REPEAT_ONE); //set mode to repeat playing a song
player.playOne("AMBIANCE.WAV");
 
pinMode (pinContact,INPUT_PULLUP); //active la résistance pull up interne
 
}
 
void loop()
{
 player.play();
 boolean etatContact=digitalRead(pinContact);
 
 if (!etatContact) // test inverse car mode INPUT_PULLUP
 {
  Serial.println("Le son 1 est joué");
 }
 else
 {
  Serial.println("Le son 2 s'active");
  player.playOne("MOINEAU.MP3");
 }

dfgh

#1
Jun 14, 2018, 10:25 am Last Edit: Jun 14, 2018, 07:23 pm by dfgh
hello
Code: [Select]
test inverse car mode INPUT_PULLUP
if (etatContact) // si etatContact==1
 {
  Serial.println("Le son 1 est joué");//car on est en attente, on joue le son 1
 }
 else //sinon etatContact ==0
 {
  Serial.println("Le son 2 s'active");
  player.playOne("MOINEAU.MP3");//auquel cas on joue le son 2
 }

axelbrun

Re bonjour dfgh,

Alors après avoir repris mon code avec la correction que tu y a faite (et je vois maintenant l'erreur d'inversement).. rien ne se passe en plus.

Le son 1 joue toujours, mais rien ne s'inscrit à la console non plus !

Le seul message que je puisse y lire est :

VS10xx Clock Frq: 0xC000
Card type: SD2
Volume type is

Est ce qu'autre chose pourrait joué ? J'avoue être un peu perdue !

dfgh

comment est cablé ton microrupteur?

charges ce prg et regardes ce qui se passe sur ton moniteur lorsque tu appuies sur le microrupteur
Code: [Select]
int pinContact=8;// define Microrupteur on pin 8
void setup()
{
Serial.begin(9600);
pinMode (pinContact,INPUT_PULLUP); //active la résistance pull up interne
}
 
void loop()
{
 boolean etatContact=digitalRead(pinContact);
 Serial.print("etatContact = ");Serial.println(etatContact);
 }

fdufnews

Lorsque "moineau" a fini de jouer tu ne redemandes pas la lecture de "ambiance"

axelbrun

Salut dfgh, alors pour ce qui est du microrupteur, je l'ai cablé comme ceci avec les pattes COM = pin, NO = 5v, NC = gnd.

Effectivement le petit programme montre les bonnes valeurs.. c'est à dire 0 en étant relaché et 1 en étant appuyé.

Ce qu'il se passe c'est que j'ai l'impression que c'est soit le Music Shield joue le son, soit il lit la valeur du microrupteur.. Je dis ça par ce que ça change vraiment en fonction des fois.. c'est très étrange. Et sans jamais passé au son 2.

Une petite idée d'où cela pourrait venir ? Du code en lui-même ?

Salut fdufnews , c'est à dire ?
Car ce qui m'intéresse est que le son 1 rejoue à la fin du son 2, jusqu'à un nouveau contact enclenchant le son 2 etc...

dfgh

hello
ton microrupteur est cablé à l'inverse de ce qu'il devrait etre.
il faut le commun sur D8
Normalement Connecté ne doit pas etre raccordé
Normalement ouvert doit etre relié à GND

lorsque tu ne touche à rien, tu dois lire "" sur le moniteur. ce "1" correspond aux 5V ammené par la résistance de pullup interne.
lorsque tu appuie sur le microrupteur, tu établit un contact avec GND et donc tu dois lire "0" sur le moniteur.

ca c'est pour la partie Hard.

passons au soft:
dans ta loop, telle qu'elle est faite, tu demandes la musique 1 tant que tu ne touches pas le microrupteur
puis si tu appuies dessus, tu demandes la music 2. mais seulement pendant l'appui sur le micro rupteur.
des que tu le relaches, la loop demande la music 1.




tu dois utiliser une mémorisation de l'état du contact. et probablement une tempo de la durée de la music 2 pour neutraliser la lecture du microrupteur

Go Up