Changement d'intensité en fonction du programme.

Bonjour,

Je suis en train de faire un chenillard avec ma carte Arduino Uno.
Mon chenillard contient 16 Leds, donc j'utilise un démultiplexeur 4514 ( 4 entrée pour 16 sorties).

Dans un premier temps pour tester mon système j'ai attribué manuellement les valeurs au entrées du 4514:

void loop()
{
  digitalWrite(inhibPin6, LOW);
  
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  delay(500);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  delay(500);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  delay(500);
    digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  delay(500);
    digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, LOW);
  delay(500);
    digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, LOW);
  delay(500);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, LOW);
  delay(500);
...

Ok super avec ça j'ai un beau chenillard!

Je veux améliorer mon code maintenant:

const int LED[4]={2,3,4,5};
int compteur=0;

void setup()
{
  for (int i=0; i<=3; i++)
  {
    pinMode(LED[i], OUTPUT);
  }
}

void loop()
{
  for (int i=0; i<=3; i++)
  {
    digitalWrite(LED[i], bitRead(compteur,i));
  }

compteur=compteur+1;  
if (compteur>=15) compteur=0;
delay(1000);
}

Avec ce code, le chenillard se fait, mais je n'ai plus d'intensité lumineuse sur mes leds...
Savez vous pourquoi ce phénomène se produit ?
(J'alimente le 4514 par la sortie 5V de l'arduino)

Merci !

Bonjour,

Tu doit mettre un délai dans ta boucle, sinon tu allumes toute tes led quasi instantanément puis tu attend sur la dernière.

Au passage tu peut faire quelques améliorations :wink:

const byte LED_PIN[4] = {2, 3, 4, 5};

void setup() {
  for (byte i = 0; i < 4; ++i) {
    pinMode(LED_PIN[i], OUTPUT);
  }
}

void loop() {
  static byte compteur = 0;

  for (byte i = 0; i < 4; ++i) {
    digitalWrite(LED_PIN[i], bitRead(compteur, i));
    delay(1000);
  }

  ++compteur;
  compteur &= 0x0F; // -> compteur forcément compris en 0 et 15
}

Merci beaucoup pour ton aide et amélioration !! :slight_smile:

J'avais surtout oublié de configurer ma sortie qui contrôle l'inhibiteur de mon démultiplexeur...

Encore merci et problème résolu.

MrPoulet:
J'avais surtout oublié de configurer ma sortie qui contrôle l'inhibiteur de mon démultiplexeur...

Ya aussi ça qui peut poser problème effectivement :grin: