Commande vocal Bluetooth et Grove MP3 v2.0

Bonjour,

Débutant en Arduino, je suis en train de réaliser actuellement un robot avec lequel on pourrait “communiquer” via un smartphone, c’est-à-dire lorsque que l’on prononce une phrase ou un mot, Sonny (c’est son petit nom), nous répond par une phrase préalablement enregistrée.

Voici le code pour le bluetooth (j’utilise un module HC-05):

char data;
 
void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  Serial.begin(9600);
  while (!Serial) {
    
  }
}
 
void loop() {
  while (Serial.available()) {
    data = Serial.read();
    Serial.print(data);
  }
}

De ce côté, pas de problême, lorsque je dis un mot ou une phrase, le moiteur série affiche exactement ce que je prononce.

Pour la “réponse” de Sonny, j’utilise le module grove MP3 v2.0, et voici le code :

#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>



SoftwareSerial mp3(2, 3);



void setup()
{
    mp3.begin(9600);
    Serial.begin(9600); 
    delay(100);
    
    SelectPlayerDevice(0x02);      
    SetVolume(0x1E);                
}

void loop()
{
    char recvChar = 0;
    while(Serial.available())
    {
        recvChar = Serial.read();
    }
    Serial.print("Commande envoyee: ");
    Serial.println( recvChar );
    
    switch (recvChar)
    {
        case '1':
            SpecifyMusicPlay(1);
            Serial.println("Lecture en cours");
            break;

       
    }
    
    delay(1000);
    

}

Là non plus, aucun problème. Lorsque je rentre un chiffre, le module me joue le fichier mp3 correspondant.

Là où je bloque c’est pour lier les deux programmes. Je voudrais que lorsque que je prononce un mot, le module me joue un fichier mp3, mais je bloque depuis bientôt trois semaines et mes recherches ont été infructueuses…

Auriez-vous une piste à me conseiller pour que je puisse résoudre ce “problème”?

Cordialement.

mais je bloque depuis bientôt trois semaines et mes recherches ont été infructueuses

montrez nous ce que vous avez essayé pendant 3 semaines... c'est un peu gros...

montrez nous ce que vous avez essayé pendant 3 semaines

J'ai suivi des tutoriels et des cours (Eskimon, OpenClassroom, les carnets du maker entre autres) pour voir s'il etait possible que lorsque je dise un mot, le moniteur série m'affiche un seul caractère, mais je n'ai pas trouver (ou bien pas compris ce que j'ai pu lire).

écrivez un bout de code qui fait cela

(notez que dans le code de votre HC05 vous faites

  Serial.begin(9600);
  Serial.begin(9600);

--> une fois suffit...

écrivez un bout de code qui fait cela

Merci de votre réponse! Je m’atèle de suite à la réflexion et la rédaction d’un code.
Petite question, dois-je utiliser une chaîne de caractère?

(pour le code HC-05 et le doublon du Serial.begin, simple erreur d’inattention…)

Bonjour,

Pour associer un mot à un numéro de commande, tu crées une table des mots de commande et lorsque tu reçois une chaîne de caractères tu compares cette chaîne à chacun des mots de la table. L'index dans cette table te donne le numéro de commande.

// table des mots de commande
const char *tabCde[]=
{
  "TEST",
  "ESSAI",
  "MARCHE",
  NULL        // fin de la table des commandes
};

void loop() {
  static char buf[30];      // buffer de réception
  if (Serial.available())
  {
    int nrec=Serial.readBytes(buf,sizeof buf-1);
    buf[nrec]=0;            // marque la fin de la chaine

    // recherche la commande dans la table
    int nCde;
    for (nCde=0; tabCde[nCde]!=NULL; nCde++)
    {
      if (strcmp(buf,tabCde[nCde])==0)
        break;                          // on a trouvé la commande
    }
    if (tabCde[nCde]==NULL)
    {
      // commande non trouvée message?
    }
    else
    {
      // on a trouvé la commande -> nCde et on la traite
    }
  }
 }