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);
}
}
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.
× 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.