Pages: [1]   Go Down
Author Topic: Blocage sur lancement d'une fonction x fois  (Read 335 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

Je suis en train de préparer mon premier projet Arduino et je bloque un peu sur 2 ou 3 petites choses...je fais appel à votre savoir pour m'éclairer....
Mon projet est de faire un boitier avec un bouton poussoir en entrée, 8 leds en sortie plus une led témoin, un écran avec 2 bouton poussoir qui serviront de choix de menu.

J'ai donc 8 menus, 7 sont des menus préprogrammés, le 8ème est un mode manuel. La différence entre les menus préprogrammés réside dans la fréquence de clignotement des leds. A chaque fois que je choisi un menu, la led témoin cligno à la fréquence programmée pour le menu en question. Mon soucis est le suivant :
J'aurais aimé faire clignoter cette led témoin durant un certain nombre de cycle et qu'elle s'arrête.
voici mon code en liens

http://www.megaupload.com/?d=NFVS74LJ

On m'a fait penser à utiliser des variables dans la partie de choix du menu (verifEtatPoussEcran()) en déclarant par ex :
boolean etatChoixPreset  = false;
int monCompteur = 0;

puis en intégrant dans ma fonction verifEtatPoussEcran() :
etatChoixPreset  = true;
monCompteur = 0;

Code:
////////////////////////////////////////Fonction VERIFICATION ETAT POUSS ECRAN////////////////////////////////////////
void verifEtatPoussEcran()
{  
  if(digitalRead(pouss2) == LOW && Etatpouss2 == false){
    delay(attenteCapteurs); //mise d'un délai pour attendre la stabilité du signal et voir si c'est bien appuyé
    if(digitalRead(pouss2) == LOW && Etatpouss2 == false){
      actualPreset++;
      Etatpouss2 = true;
      (actualPreset>NBPRESET)?actualPreset=1:true; // Permet de ne pas dépasser le nombre de preset NBPRESET
      affichPresetEcran();
etatChoixPreset  = true;
monCompteur = 0;
      
      


      
    }      
   }
  if(digitalRead(pouss2) == HIGH && Etatpouss2 == true){
    delay(attenteCapteurs); //mise d'un délai pour attendre la stabilité du signal et voir si c'est bien appuyé
    if(digitalRead(pouss2) == HIGH && Etatpouss2 == true){
      Etatpouss2 = false; //on repasse en mode false, donc c'est en écoute d'appuye sur le bouton

    }
  }


  if(digitalRead(pouss1) == LOW && Etatpouss1 == false){
    delay(attenteCapteurs);
    if(digitalRead(pouss1) == LOW && Etatpouss1 == false){
      analyspreset();
      actualPreset--;
      Etatpouss1 = true;
      (actualPreset< 1)?actualPreset=NBPRESET:true;
      affichPresetEcran();
      etatChoixPreset  = true;
monCompteur = 0;
      


    }
  }
  if(digitalRead(pouss1) == HIGH && Etatpouss1 == true){
    delay(attenteCapteurs);
    if(digitalRead(pouss1) == HIGH && Etatpouss1 == true){
      Etatpouss1 = false;
    }
  }

}

et en intégrant dans la fonction cligno
monCompteur++;
if(monCompteur>4){
    etatChoixPreset  = false;

Code:
void cligno(){
interCligno = timeBlink[actualPreset];
  if(currentMillis - diffCligno > interCligno && etatChoixPreset  ==  
true) {
    // stock la valeur actuelle de millis
    diffCligno = currentMillis;


    // clignottement de la LED
    if(etatLED == true){
    etatLED = false;
    digitalWrite(pinLed, LOW);

    }else{
    etatLED = true;
    digitalWrite(pinLed, HIGH);
    }
  }

monCompteur++;
if(monCompteur>4){
    etatChoixPreset  = false;
}
}

Malheuresement plus de clignotement mais une led éteinte ou allumé 1 menu sur 2...

Je bloque complètement, si qqun a une idée...
Logged

Bretagne
Online Online
Edison Member
*
Karma: 11
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Ton code est super long par rapport à ta question, tu aurais pu le poster directement ici avec la balise code, car passer par megaUpload, c'est long et il faut être motivé pour aller le chercher.

En parcourant vite fait, je suis tombé sur ça :
Code:
  if(digitalRead(pouss2) == LOW && Etatpouss2 == false){ (...)
Ce n'est pas très lisible, le == n'aurait-il pas priorité sur le && ?

Ensuite, ça va demander pas mal de temps pour déchiffrer ton code, où en es-tu dessus? si tu arrives à le relire (en imaginant ce qu'il se passe à chaque instruction), ça t'aiguillera peut-être. Tu nous demandes là d'étudier un code entier que l'on ne connaît pas...

J'arrive pas trop à le lire, ne serait-ce que   if(currentMillis - diffCligno > interCligno && etatChoixPreset  ==  true) , il faut pas mal de temps pour comprendre ce que tu voulais tester... des parenthèses dans tes tests (même si elles ne sont pas nécessaires) rendrait les choses plus lisibles...

est-ce que  if( ( (currentMillis - diffCligno) > interCligno) && etatChoixPreset) correspond toujours à ce que tu voulais faire?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erf c'est vrai! Dans la précipitation, j'ai tout mis, mais je vais alléger et rendre le code plus simple, ne mettre que le principal...
Je vais aussi essayer de mettre des parenthèse pour découper un peu...
Logged

Pages: [1]   Go Up
Jump to: