problème dans le montage ou dans le Code ARDUINO

#define sortie 13 //Element ampli sur broche 13
#define duree 500 //Duree du son
#define tonePause 800 //Longueur de la pause entre les sons
int DO=11, RE=10,MI=8,FA=7,SO=5,LA=4,SI=2;
int tones[] = {262, 294, 330, 349,392, 440, 493};
int elements = sizeof(tones) / sizeof(tones[0]);
void setup(){
noTone (sortie); //Rendre le piezo muet
pinMode(DO,INPUT);pinMode(RE,INPUT);pinMode(MI,INPUT);pinMode(FA,INPUT);pinMode(SO,INPUT);
pinMode(LA,INPUT);pinMode(SI,INPUT);
pinMode(sortie,OUTPUT);
}
void loop(){
  if(digitalRead(DO)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[0],duree);
      delay(tonePause);
    }while(digitalRead(DO)==HIGH);
  }
  if(digitalRead(RE)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[1],duree);
      delay(tonePause);
    }while(digitalRead(RE));
  }
  if(digitalRead(MI)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[2],duree);
      delay(tonePause);
    }while(digitalRead(MI)==HIGH);
  }
  if(digitalRead(FA)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[3],duree);
      delay(tonePause);
    }while(digitalRead(FA)==HIGH);
  }
  if(digitalRead(SO)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[4],duree);
      delay(tonePause);
    }while(digitalRead(SO)==HIGH);
  }
  if(digitalRead(LA)){
    do{
      noTone (sortie);
      tone(sortie,tones[5],duree);
      delay(tonePause);
    }while(digitalRead(LA)==HIGH);
  }
  if(digitalRead(SI)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[6],duree);
      delay(tonePause);
    }while(digitalRead(SI)==HIGH);
  }
}

l'image et le sujet complet est ici https://openclassrooms.com/forum/sujet/probleme-dans-le-montage-ou-dans-le-code-arduino. SVP une aide :confused: le plus rapidement possible :)

SVP une aide :confused: le plus rapidement possible :)

bonjour déjà, après, la question est? ? ? ? ? ?

pour le rapidement, noël est encore un peu loin...... surtout sans plus de détails, à nous de deviner, mais deviner quoi?

noTone (sortie); //Rendre le piezo muet

ce serait déjà bien de définir les pinMode avant

  if(digitalRead(DO)==HIGH){
    do{
      noTone (sortie);
      tone(sortie,tones[0],duree);
    }while(digitalRead(DO)==HIGH);
  }

vos boutons sont générateurs de "bouncing", donc il y a 99% de chances que votre do-while ne dure pas très longtemps... faut débouncer les appuis sur le bouton.

Comme vous faites jouer le son sur une seule pin, ce n'est pas la peine d'appeler noTone(); comme le dit la doc de tone()

Only one tone can be generated at a time. If a tone is already playing on a different pin, the call to tone() will have no effect. If the tone is playing on the same pin, the call will set its frequency

Pourquoi vous utilisez des tableaux, calculez la taille dynamiquement et vous codez tout en dur?? pourquoi vous utilisez un fil rouge pour GND et un fil noir pour Vcc? c'est pas bien...

Vos boutons quand vous n'appuyez pas (en espérant qu'ils soient tournés dans le bon sens, généralement on connecte en croix pour éviter tout doute) ne sont pas connectés à la masse; ils "flottent".. ça peut générer n'importe quoi. il faut cabler la masse et mettre une résistance de pulldown.

--> dans l'absolu vaut mieux inverser et faire un pullup et utiliser INPUT_PULLUP pour les pin modes.

conceptuellement ça fait ça |500x376

câbler comme cela (personnellement je câble en diagonal à travers le bouton pour être sûr de ne pas avoir 2 pins qui sont déjà connectées) |483x500

et le code resemble à cela

 void setup() {
    pinMode(12, INPUT_PULLUP);
    pinMode(11, INPUT_PULLUP);
}

void loop() {
    if (digitalRead(12) == LOW) {
      //Button 1 enfoncé (la logique est inversée à cause du pullup)!
 }

    if (digitalRead(11) == LOW) {
      //Button 2 enfoncé (la logique est inversée à cause du pullup)!
 }

}

(source)

bref - erreurs dans le code ET erreur de câblage. normal que rien ne fonctionne.