Pour un projet en arduino , j'ai besoin de faire une tempo , en gros elle doit faire allumer une led pendant un certain temps (n_minutes), faire une action pendant ce temps et 'eteindre juste après.
Donc j'ai essayé de faire avec millis afin d'avoir plusieurs action en simultané sauf que j'ai du mal a comprendre comment utiliser millis en pratique.
Le programme fait (pour faire simple) : si T_actuel - T_ancien > n_minutes alors faire...
J'ai déclaré : int temps_ancien = millis(); et int temps_select = 0;
Seulement dans mon programme j'ai l'impression que c'est confus car j'ai l'impression que l'on fait millis() - millis() (temps_actuel - t_ancien):
Si quelqu'un pourrait eventuellement m'eclaircir svp :)
#define DELAY 60000
unsigned long start_time=millis();
digitalWrite(LED_TEST,HIGH);
while(millis()-start_time < DELAY) {
// des actions
}
digitalWrite(LED_TEST,LOW);
- Edité par edgarjacobs 5 mai 2019 à 19:02:23
Bonjour , j'ai retravailler sur le prog en faisant l'essaie direct sur une carte mais le problème est que , la tempo s'ctive bien mais ne s'arrete pas et je ne comprends pas
int led = 13;
int temps_ancien = 0;
unsigned long temps_select = 0;
int tempo;
void setup() {
// put your setup code here, to run once:
pinMode(led , OUTPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
temps_select = 30000;
tempo = millis() - temps_ancien;
if (temps_select == 30000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
{
tempo = millis() - temps_ancien;
digitalWrite(led,HIGH);
while(tempo > 30000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
{
Serial.println("***** je suis là pendant 30s*****");
}
digitalWrite(led,LOW);
}
};
C'est bien ça le problème. Si tu entres dans le while(), tu n'en sors plus. Exemple
int a=10;
while(a>5) {
puts("je suis dans le while");
}
puts("j'ai quitté le while");
tu n'atteindras jamais la ligne 6
Par contre, ici
int a=10;
while(a>5) {
puts("je suis dans le while");
a--;
}
puts("j'ai quitté le while");
tu sortiras de la boucle
- Edité par edgarjacobs il y a 11 minutes
temps_select = 30000;
tempo = millis() - temps_ancien;
if (temps_select == 30000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
{
tempo = millis() - temps_ancien;
digitalWrite(led,HIGH);
while(tempo < 30000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
{
Serial.println("***** je suis là pendant 30s*****");
tempo--;
}
digitalWrite(led,LOW);
}
Ca ne fonctionne toujours pas je suis tjrs bloqué dans la boucle
Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.
- Edité par edgarjacobs 13 mai 2019 à 19:34:40
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.
- Edité par edgarjacobs il y a 17 minutes
Mais alors pourquoi "tempo++ " ? En quoi ça nous fait sortir de la boucle while ?
Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.
- Edité par edgarjacobs il y a 17 minutes
Mais alors pourquoi "tempo++ " ? En quoi ça nous fait sortir de la boucle while ?
Le tempo++ n'est là que pour corriger ton code, car tu t'es contenté de reprendre mon exemple. Ce n'est pas la solution à ton problème, que je t'ai donné dans mon 1er post.
Où en sont tes connaissances en programmation ? As-tu seulement déjà écrit un programme, autre chose que "Hello world" ?
- Edité par edgarjacobs 13 mai 2019 à 22:37:11
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.
- Edité par edgarjacobs il y a 17 minutes
Mais alors pourquoi "tempo++ " ? En quoi ça nous fait sortir de la boucle while ?
Le tempo++ n'est là que pour corriger ton code, car tu t'es contenté de reprendre mon exemple. Ce n'est pas la solution à ton problème, que je t'ai donné dans mon 1er post.
Où en sont tes connaissances en programmation ? As-tu seulement déjà écrit un programme, autre chose que "Hello world" ?
- Edité par edgarjacobs 13 mai 2019 à 22:37:11
Yep ahah , j'ai vu ça. j'ai essayé en efffet "tempo ++;": inutile lol
Bon du coup j'ai essayé de mettre un else mais le problème persiste.
Je ne sais pa comment sortir de la boucle
if (temps_select == 10000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
{
tempo = millis() - temps_ancien;
digitalWrite(led,HIGH);
while(tempo <= 10000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
{
Serial.println("***** je suis là pendant 10s");
}
}
else {
digitalWrite(led,LOW);
Serial.println("C'est terminé");
delay(1000);
}
Probleme tempo 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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent