Tableau pour gérer le ON/OFF de leds

Bonjour,

Je suis sur le protoypage d'un gestionnaire de niveau de pellets pour mon poêle à granulés.
Il y a des réalisations qui existent sur cette base technique: un capteur ultrason 'sonar'.
j'ai pris celui de Grove pour raisons pratique. l'idée est de mesurer la distance entre le couvercle et le sommet de la pile de granulés restant dessous. Ca c'est ok.

les 1ers essais ne sont pas mauvais mais j'ai un souci avec la gestion de 5 leds que je veux allumer ou éteindre en fonction du niveau de granulés dans le réservoir.

j'ai 5 leds sur D2,3...6 (chacune est de couleur différente (vert, bleue, jeune orange rouge)
si je suis dans une tranche de remplissage estimée à "100" toutes sont ON
si je suis dans une tranche estimée de remplissage à 75%, la verte sera OFF les autres ON et ainsi de suite jusqu'au rouge uniquement ON

Là, ca parait simple. et je veux passer par des tableaux.
voici les lignes d'initialisation

int pinLEDSniv[] = {2, 3, 4, 5, 6}; //pins D2 to D6 for level indicators leds (Green, Blue, Yellow, Orange, Red)
  // leds init output mode
  for (indexLeds = 0; indexLeds < 5; indexLeds++) {
    pinMode(pinLEDSniv[indexLeds], OUTPUT);
  }
char LEDSniv[] = {LOW, LOW, LOW, LOW, LOW}; // or bool ??

mais
lorsque je traite leur extinction /allumage avec par exemple:

    LEDSniv[0] = LOW; LEDSniv[1] = LOW; LEDSniv[2] = LOW; LEDSniv[3] = HIGH; LEDSniv[4] = HIGH;

la trace série ne remonte qu'une valeur VIDE
pour chaque entrées de LEDSniv ....

mauvais typage ??

merci

Bonjour elz064

Oui, int est mieux.

Cordialement
jpbbricole

Merci
j'ai trouvé une solution entre-temps.

uint8_t LEDSniv[] = {LOW, LOW, LOW, LOW, LOW};

et là tout passe nickel.

ça veut dire quoi concrètement une valeur VIDE ??

HIGH et LOW étant des #define, ce sont des int par défaut mais char aurait dû fonctionner (HIGH et LOW, c'est 1 et 0 donc ça rentre sans souci et l'affectation va donc fonctionner) ➜ ce n'est pas le problème réel.

Peut-être que le tableau était déclaré deux fois peut être et pas de manière globale et vous aviez un problème de scope ? comme on n'avait pas le code complet, on ne sait pas et votre "solution" n'en est peut-être pas une.

PS: pour faire propre vous pourriez déclarer les pins comme cela :

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

A mon avis J-M-L il a probablement appelé Serial.print(LEDSniv[x]);, ce qui pour un char n'affiche rien si LEDSniv[x] n'est pas un caractère imprimable :slight_smile:

effectivement, ce serait une bonne explication, il aurait fallu faire

Serial.print((int) LEDSniv[x]);

ou alors plus verbeux

Serial.print(LEDSniv[x] == LOW ? F("LOW") : F("HIGH"));

c'était ca je crois.

mais on peut clore le sujet.
Merci