Go Down

Topic: Que pensez-vous de cette double temporisation ? (Read 197 times) previous topic - next topic

Telecomm

Bonjour,
J'ai besoin de vos conseils. J'aimerai faire une double Temporisation.
La première tempo où l'on peut régler le temps « OFF » (de 0s à 5s) et « ON » (de 0s à 5s) en changeant les paramètres de programmation.
La deuxième tempo avec la fonction aléatoire « OFF »  et  « ON »
Ces deux tempos doivent fonctionner en même temps.
J'ai pensé au deux programmations  suivantes ci-jointe avec la fonction « millis » pour ne pas avoir d'arrêt du système, mais je ne sais pas comment les réunir dans un même programme.
Pour la première temporisation :
const int ledpin = 10;   // n° de la led verte de la carte
unsigned long mtemps=0;  // mémorisation du temps
unsigned int on=3500; // déffinit le temps d'allumage de la led
unsigned int off=200; // déffinit le temps d'extinction de la led, pour faire 1s l'addition de "on" et de "off" doit faire 1000.
boolean s=true; // état de la sortie
void setup() {
pinMode(ledpin, OUTPUT); // la broche "13" est une sortie
}
void loop() {
   
   unsigned long temps = millis(); // lecture du temps système, utiliser une variable comme "temps" permet de l'utiliser pour d'autres action dans le programme
     if ( temps >= mtemps )  // si le temps est écoulé
     {
       digitalWrite( ledpin , s ); // allume la led selon l'état du bit "s"
       if ( s ) mtemps = mtemps + on; else mtemps = mtemps + off; // mémorise le temps + la valeur de "on" ou de "off" suivant l'état de "s"
       s=!s;        // inverse l'état de "s" de "true" passe à "false" ou de "false" à "true"
     }
   
}
Pour la deuxième temporisation :
1.   unsigned long dateDernierChangement = 0;
2.   unsigned long delaiAleatoire;
3.   
4.   void setup() {
5.     pinMode(13, OUTPUT);
6.     delaiAleatoire = random(500, 3000);
7.   }
8.   
9.   void loop() {
10.     unsigned long dateCourante = millis();
11.     if (dateCourante - dateDernierChangement > delaiAleatoire) {
12.       dateDernierChangement = dateCourante;
13.       delaiAleatoire = random(500, 3000);
14.       digitalWrite(13, ! digitalRead(13));
15.     }
16.   }

Telecomm

Personne ne peut me donner une première orientation SVP? merci

icare

Bonjour,
Je pense que la première chose à faire est de lire les messages épinglés.
Tu devrais regardé (réfléchir) ce qui se passe si tu rassembles tes deux setup dans un seul et même setup puis tu fais le même traitement pour le loop.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 16.04 LTS

Telecomm


Go Up