Faire clignoter des Leds à des fréquences différentes ou Synchro

Portrait de brossden

Le problème avec la commande delay(x); c'est que temps que le délais x millisecondes n'est pas écoulé le processeur reste sur cette commande et donc rien d'autre ne s'exécute.

Dans le code qui suit deux leds blanche et bleu clignotent en opposition tandis que trois autres clignoteront ou non selon la valeur envoyée sur le port série !

En entrant au clavier dans la console série des "o" pour oui ou des "n" pour non on selectionne la ou les leds qui doivent clignoter en synchro toutes les secondes.

exemple : "ono" fera clignoter la première et la troisième de ces leds

"onn" fera clignoter uniquement la première de ces leds

"noo" fera clignoter la deuxième et la troisième de ces leds et ainsi de suite le tout de manière synchro entre elles !

Pour ce faire le booléen Synchro varie de HIGH (1) à LOW (0) toute les 500 ms

Un message de 3 caractères est transmis par le port série.
Chaque caractère correspond à une led et lorsque celui ci est 'o' en minuscule, la led est HIGH ou LOW par l'intermédiaire du booléen Synchro !

Une petite vidéo

Et le code :

int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
bool Synchro;
double Time1;
double Time2;
double Time3;
double Time4;
char Byte;
String Txt;
String TXT;

void setup() {
  for (int n = 3; n < 8; n++) { // Boucle pour de n =3 à n inférieur à 8, à chaque boucle ajoute 1 a n
    pinMode(n, OUTPUT); //déclare succéssivement les pins de 1 à 7 comme des sorties
    digitalWrite(n, HIGH);
  }// retour à la ligne "for" si n = 8 sort de cette boucle !
  Time1 = millis() + 250;
  Time2 = millis() + 500;
  Time3 = millis() + 500;
  Time4 = millis() + 1000;
  Serial.begin(230400);
}

void loop() {
  Display();
  if (millis() >= Time1) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    Time1 = millis() + 500;
  }
  if (millis() >= Time2) {
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    Time2 = millis() + 500;
  }
  if (millis() >= Time3) {
    Synchro = HIGH;
    Time3 = millis() + 1000;
  }
  if (millis() >= Time4) {
    Synchro = LOW;
    Time4 = millis() + 1000;
  }
  Txt = "";
  //Serial.println(Synchro);

  while (Serial.available() > 0) {

    Byte = Serial.read();
    Txt = Txt + Byte;
  }
}
void Display() {
  if (Txt != "") {
    TXT = Txt;
  }
  if (TXT.charAt(0) == 'o')
    digitalWrite(5, Synchro);
  else
    digitalWrite(5, HIGH);

  if (TXT.charAt(1) == 'o')
    digitalWrite(6, Synchro);
  else
    digitalWrite(6, HIGH);
  if (TXT.charAt(2) == 'o')
    digitalWrite(7, Synchro);
  else
    digitalWrite(7, HIGH);
}

Portrait de meuh

bonjour a tous , tiens encore un tuto qui m intéresse mais je n ai pas le temps en ce moment mais je compte bien l essayer a la rentrée donc encore merci a brossden pour ces nombreuses contributions.

A bientôt

Portrait de SPY

Oui interssant !

Portrait de brossden

De rien c'est un plaisir ! Comment vont les thaïlandais(es)  ?