Ce tone me laisse sans voix. (Débutant)

Bonjour à tous.

J’ai récupéré sur le net un programme qui fait varier 10 led avec un potar.
Cela fonctionne parfaitement.
Je désirerais le modifier.
Je voudrais qu’à chaque led qui s’allume un son différent retentisse.
Quand je mets une note sur la led N° 1 et pas les autres, cela fonctionne bien la note est pure.
Quand je mets une note sur le led N° 1 et 2, j’ai l’impression que les notes ce mélange.
et ainsi de suite.
Le problème ce situe en fin de programme, la partie que j’ai rajouté.

Autre petit souci, celui-ci je pense d’ordre électronique, quand je tourne le potar à fond toutes les led s’allume, mais la derniere ( la N° 10) clignote et dans le moniteur série ça s"affiche 9 et 10 sans arrêt.

Merci d’avance de votre aide.

// Bargraphe sur 10 led.
// Je le branche Sur ma Nano et mon module de 10 led.
// Vérifier l'afichage sur le moniteur série.
// these constants won't change:
const int analogPin = A0;   // the pin that the potentiometer is attached to
const int ledCount = 10;    // the number of LEDs in the bar graph

int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};   // an array of pin numbers to which LEDs are attached
int gnd=12;
int HP=13;

void setup() {
    pinMode(HP,OUTPUT);
  // loop over the pin array and set them all to output:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
    pinMode(gnd,OUTPUT);
    Serial.begin(9600);
  }
}

void loop() {
  // read the potentiometer:
  
  int sensorReading = analogRead(analogPin);
  // map the result to a range from 0 to the number of LEDs:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
  Serial.println(ledLevel);
  // loop over the LED array:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // if the array element's index is less than ledLevel,
    // turn the pin for this element on:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    }
    // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW);
    }
  }
  if (ledLevel==0){noTone(HP);}
  
  if (ledLevel==1){tone(HP,1000);}
  else {noTone (HP);}
  
  if (ledLevel==2){tone(HP,15000);}
  else {noTone (HP);}
  
  if (ledLevel==3){tone(HP,2000);}
  else {noTone (HP);}
  
  if (ledLevel==4){tone(HP,2500);}
  else {noTone (HP);}
 }

Bonsoir avec quoi émet tu le son ? merci

Bonsoir.

Le son est émis par un petit H.P.
Quant je programme qu'une seule note en mettant des // sur le autres lignes de programme le son est impec, mais quand je veux faire une changement de ton sur chaque niveau, il y a une perturbation, on dirait que ça ne sélectionne pas la bonne fréquence.

Cordialement.

Bonsoir - vous avez combien de LEDs?
Que pensez vous que tous les else {noTone (HP);} fassent au code dans la boucle ?
Combien de fois pensez vous qu'il est nécessaire d'appeler Serial.begin(9600);?

(Et Attention à comment le HP est branché pour ne pas griller des pins de votre arduino...)

Bonjour.

Merci de m’aiguiller sur cette affaire.
J’ai 10 LEDs. J e n’en ai affiché que 4 dans le programme, les 10 seront misent quand j’aurais compris d’ou vient mon erreur.
Si je comprend bien tous mes else {noTone (HP);} sont en trop.

Merci beaucoup pour le lien sur le HP, je l’avais branché direct OUPPSS !!!

Cordialement.

balisto56:
Si je comprend bien tous mes else {noTone (HP);} sont en trop.

pas tout à fait, dans l'absolu il en faudrait un seul - au cas ou... (impossible si le nombre de choix possible est totalement couvert lors du map)

Tel que c'est écrit, imaginons que la valeur c'est 2, le premier test ne fait rien, le second n'est pas vrai donc vous appelez noTone(), puis vous arrivez sur

 if (ledLevel==2){tone(HP,15000);}
  else {noTone (HP);}

--> super vous avez trouvé la valeur 2 et vous lancez donc votre tonalité à 15kHz (c'est bcp pour l'oreille humaine je suppose que vous vouliez mettre 1500) mais tout de suite après vous avez un nouveau test qui dit

    if (ledLevel==3){tone(HP,2000);}
  else {noTone (HP);}

comme le niveau n'est pas 3 mais 2, vous arrêtez immédiatement le son par l'exécution du else et donc vous n'entendez rien.

vous pourriez imbriquer vos if - else de manière à ne pas tester chaque valeur une fois que vous avez trouvé la bonne du genre

if (valeur == 0) {action pour 0}
else
if (valeur == 1) {action pour 1}
else
if (valeur == 2) {action pour 2}
else
if (valeur == 3) { action pour 3}
else
....

mais ce n'est pas la façon la plus lisible de faire ce genre de chose: vous devriez étudier un outil bien pratique pour le programmeur le switch/case.

Bonjour.

Merci infiniment pour votre aide et surtout pour la pédagogie utilisé.
Je vais étudier cette nouvelle fonction (pour moi) et la mettre en pratique.
C'est sympa de vous avoir penché sur mon problème et de me donner la solution.

Cordialement.