Algorithme pour if imbriqués et passage conditionnel

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 27 juin 2007 à 12:10
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 2 oct. 2007 à 14:46
Bonjour,
Voici un algorithme que j'ai fait et dont le but est de, si et seulement si le microphone d'environnement n'est pas connécté (moyenne 0 )au système pendant 60 sec et que nous sommes en mode automatique (P1_5 1), d'afficher sur l'écran "No ambiance micro" et egalement de faire une alerte sonore (Gong) les 5 premières minutes si le micro d'environnement n'est pas connécté. Après les 5 minutes passées on devra toujours affiché "No ambiance micro" mais il ne devrait plus avoir d'alerte sonore. Tel est le cycle.

Deplus si le microphone est reconnécté il faut pouvoir réinitialisé correctement les variables de façon à refaire correctement le cycle normale si le micro se deconnète à nouveau:

Voici mes variables:

<!-- BEGIN TEMPLATE: bbcode_code -->
data unsignedchar CPT_NoMic=0; 
 
bit NoMic_Bit=0; // variable pour dire que le microphone est reconnécté
int Al_no_mic=0; //270607 variable pour jouer gong si pas de micro env
 
Voici mon code:

 if((moyenne==0)&&(P1_5 == 1))// If AUTOMATIC MODE & ADC Average=0
{
CPT_NoMic++;
if( CPT_NoMic>61)  //2706 ajout car si pas alors on ne repasse pas dans "No ambiance microphone"
CPT_NoMic=0; 
   if( Al_no_mic>6)  //2706 ajout car si pas alors on ne repasse pas dans "No ambiance microphone"
Al_no_mic=0;
}
 
/* //2706 dis car intégrer en plus le gong pendant 5 reprises si pas mic env
 
if ((CPT_NoMic==60)&&(NoMic_Bit==0)) // If ADC Average=0 during 60 seconds
{
        #ifdef DEBUG_ME   //testali0304
printf("No ambiance microphone\n"); // No Ambiance microphone => Volume = maximum
        #endif            //testali0304
CPT_NoMic=0;
    NoMic_Bit=1;
}
*/
 
if((CPT_NoMic==60)&&(NoMic_Bit==0)&&(Al_no_mic<=5))// If ADC Average=0 during 60 seconds
{
 
printf("No ambiance microphone\n"); // No Ambiance microphone => Volume = maximum
 
CPT_NoMic=0;
//NoMic_Bit=1;
                         CF_operationsGONG();
Al_no_mic++;
if(Al_no_mic==5)
NoMic_Bit=1;
}
if((moyenne>0)&&(P1_5 1))// If ADC Average<>0> Ambiance microphone (re-)connected
{
NoMic_Bit=0;
 
}
 
 Est ce que j'ai bien placé mes if là ou il fallait ? Il y a t il un algorithme plus efficace ?

Merci

 

1 réponse

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
2 oct. 2007 à 14:46
Bonjour,

ta question n'est pas claire en fait pour moi. Enfin la manière d'expliquer le problème et du coup le programme qui en résulte est dur à lire. Je vais essayer de me clarifier solo:
_ tu as une fonction qui est executee toutes les secondes, disons il faut qu'au début tu mettes à jour la moyenne du bruit d'ambiance puis ensuite vient ton problème et ce que tu veux dire c'est :
SI mode_automatique ET moyenne=0 ALORS
SI on-est-dans-les-5-premieres-minutes ALORS
faire un GONG sonore
FSI
afficher l'alerte
FINSI
mettre a jour la moyenne
Quoi encore, pense aussi à mettre des noms de variables explicites plutot que P1_5, tu see ?
=

Une autruche ne se cuit pas aux petits lardons
0