Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino UNO]-Besoin d'aide pour un programme

    26 janvier 2014 à 16:03:41

    Bonjour, 

    Je suis actuellement en Terminale S-SI et je suis sur un projet avec mes amis, qui a pour but de créer un gilet de sauvetage électronique.

    Le fonctionnement de ce gilet se résume comme celà : 

    Marche 
    
    Attente 20 secondes
    
    Tant que electro-aimant = 0
    
    Attente 20 secondes
    
    Signal lumineux (led) + signal sonore (Buzzer) état HAUT pendant 5 secondes
    
    Si dans les 10 secondes qui suivent l'utilisateur appuie sur le bouton poussoir
    
    alors on recommence avec : 
    
    Attente 20 secondes
    
    Signal lumineux (led) + signal sonore (Buzzer) état HAUT pendant 5 secondes 
    
    Sinon 
    
    Electro-Aimant = 1
    
    Fin Si 
    
    Fin Tant que



    Voilà en gros comment le système fonctionne, on allume le gilet, il y a une attente de 20/40 secondes, le premier signal arrive, si l'utilisateur le valide en appuyant sur le bouton poussoir, alors on recommence 20 secondes d'attentes + signal tant qu'il appuie sur ce bouton poussoir dans le temps définie le cycle s'éxécute en boucle, sinon l'électri-aimant s'actionne. 

    Pour ce système j'utilise donc une carte ARDUINO UNO

    Avec comme composants : 

    - 1 led

    - 1 électro-aimant

    - un bouton poussoir 

    - un buzzer

    J'ai déjà programmé cela : 

    const int bouton = 2;
    const int electro = 13; 
    const int buzzer = 8;
    const int led = 12;
    
    void setup()
    {
      pinMode(buzzer, OUTPUT);
      pinMode(bouton, INPUT);
      pinMode(led, OUTPUT);
      pinMode(electro, OUTPUT);
    }
    
    void loop()
    {
      digitalWrite(bouton , LOW );
      digitalWrite(electro , LOW );
      digitalWrite(led , LOW );
      digitalWrite(buzzer , LOW );
      delay( 30000 );
      digitalWrite( 12 , HIGH );
      digitalWrite( 8 , HIGH );
      delay( 5000 );
      digitalWrite( 12 , LOW );
      digitalWrite( 8 , LOW );
      delay( 10000 );
      
       while (digitalRead(13) == LOW)
        {
      if (digitalRead(bouton) == HIGH)
      {
        
          delayMicroseconds( 10000 );
          digitalWrite( 12 , HIGH );
          digitalWrite( 8 , HIGH );
          delay( 5000 );
          digitalWrite( 12 , LOW );
          digitalWrite( 8 , LOW );
          delay( 10000 );
        }
    
      
      else
      {
        digitalWrite( 13 , HIGH );
        digitalWrite( 12 , LOW );
        digitalWrite( 8 , LOW );
      }
      }
    }
    
    

    Evidemment cela ne fonctionne pas comme je le veux puisque la fonction delay bloque tout.. 

    Donc plusieurs questions se posent, 

    Est-ce que je dois partir plutôt sur un TIMER ou un module RTC ?

    Si c'est un TIMER lequel faut-il utiliser et surtout comment l'adapter à mes conditions ?

    Même question pour si c'est un RTC ?

    Merci d'avance, 

    Cordialement, 

    Julian



    -
    Edité par Julian68200 26 janvier 2014 à 16:14:35

    • Partager sur Facebook
    • Partager sur Twitter
      26 janvier 2014 à 16:42:24

      La RTC c'est pas vraiment le but de ce genre de composant (qui est de donnée l'heure). Donc soit tu fais avec un timer, soit tu fais une boucle maline qui vérifie avec la fonction "millis()" le temps qui s'est écoulé...

      sinon un truc que je comprend pas. L'électro-aimant est une sortie, pourquoi donc tu le lit comme une entrée (ligne 28, while) ?

      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        26 janvier 2014 à 16:59:39

        D'accord merci c'est plus clair pour la RTC, mais j'ai essayé avec un timer et je ne comprends pas trop ni lequel choisir ni les différentes fonctions à utiliser dans mon programme, etant donné que je suis un pur novice dans ce domaine. 

        J'ai essayé avec ce timer, je ne sais pas si c'est une bonne solution ; http://playground.arduino.cc/code/timer1 

        Pour répondre à ta question, je vérifie "Tant que l'électro-aimant est à 0", il est effectivement branché sur la sortie 13, est ce que ma commande est fausse ?

        • Partager sur Facebook
        • Partager sur Twitter
          26 janvier 2014 à 17:01:18

          Julian68200 a écrit:

          Pour répondre à ta question, je vérifie "Tant que l'électro-aimant est à 0", il est effectivement branché sur la sortie 13, est ce que ma commande est fausse ?

          Bah c'est surtout que ca a pas de sens. Si c'est une sortie, pourquoi tu veux utiliser des fonctions pour regarder son état comme si c'était une entrée ?

          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            26 janvier 2014 à 17:11:58

            Ah oui effectivemment, cela n'a pas sens, je viens de comprendre
            • Partager sur Facebook
            • Partager sur Twitter
              26 janvier 2014 à 17:37:24

              Sinon quelqu'un s'y connait en timer et pourrait m'aider ?
              • Partager sur Facebook
              • Partager sur Twitter

              [Arduino UNO]-Besoin d'aide pour un programme

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown