Go Down

Topic: Décalage du temps millis() (Read 603 times) previous topic - next topic

_pepe_

Je précise quand même que ton problème ne vient pas de là, mais de l'extérieur du code fourni.

tynnor


tynnor

Bonsoir,
J'ai essayé d'isoler petit à petit mon code, jusque finalement garder seulement la fonction que je vous ai envoyé...et j'ai toujours le même problème.
J'ai essayé de faire le même code dans un nouveau projet et je n'ai pas de soucis.
Que faire ?

infobarquee

que faire?
montrer ton code entier pour trouver ce qui ne va pas ;)

tynnor

#19
Apr 07, 2015, 09:08 pm Last Edit: Apr 07, 2015, 09:09 pm by tynnor
Vous êtes bien courageux !  :-[
J'ai l'habitude de me débrouiller seul mais là j'avoue que je sèche bien
Voici en pièce jointe la totalité de mon projet

Merci à vous ! :)

infobarquee

#20
Apr 07, 2015, 09:28 pm Last Edit: Apr 07, 2015, 09:30 pm by infobarquee
déjà, tu as un   delay(2000); dans le loop
donc 30mn pourrait correspondre à ton erreur ;)
après, j'ai pas décortiqué les libs avec les timers pour vérifier.

attends, tu utilise en plus un rtc?

tynnor

#21
Apr 07, 2015, 09:37 pm Last Edit: Apr 07, 2015, 09:41 pm by tynnor
Non mais le delay dans le loop c'était juste pour mettre au point le capteur DHT, je venais de le mettre :p Ce n'est pas ça le problème (quand même^^')
Il faut un certain temps pour que le capteur puisse lire les données. Il faut que je modifie les fonctions qui récupèrent les mesures afin de gérer ça
Heu oui j'utilise un rtc, le ds1307

Artouste

#22
Apr 07, 2015, 09:56 pm Last Edit: Apr 07, 2015, 10:08 pm by Artouste
Bonsoir
ton programme principal fait un init de serial , mais ne l'utilise pas
ajoute simplement une sortie serial "durée theorique"  sur un  test basé sur millis() :    temps present - temps "ancien" toutes les 20 secondes (ou autre durée assez conséquente)
tu va vite voir si la derive est significative , et si elle l'est :smiley-cool:  , tu pourra pister le perturbateur

B@tto

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

tynnor

Bonjour,
C'est un arduino Uno

bricoleau

#25
Apr 08, 2015, 01:28 pm Last Edit: Apr 08, 2015, 01:29 pm by bricoleau
Je suggère de commencer par vérifier qu'il n'y a pas un "loup" entre ta procédure de compil/téléversement et l'arduino destinataire.

En utilisant exactement la même procédure de compil/téléversement et le même matos, que donne le programme ci-dessous ?

Code: [Select]
void setup()
{
  uint32_t chrono;

  Serial.begin(9600);
  Serial.println('debut chrono');
  delay(30000L);
  Serial.println('30 secondes');
  chrono = millis();
  while (millis() - chrono < 30000L);
  Serial.println('30 secondes de plus');
}

void loop()
{
}

tynnor

#26
Apr 08, 2015, 01:34 pm Last Edit: Apr 08, 2015, 01:39 pm by tynnor
Je crois que je sais...Le problème n'est pas plus loin que sous mon nez, dans la premièer fonction que je vous ai envoyé
Dans cette fonction, je fais une impulsion sur une pin pour activer un monostable. Quand le monostable détecte l'impulsion, sa sortie est à l'état haut pendant environ 11 secondes. Mais en attendant le timer lui continue de compter. Ce qui fait qu'au final il y a seulement 30 - 11 secondes, soit les fameuses 18 secondes d'attente !

Donc voilà :p

tynnor

Je suggère de commencer par vérifier qu'il n'y a pas un "loup" entre ta procédure de compil/téléversement et l'arduino destinataire.

En utilisant exactement la même procédure de compil/téléversement et le même matos, que donne le programme ci-dessous ?

Code: [Select]
void setup()
{
  uint32_t chrono;

  Serial.begin(9600);
  Serial.println('debut chrono');
  delay(30000L);
  Serial.println('30 secondes');
  chrono = millis();
  while (millis() - chrono < 30000L);
  Serial.println('30 secondes de plus');
}

void loop()
{
}

Merci de m'apporter votre aide
J'avais déjà essayé cette vérification

tynnor

#28
Apr 08, 2015, 01:43 pm Last Edit: Apr 08, 2015, 01:44 pm by tynnor
Il n'y avait tout simplement pas de problème !

Go Up