Bonjour à tous.
Je vous remercie déjà pour l'attention et l'aide que vous pourrez m'apporter pour ce projet qui me tient à coeur et qui m'occuper depuis plusieurs mois déjà.. La passion ne compte pas ses heures....
J'ai fabriqué une armure d'Ironman MK85 à ma taille. J'ai finis toutes la parties carrosserie. J'avais déjà fais un programme, tout embarqué dans le casque, qui tournait sur Arduino Nano mais sans reconnaissance vocale et pour gérer les fonctions du casque, ouverture/fermeture par sensor et gyro 3axes, un buzzer pour quelques sons, tmp36 pour la gestion de la température interne etc. On peut d'ailleur encore voire les bribes de l'ancien programme dans le nouveau mais je vais récupérer toutes les anciennes fonctions. (Du coups j'espère que mon programme sera assez lisible).
Maintenant que j'ai fais l'armure entière il y a plein d'autres gadjets en plus et depuis 2 semaines je m'attaque à la partie programmation des divers gadjets dont elle est équipée. (laissant un peu de côté la partie hydrogène..)
Pour me permettre de commander les divers fonctions de l'armure j'ai opté pour une reconnaissance vocale.
Pour ce faire j'ai acheteé un module de reconnaissance vocale Geeetech, il peut enregistrer 15 ordres divisé en 3 groupes de 5.
Après pas mal de recherches et de documentation j'ai écris la trame principale (les activations des divers fonctions découlant des commandes vocales ne sont pas encore écritent mais ne me poseront pas de problèmes du moment que la trame principale sera opérationnelle). Ayant besoins d'une dizaine de fonctions, pour commencer, je dois accèder au groupe d'ordre 1: (0x21), ce qui ne me pose pas de problème. En revanche pour les ordres du groupe 2 : (0x22) j'ai beaucoups plus de soucis.
Le résultat n'est pas aléatoire mais je n'arrive pas suffisamment à définir la logique de fonctionnement actuelle de mon programme pour me permettre de résoudre ce mon challenge.
Je viens donc humblement demander votre aide
/////////////////////////////////////////////////////
////////// rappel connectique //////////////
////////////////////////////////////////////////////
/*
ARDUINO || COMPOSANTS MEGA 2560
D19 TX || RX module vocal
D18 RX || TX module vocal
D2 ||
D3 ||
D4 ||
D5 || + du Buzzer
D6 ||
D7 ||
D8 ||
D9 ||
D10 ||
D11 ||
D12 ||
D13 ||
D46 || + du Haut Parleur
D50 || MISO lecteur SD
D51 || MOSI lecteur SD
D52 || SCK lecteur SD
D53 || CS lecteur SD
5V || lecteur SD + module vocal + relais + relais
GND || lecteur SD + - du HP + module vocal + cube + relais + relais + ecritaux
*/
//////////////////////////////////////////////////////////////////////////////////
///// Bibliothèque des sons disponibles ///////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//// S_CONNECTION S_DISCONNECTION S_BUTTON_PUSHED //
//// S_MODE1 S_MODE2 S_MODE3 //////////////////////////
//// S_SURPRISE S_OHOOH S_OHOOH2 ///////////////////////
//// S_CUDDLY S_SLEEPING S_HAPPY //////////////////////////
//// S_SUPER_HAPPY S_HAPPY_SHORT S_SAD ////////////////////
//// S_CONFUSED S_FART1 S_FART2 ///////////////////////////
//// S_FART3 S_JUMP 20 ///////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
//////////////////// Librairies /////////////////////
///////////////////////////////////////////////////////
#include <pcmConfig.h> // Library lecture Wav
#include <pcmRF.h> // Library lecture Wav
#include <TMRpcm.h> // Library lecture Wav
#include <Servo.h> // Librairie Servo
#include <SD.h> // Library Carte SD
#define SD_Pin 53 //define CS pin ATTENTION SI AUTRE BOARD!!
#include <CuteBuzzerSounds.h> //librairie buzzer
#include <Sounds.h> //librairie buzzer
#include <TMP36.h> // Librairie TMP36
#include <Wire.h> // Must include Wire library for I2C
#include <Servo.h> // Librairie Servo
/////////////////////////////////////////////////////////////
/////////////// variables des sorties /////////////////
////////////////////////////////////////////////////////////
Servo servoG; // créer objet servo gauche
Servo servoD; // créer objet servo droit
TMRpcm speaker; //objet "speaker
int temoin = 13; //led arduino uno pour nano = 6 et 13 our Mega!!
byte mess = 0; //variable de stockage du message
int jarvis = 0;
int voix; //voix de Jarvis
int musique; //musique à disposition
bool allume;
bool eteind;
int etatMasque = 0; //stock l'état du masck 0=masque fermé / 1=masque ouvert
int etatLed = 0; //stock l'état du rétroéclairage 0=éteind / 1=allumé
int etaTech = 0; //stock l'état d'appel du second groupe d'ordres
int etaTurbine = 0; //stock l'état de la turbine
int etatMusique = 0; //stock l'état de la lecture de la musique
const int sensor = 4; // sensor créé sur pin 4
int lastState = LOW; // etat précédent du sensor
int currentState; // la lecture actuelle du sensor
const int relais = 2; // relais allumage yeux créé sur pin 2
const int ledChauffe = 3; // led contrôle surchauffe créée sur pin 3
void setup() {
Serial.begin(9600); //initialise le miniteur série
/////////////////////////////////////////////////////////////////
///////////////// déclaration speaker /////////////////////
////////////////////////////////////////////////////////////////
speaker.speakerPin = 46; //définnie le pin du speaker.
if (!SD.begin(SD_Pin)) { // si carte non inceré, ne rien faire
return;
}
speaker.setVolume(5); //volume level : 0 to 7
///////////////////////////////////////////////////
/////////// déclaration sortie ///////////////
//////////////////////////////////////////////////
pinMode(temoin, OUTPUT);
//////////////////////////////////////////////////
///////////// sortie éteinte //////////////////
/////////////////////////////////////////////////
digitalWrite(temoin, LOW);
/////////////////////////////////////////////////////
////////////// module micro ///////////////////
////////////////////////////////////////////////////
Serial.write(0xAA);
Serial.write(0x00);//attente
delay(100);
Serial.write(0xAA);
Serial.write(0x37);//Compact mode
delay(100);
Serial.write(0xAA);
Serial.write(0x00);//attente
delay(100);
Serial.write(0xAA);
Serial.write(0x21);//importe groupe 1
}
void loop()
{
while (Serial.available())
{
mess = Serial.read(); //recoit le message et le stock dans la variable mess
////////////////////////////////////////////////
//////////////// reveille /////////////////////
///////////////////////////////////////////////
if ((jarvis == 0) && (mess == 0x11)) //jarvis
{
Serial.println("Jarvis");
voix = random(1, 8); //random de 1 à 7
delay (500);
if (voix == 1) {
speaker.play("1.wav");
}
if (voix == 2) {
speaker.play("2.wav");
}
if (voix == 3) {
speaker.play("3.wav");
}
if (voix == 4) {
speaker.play("4.wav");
}
if (voix == 5) {
speaker.play("5.wav");
}
if (voix == 6) {
speaker.play("6.wav");
}
if (voix == 7) {
speaker.play("7.wav");
}
}
jarvis = 1;
digitalWrite(temoin, HIGH);
}
//////////////////////////////////////////////////
///////////////// Ordres //////////////////////
/////////////////////////////////////////////////
if (jarvis == 1) {
if ((mess == 0x12) && (etatMasque == 0)) //ouverture masque
{
jarvis = 0;
etatMasque = 1;
Serial.println("Ouvre masque");
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
digitalWrite(temoin, LOW);
mess = 0x00; //variable mess remise à zero
}
if ((mess == 0x12) && (etatMasque == 1)) //ferme masque
{
jarvis = 0;
etatMasque = 0;
Serial.println("Ferme masque");
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
digitalWrite(temoin, LOW);
mess = 0x00;
}
if ((mess == 0x15) && (etatMusique == 0)) //passe de la la musique aléatoirement
{
jarvis = 0;
etatMusique = 1;
Serial.println("Musique ON");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if ((mess == 0x15) && (etatMusique == 1)) //éteind la musique
{
jarvis = 0;
etatMusique = 0;
Serial.println("Musique OFF");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21); // appel le 1er groupe d'ordre
delay(100);
mess = 0x00;
}
if (mess == 0x13) //Allumage
{
jarvis = 3;
allume = 1;
eteind = 0;
Serial.println("Allumes");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x22); // appel le second groupe d'ordre
delay(100);
mess = 0x00;
}
if (mess == 0x14) //Extinction
{
jarvis = 3;
eteind = 1;
allume = 0;
Serial.println("Eteinds");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x22); // appel le second groupe d'ordre
delay(100);
mess = 0x00;
}
}
//////////////////////////////////////////////////
//////////////// allumage /////////////////////
//////////////////////////////////////////////////
if ((jarvis == 3) && (allume == 1)) {
if (mess == 0x11) //Led allumées
{
jarvis = 0;
Serial.println("Led ON");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x12) //Smog actif
{
jarvis = 0;
Serial.println("Smog ON");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x13) //Turbine en rotation
{
jarvis = 0;
Serial.println("Turbo ON");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x14) //Flaps
{
jarvis = 0;
Serial.println("Flaps demo start");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x15) //Enclenche la demo
{
jarvis = 0;
Serial.println("Demo active");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
}
///////////////////////////////////////////////
//////////////// extinction ///////////////////
///////////////////////////////////////////////
if ((jarvis == 3) && (eteind == 1)) {
if (mess == 0x11)//Extinction LED
{
jarvis = 0;
Serial.println("Extinction LED");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x12)//Smog OFF
{
jarvis = 0;
Serial.println("Smog OFF");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x13)//Arrêt du turbo
{
jarvis = 0;
Serial.println("turbo stop");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x14)//Stop demo flaps
{
jarvis = 0;
Serial.println("Flaps demo stop");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
if (mess == 0x15)//Arrêt Demo
{
jarvis = 0;
Serial.println("Demo stop");
digitalWrite(temoin, LOW);
delay(10);
Serial.write(0xAA);
Serial.write(0x00);
delay(100);
Serial.write(0xAA);
Serial.write(0x21);
delay(100);
mess = 0x00;
}
}
}
Je reste naturellement à votre disposition et vous remercie d'avance pur votre intérêt..