Ajouter une temporisation avec la fonction millis sans delay

Bnjour à tous,

Voilà je souhaiterai ajouter une simple temporisation, exécutée qu'une fois, un retard disons, avec la fonction millis car je ne souhaite pas que cela influe sur la boucle, comment faire ?
J'ai bien essaye mais je n'arrive qu'a faire une temporisation en boucle (ex:blinkWithoutDelay) hors je souhaite que la tempo ne s’exécute qu'une fois sur commande d'un bouton poussoir par exemple.

ex: quand mon entrée (inter) est à 1, la sortie (led) ne s'allume qu'au bout de 3 secondes, quand mon entrée est à 0 , la sortie à zero sans temporisation.

Merci pour votre aide.

La lib SoftTimer du Barbu peut t'aider (une parmis d'autre) : http://arduino.cc/forum/index.php/topic,101814.0.html

Merci Barbudor, je vais plancher sur cela.

quand mon entrée (inter) est à 1, la sortie (led) ne s'allume qu'au bout de 3 secondes, quand mon entrée est à 0 , la sortie à zero sans temporisation.

Attention à la section critique : que doit-il se passer si l'interrupteur revient à 0 AVANT la fin des 3 secondes.
Ne pas oublier l'anti rebond : un interrupteur simplement relié à une pin d'Arduino va faire des oscillation 0/1 à chaque changement d'état avant d'avoir un état stable au bout de quelques millisecondes.

bien si l'inter reviens à zero, alors la tempo est interrompue et la sortie repasse à zero

Barbudor, la bibliothèque SoftTimer ne fonctionne pas avec mon IDE0023, impossible de compiler. =(

tu utilise encore le 023 ? peut-être qu'il serait temps de passer à plus récent, car la majorité des exemples et des librairies que tu trouvera ne compileront plus là dessus...

Il reste beaucoup d'exemples 0023 mais c'est surtout sans compter les bugs des vielles versions.
Il est temps de passer à la 1.0.1 (et même dans certains de mettre les MàJ de GitHub et de WinAVR)

bien en fait Barbudor je développe sur une plateforme ChipKitMax32 donc pas le choix d'utiliser le Mpide 0023.

Pour revenir à la temporisation, pourquoi le code suivant ne fonctionne pas :

unsigned long Time = millis();
if (Time-oldtime  > interval && inter == 1){
analogWrite ( sortie, 255)
oldtime=Time;
}

Même si le C définit des règles de priorité, je préfère m'encombrer l'esprit d'autres informations et mettre systématiquement des parenthèses.

Ton code est peut être exact mais celui-ci est franchement plus lisible et sans ambiguité d'interprétation :

if ( ((Time-oldtime) > interval) && (inter == 1) ){

Il faut que oldtime ET interval soit tous les deux des unsigned long comme Time et millis().
Dans ce cas ca devrait marcher.
Si tu mélanges des unsigned et des signed dans une même opération, tu cours à la catastrophe.

Ma lib n'a jamais été testée sur ChipKIt

PS: Pour éviter les erreurs d'interprétation, je suggère de systématiser [ChipKitMax32] (ou autre forme) dans le titre d'un topic si la plateforme n'est pas une Arduino standard.

Bonjour,

Tu va avoir du mal à compiler la librairie de barbudor sur une carte chipkit :wink:
Il faudrait la reprendre de zéro pour la porter sur PIC32.

En l'état elle ne compilera pas car :

  • le registre SREG (statut cpu) n'existe pas sur PIC32 (il porte un autre nom)
  • l'includes <avr/interrupts.h> on un autre non sur chipkit (<plib.h>)
  • pas sûr que le portage chipkit est gardé les même nom pour les librairies arduino interne (à vérifier)

oui en fait j'ai décidé de développer sur chiptkit car mon programme au final sera assez lourd (thermoucple,tachymetre,asservissement de la vitesse, ....), la vitesse d'horloge étant beaucoup plus rapide que sur l'Arduino, mais vu la sortie de la Mega 2560, je pense que je vais passé sur cette plateforme, ce sera plus simple pour moi.

Mike74:
oui en fait j'ai décidé de développer sur chiptkit car mon programme au final sera assez lourd (thermoucple,tachymetre,asservissement de la vitesse, ....), la vitesse d'horloge étant beaucoup plus rapide que sur l'Arduino, mais vu la sortie de la Mega 2560, je pense que je vais passé sur cette plateforme, ce sera plus simple pour moi.

Mega2560 ou Due ? C'est la Due qui vient de sortir.

Croire que ce sera plus simple est une erreur, pour le moment le software est en beta, comme avec la chipkit.
Du fait qu'il s'agit d'une carte officielle il y aura surement plus de support / aide que pour la chipkit (quoi que ... à voir).

Il faut bien se rappeler que la Due (comme la Chipkit) n'utilise pas le même CPU qu'une carte arduino classique.
Donc toute les librairies un peu poussé doivent être reprise et porté pour le nouveau CPU.

non je parlais de la Mega 2560 Rev3 et je pensais que le software 1.0.1 était compatible, merci pour l'info, donc je vais resté sur ChipKitmax32 alors.

L'IDE 1.0.1 doit bien être compatible avec la Mega, rev3 ou pas.
Le rev ne concerne que le hardware sans problème de compatibilité.

Mike74:
non je parlais de la Mega 2560 Rev3 et je pensais que le software 1.0.1 était compatible, merci pour l'info, donc je vais resté sur ChipKitmax32 alors.

Ok, si tu parle de la mega2560 ça fait déjà un bon moment qu'elle est sorti :wink:

L'ide 1.0.1 est 100% compatible avec la mega2560, de même que la plupart des librairies existante.
Niveau CPU la mega2560 à un ATmega comme les arduino classique, par contre niveau puissance c'est la même chose qu'une carte classique.
(juste des broches en plus et une mémoire plus grande)