votre aide pour la fonction millis

Bonjour, je sollicite votre aide pour la fonction millis malgré mes recherches et teste je ne m on sort pas
La platine est l Arduino uno
Pourquoi millis à cause de la fonction non bloquant
J’ai bien testé le blink avec millis qui fonctionne mais j’arrive à l’utiliser dans mon prog

Pour faire simple à chaque fois que j’active l’entrée 2 avec un 0 j’allume la sortie 13 pendant 5 secondes
Quand j’aurais réussi à faire ça je pourrais l’utiliser dans mon prog
Merci par avance

Bonjour,

Peux-tu nous donner ton code entre les balises Code

@+

Zoroastre.

Bonjour et merci pour votre aide j ai lu le site [Tutorial] Les interruptions temporelles avec Arduino | B@ttoMicro - Microcontrôleurs et compagnie !
mais je souhaite une simple tempo activer avec une entrée
bonne journée
/ Remplacer les delay en millis

const int entree2 = 2;
const int sortiee5 = 5;

void setup() {
// definir les broches en entrées
pinMode(entree2, INPUT); // entrée 2 pour sortie 17 arduino 1

// definir les broches en sorties
pinMode(sortiee5, OUTPUT); // Sortie 5 pour entrée 14 arduino 1

}

void loop() {
//////// Temporisation 1 ////////////
if (digitalRead(entree2)==HIGH){
delay (20000); // Temporisation de 20 secondes
digitalWrite(sortiee5, HIGH);
delay (20); // Pusl pour fin tempo
digitalWrite(sortiee5, LOW);
}

Bon alors :

Ton code fait ceci :

Attendre que l'entrée 2 soit à 5V, puis :

  • attendre 20 secondes
  • passer la sortie 5 à 5V pendant 20 millisecondes et la remettre à GND

En préambule, il manque à mon avis une initialisation de la valeur de la sortie 5 dans ton setup().
J'imagine que sa valeur par défaut est GNd donc il faudrait ajouter digitalWrite(sortiee5, LOW);

Si tu veux faire la même chose sans delay mais avec la fonction millis(), je te propose de commencer par définir les états de ton système.
Etat 0 : j'attends que l'entrée 2 soit à 5V
Etat 1 : je suis dans les 20 secondes d'attente
Etat 2 : je suis dans les 20 millisecondes d'attente

Ce qui pourrait donner :

const int entree2 = 2;
const int sortiee5 = 5;
 
void setup() {
 // definir les broches en  entrées
 pinMode(entree2, INPUT);     // entrée 2 pour sortie 17 arduino 1
 
 // definir les broches en  sorties
 pinMode(sortiee5, OUTPUT);       // Sortie 5 pour entrée 14 arduino 1
 digitalWrite(sortiee5, LOW);
}

int etat = 0;
unsigned long int chrono = 0;


void loop() {

if ((etat == 0) && (digitalRead(entree2) == HIGH)){
  etat = 1;
  chrono = millis();
}

if ((etat == 1) && ((millis() - chrono) > 20000){
  etat = 2;
  chrono = millis();
  digitalWrite(sortiee5, HIGH);
}

if ((etat == 2) && ((millis() - chrono) > 20){
  etat = 0;
  digitalWrite(sortiee5, LOW);
}

// et ensuite tu peux faire autre chose, mais en évitant l'instruction delay()
//....

Même exemple, mais en isolant la gestion de la sortie 5 dans une fonction dédiée :

const int entree2 = 2;
const int sortiee5 = 5;
 
void setup() {
 // definir les broches en  entrées
 pinMode(entree2, INPUT);     // entrée 2 pour sortie 17 arduino 1
 
 // definir les broches en  sorties
 pinMode(sortiee5, OUTPUT);       // Sortie 5 pour entrée 14 arduino 1
 digitalWrite(sortiee5, LOW);
}

void GestionSortiee5() {

  static int etat = 0;
  static unsigned long int chrono = 0;

  if ((etat == 0) && (digitalRead(entree2) == HIGH)){
    etat = 1;
    chrono = millis();
  }

  if ((etat == 1) && ((millis() - chrono) > 20000){
    etat = 2;
    chrono = millis();
    digitalWrite(sortiee5, HIGH);
  }

  if ((etat == 2) && ((millis() - chrono) > 20){
    etat = 0;
    digitalWrite(sortiee5, LOW);
  }
}


void loop() {

  GestionSortiee5();

// et ensuite tu peux faire autre chose, mais en évitant l'instruction delay()
//....

Merci ça marche je commence a comprendre la fonction millis
question comment faire pour intégrer le code dans une fenêtre comme tu le fais?
encore merci

michel5650:
question comment faire pour intégrer le code dans une fenêtre comme tu le fais?

Ben tu le mets simplement entre deux balises code
y a bouton pour ça dans la barre au-dessus de la zone de saisie