Zyaxi
July 12, 2015, 1:45pm
#1
Bonjour à tous,
Je suis novice en programmation pour Arduino et j'aimerais savoir comment faire une boucle qui se répète par exemple 5 secondes et qui ne se répète plus par la suite. J'avais pensé à utiliser millis() mais après plusieurs essais, j'ai abandonné
Pouvez-vous m'aider à trouver une solution pour ce petit problème de boucle?
Merci d'avance
JMe87
July 12, 2015, 2:29pm
#2
Bonjour,
C'est effectivement la fonction millis qu'il faut utiliser pour arriver au resultat que tu cherches.
Postes ici ton code (entre balises codes) qui ne fonctionne pas et on t'aidera a solutionner ton probleme.
Jacques
Zyaxi
July 12, 2015, 2:57pm
#3
voila le code http://puu.sh/iWqIF/70614c1b07.png
merci pour ta réponse rapide
dfgh
July 13, 2015, 3:37pm
#5
hello,je pense que tu n’as pas trouvé comment poster ton prg
n’attends pas d’en avoir besoin pour regarder comment fonctionne le forum
je suis allé voir l’image de ton code et en en respectant “l’esprit” ca donne le code qui suit
c’est la led 13 qui clignote sur la platine UNO
tu peux aussi voir ce qui se passe sur ton moniteur en 57600 bauds
int led = 13;
unsigned long tps = 0;
unsigned long temps_courant = 0;
unsigned temps_precedent = 0;
boolean etat_led = true;
void setup()
{
Serial.begin(57600);
pinMode(led, OUTPUT);
digitalWrite(led, etat_led);
tps = millis();
Serial.print(" tps = "); Serial.println( tps);
temps_precedent = tps;
while ((millis() - tps) < 5000)
{
if ((millis() - temps_precedent) > 1000)
{ Serial.print("milli - temps precedent = "); Serial.println((millis() - temps_precedent));
temps_precedent = millis();
etat_led = !etat_led;
digitalWrite(led, etat_led);
Serial.print("etat_led = "); Serial.println( etat_led);
}
}
}
void loop()
{
while(1){}
}
guix
July 13, 2015, 3:53pm
#6
Il suffit de comparer la valeur de millis() à laquelle on soustrait une valeur précédente.
Exemple:
void setup()
{
Serial.begin( 9600 );
}
void loop()
{
uint32_t currentTime = millis();
static uint32_t previousTime = currentTime;
if ( currentTime - previousTime <= 5000 )
{
Serial.println( currentTime );
}
}
Quand tu veux répéter cette “boucle”, il suffit d’assigner la valeur de currentTime à previousTime:
previousTime = currentTime;
Exemple pour exécuter du code pendant 5 secondes, toutes les 10 secondes:
void setup()
{
Serial.begin( 9600 );
}
void loop()
{
uint32_t currentTime = millis();
static uint32_t previousTime = currentTime;
uint32_t deltaTime = currentTime - previousTime;
if ( deltaTime <= 5000 )
{
Serial.println( currentTime );
}
else if ( deltaTime >= 10000 )
{
previousTime = currentTime;
}
}