Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retard au déclenchement sous Arduino

    28 mai 2019 à 20:45:22

    Bonjour, je vais essayer de résumer mon projet de la manière la plus simple possible:

    J'ai un traceur GPS qui me bouffe la batterie de ma moto, après 1 semaine impossible de la redémarrer, du coup j'aurais voulu ajouter un petit arduino nano qui va tout simplement couper l'alimentation du traceur GPS si la moto n'est pas démarrée pendant 3 jours.

    Mon idée: Utiliser l'exemple Arduino "Button" et le modifier, car c'est très ressemblant:

    Ici notre "button" est remplacé par un signal d'après contact de la moto, et notre "LED" est le relais qui contrôle l'alimentation du traceur.

    J'en suis au prototypage avec une led et un bouton, donc par analogie:

    -Je démarre le contact, l'arduino reçoit l'info, le relais alimente le traceur.

    -Je coupe le contact, l'arduino ne reçoit plus l'info, il désactive le relais.

    Ensuite, j'ai ajouté un delay(60000) pour qu'il attente donc 60s avant de désactiver le relais.

    Mon problème se situe ici: Comme il est bloqué dans un delay, l'arduino va être "aveugle" pendant ces 60s, et donc si on réactive le contact de la moto, il ne réactive pas le relais avant la fin des 60s.

    J'aimerais donc qu'il puisse quitter ce delay immédiatement(en utilisant une autre fonction par exemple) et donc "annuler" cette attente si le contact est re-mis.

    Mon programme:

    const int buttonPin = 3;     // the number of the pushbutton pin
    const int ledPin =  13;      // the number of the LED pin
    
    // variables will change:
    int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      buttonState = digitalRead(buttonPin);
    
      // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
      if (buttonState == HIGH) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
      } else {
        // turn LED off:
        delay(60000);
        digitalWrite(ledPin, LOW);
      }
    }

    Merci à toute personne pouvant m'aider :)

    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2019 à 11:38:11

      Bonjour,

      je suis étonné sur le fait d'utiliser un circuit qui consomme un courant non négligeable pour couper un autre. Il m'aurait semblé plus pertinent d'employer un temporisateur : exemple https://sonelec-musique.com/electronique_bases_temporisateurs.html

      Maintenant si l'on revient à l'arduino, la fonction delay() n'est pas adaptée si l'on a besoin de faire autre chose pendant ce temps. On peut alors utiliser la fonction milli() qui va donner une valeur correspondant au temps écoulé depuis la mise sous tension. En appelant cette fonction régulièrement on peut alors calculer le temps passé depuis la première lecture.

      https://www.arduino.cc/reference/en/language/functions/time/millis/

      http://arlotto.univ-tln.fr/arduino/article/utilisez-correctement-la-fonction

      • Partager sur Facebook
      • Partager sur Twitter

      Retard au déclenchement sous Arduino

      × 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