Comptage de temps

Bonjour à tous...
Comment compter le temps entre deux impulsions ? j'ai essayé pulseIn mais cela ne semle pas aller pour ce que je veux, enfin voudrais, faire...
Je vous explique ...
Je desire automatiser la vitesse de la VMC dans mes toilettes !
Quand la lumière n'est allumée que moins de 90 s ( PIPI), pas besoin d'allumer la VMC a fond... e, revanche lorsque le temps d'allumage de la lumière est >90s ( CACA !!) et bien là, j'actionne un relai pendant 10 minutes.
Je pensais que ça allait etre simple mais ... pas pour un débutant visiblement !
Je pense utiliser un mini Pro pour ça, c'est suffisant.
J'ai également un detecteur de luminosité comme celui ci
Merci et bon weekend

bonjour,
fonction millis

top_depart = millis(()
si millis() - top_depart < 90s rien faire
si millis() - top_depart > 90s allume_vmc_par_ce_que_ca_risque_de_puer :slight_smile:

Moyennement utile un détecteur de luminosité comme ça: autant se contenter d'une photoresistance reliée à un pin analogique, c'est bien plus simple à monter, plus compact, plus libre...
Et pour ton projet, un ATtiny serait encore plus économique!

Et gaffe à la fonction millis pour faire ce genre de chose, ça va marcher environ 41 jours, et après la valeur "long" rollover. Donc si tu ne comptes pas couper le jus manuellement au moins une fois par mois, prévois un reset automatique avant l'overflow.

Benn:
gaffe à la fonction millis pour faire ce genre de chose,

Ben oui, mais sinon, comment faire ?

tu peux très bien allumer le nono que lorsque la lumière est allumée, sauf si tu as une baie vitrée dans les wc :slight_smile:

ben non, pas de baie vitrée ;D
j'aurais pu mettre l'arduino sous tension en même temps que l'allumage de l’éclairage mais je pense aussi a faire varier ma vitesse de VMC en fonction de hygrométrie ...donc pas possible !
je comprends pas pourquoi le PulseIn ne fonctionne pas... j'ai testé, j'ai toujours des valeurs très aléatoires ....

int broche = 9; // variable de broche

unsigned long duree; // variable utilisée pour stocker la durée

void setup()
{
pinMode(broche, INPUT); // met la broche en entrée
pinMode(13, OUTPUT );
Serial.begin(9600);

}

void loop()
{
duree = pulseIn(broche, HIGH); // met la durée de l'impulsion de niveau HAUT dans la variable duree
Serial.println(duree);
if (duree > 10000) {
digitalWrite (13, HIGH);
digitalWrite(13, LOW);
}
}

nota:
if value is HIGH, pulseIn() waits for the pin to go HIGH
re nota:
pulseIn est en microsecondes, donc 10000= 10milli

if (duree > 10000) {

et là, tu mets en marche et tu éteinds pour un laps de temps de quelques nano ou microsecondes

 digitalWrite (13, HIGH);          
 digitalWrite(13, LOW);
  }

merci mais je pense avoir trouvé mon problème !
avec l'instruction pulseIn(pin, value, timeout) on donne à timeout une fenetre de temps pendant laquelle il y a scrutation pour les changements d'etat. Quand on ne précise pas de valeur pour timeout, par defaut c'est 1 s ..... j'ai ouvert ma fenêtre à 90000000 (90 s) et là : tout fonctionne
Finit donc les mauvaises odeurs !! :slight_smile:
merci à tous

phil77560:
Ben oui, mais sinon, comment faire ?

millis est une bonne methode, seulement pense a reseter quand ca arrive au bout:

pulldown le pin reset avec une resistance (ce que tu veux), et relie le a un pin digital.
quand la valeur de millis arrive au bout, passe le pin en HIGH pour reseter le system.

et faire varier la vitesse en fonction de l'hygrometrie... dans les toilettes?? Je ne suis pas certain que l'hygro change a chaque chasse :smiley:

Benn:
millis est une bonne methode, seulement pense a reseter quand ca arrive au bout:

pulldown le pin reset avec une resistance (ce que tu veux), et relie le a un pin digital.
quand la valeur de millis arrive au bout, passe le pin en HIGH pour reseter le system.

Bonjour,
Ça m'intéresse aussi :slight_smile:
Quelle condition il faut inscrire pour le reset ?

if ( millis() == ???) ...

Le rollover au bout d'une quarantaine de jour n'est pas un problème. Sauf s'il veut laisser les toilettes allumées plus de 40 jours.
Pour assurer la gestion du rollover il suffit de mettre dans la condition:

millis()-temps_de_depart > hors-temps

le résultat est bon même si le rollover se produit pendant la période de temps considérée.

J'ai utilise cette methode et pourtant ca merde au bout de 40 jours chez moi... j'ai du me planter quelque part :sweat_smile:

J'ai utilise cette methode et pourtant ca merde au bout de 40 jours chez moi..

Tu l'utilise aussi pour des toilettes c'est peut-être normal !

La fonction millis() n'est pas un sanctuaire, elle peut se modifier ou s'utiliser "hors des sentiers battus".
Un rapide coup d'oeil et je vois (dans le fichier wiring.c) la ligne suivante :
timer0_overflow_count++
Je ne sais pas où cette variable est définie mais soit une surveillance de sa valeur soit carrément une raz (pour ceux qui ne parlent plus qu'en anglais "raz" c'est la version française de reset : raz = remise à zéro) au bon moment résoudra la question.

Benn:
et faire varier la vitesse en fonction de l'hygrometrie... dans les toilettes?? Je ne suis pas certain que l'hygro change a chaque chasse :smiley:

Lol....non pas dans les toilettes ... dans la salle de bain et ou cuisine ...

je suis en train de faire un projet un peut similaire au tien
je n'utilise surtout pas Delay() car il bloque tous les autres processus mais j'utilise millis()

à toi de voir ce qui t’intéresse dedans que tu peut réutiliser... voir ici

a noter qu'en ce moment je suis en train d'y connecter une RTC avec sd card pour y faire mes propres sats
(et accessoirement prouver que ma femme y passe 3 à 4 x plus de temps que moi...) :smiling_imp:

Nicolasb29:
a noter qu'en ce moment je suis en train d'y connecter une RTC avec sd card pour y faire mes propres sats
(et accessoirement prouver que ma femme y passe 3 à 4 x plus de temps que moi...) :smiling_imp:

NON ?.... trop fort ... :smiley: .... j'adore le concept et pourquoi ne pas mettre une fourche optique sur le devidoire de papier toilette pour voir qui en consomme le plus ? :slight_smile: