Clignottement led suivant le son du buzzer (résolu avec shema et code)

Bonsoir,

Je suis en train de me faire une sonnette pour la porte d'entrée. sonnette filaire musicale et ... clignotante.

tout est bon mis à part le clignottement.

j'aimerai que la led soit allumée quand un son est émis, pouvez vous m'aiguiller ?

sur ce code ça ne fonctionne pas comme je veux ( la led s'allume sur un son et s'éteind la durée du son suivant ...) et il y a certainement un "raccourci".

merci d'avance.

// entrée bouton
const int pinButton = 2;
// attribution led
const int led = 3;

void setup() {
  
  pinMode(8, OUTPUT); // sortie HP

  pinMode(pinButton, INPUT); // entrée bouton
  pinMode(3, OUTPUT); // sortie led
  digitalWrite(3, HIGH); // éteindre la led

}


void song_Test(){
     
    tone(8, LA3, Q);
    digitalWrite(3,LOW);
    delay(1 + Q); //delay duration should always be 1 ms more than the note in order to separate them.

    tone(8, LA3, Q);
    digitalWrite(3, HIGH);
   
    delay(1 + Q);

    tone(8, LA3, Q);
    digitalWrite(3,LOW);
    delay(1 + Q);
    
    tone(8, F3, E + S);
    delay(1 + E + S);
    digitalWrite(3, HIGH);

    tone(8, C4, S);
    delay(1 + S);
  }


void loop()
{
  
   while (digitalRead(pinButton)== LOW)
     song_Test();
    
}

EDIT

Voilà ça fonctionne comme je le souhaite et donc je vous fait part du schéma et du code ! petite modif avec ajout du potar pour ajuster le volume.

je suis ouvert aux remarques pour améliorer mon montage ou mon programme.

|500x341

// sonette Star Wars
#define Do1  260
#define Do1d 276
#define Re1  296
#define Re1d 312
#define Mi1  332
#define Fa1  348
#define Fa1d 372
#define So1  392
#define So1d 416
#define La1  440
#define La1d 468
#define Si1  492

#define Do2  520
#define Do2d 552
#define Re2  592
#define Re2d 624
#define Mi2  664
#define Fa2  696
#define Fa2d 744
#define So2  784
#define So2d 832
#define La2  880
#define La2d 936
#define Si2  984

// DURATION OF THE NOTES
#define BPM 150    //  you can change this value changing all the others
#define H 2*Q //half 2/4
#define Q 60000/BPM //quarter 1/4 
#define E Q/2   //eighth 1/8
#define S Q/4 // sixteenth 1/16
#define W 4*Q // whole 4/4

// entrée bouton
const int pinButton = 2;
// attribution led
const int ledB = 3; //led bleue
const int ledV = 4; //led verte
const int LedR = 5; //led rouge
// attribution HP
const int buzz = 8; // HP


void setup() {
  
  pinMode(8, OUTPUT); // sortie HP
  pinMode(pinButton, INPUT); // entrée bouton
  pinMode(3, OUTPUT); // sortie led bleue
  digitalWrite(3,HIGH); // éteindre la ledB
  pinMode(4, OUTPUT); //sortie led verte
  digitalWrite(4, HIGH); // éteindre led verte
  pinMode(5, OUTPUT); //sortie led rouge
  digitalWrite(5, HIGH); //éteindre led rouge
}

void song(){
  
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH); 
    tone(8, Re1, E);
    delay(1 + E); //delay doit être plus long de 1ms pour la séparation
    
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW); 
    tone(8, Re1, E);
    delay(1 + E);

    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);  
    tone(8, Re1, E);
    delay(1 + E);
    
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW);
    tone(8, So1, H);
    delay(1 + H);
    
    digitalWrite(5, LOW);   //LedR
    digitalWrite(4, HIGH);   
    tone(8, Re2, H);
    delay(1 + H);
    
    digitalWrite(5,HIGH);
    digitalWrite(4, LOW); 
    tone(8, Do2, E);
    delay(1 + E);

    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);  
    tone(8, Si1, E);
    delay(1 + E);
    
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW);
    tone(8, La1, E);
    delay(1 + E);
    
    digitalWrite(5, LOW);   //ledR
    digitalWrite(4, HIGH);   
    tone(8, So2, H);
    delay(1 + H);
    
    digitalWrite(5,HIGH);
    digitalWrite(4, LOW); 
    tone(8, Re2, Q);
    delay(1 + Q);

    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);  
    tone(8, Do2, E);
    delay(1 + E);
    
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW);
    tone(8, Si1, E);
    delay(1 + E);
    
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);   
    tone(8, La1, E);
    delay(1 + E);
    
    digitalWrite(3,HIGH);   // ledR
    digitalWrite(5, LOW); 
    tone(8, So2, H);
    delay(1 + H);

    digitalWrite(3, LOW);
    digitalWrite(5, HIGH);  
    tone(8, Re2, Q);
    delay(1 + Q);
    
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW);
    tone(8, Do2, E);
    delay(1 + E);
    
    digitalWrite(3, LOW);    
    digitalWrite(4, HIGH);
    tone(8, Si1, E);
    delay(1 + E);
  
    digitalWrite(3,HIGH);
    digitalWrite(4, LOW);
    tone(8, Do2, E);
    delay(1 + E);
    
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);    
    tone(8, La1, H);
    delay(1 + H);
    digitalWrite(3,HIGH);

}


void loop() {
  
   while (digitalRead(pinButton)== LOW) // bouton allumer mélodie
     song();
}

Chaque digitalWrite(3,LOW) a pour effet d’éteindre la LED il faut retirer cette instruction.

salut et merci pour ta réponse mais digitalWrite(3,LOW) allume ma led !!!

Je ne sais pas si je me suis bien exprimé, mais je voudrais simplement activé la led quand tone() est actif et qu'elle soit éteinte quand tone() inactif..

Tu peux mettre le schéma de ton montage ?

voilà !! je débute en électronique hein !!

|500x335

Et si tu mettais les digitalWrite [u]avant[/u] les tone ?

J’ai l’impression que tu as inversé LOW/HIGH en faisant s’opposer deux tensions. Une sortie en HIGH délivre assez de puissance pour allumer ne led, ton montage me semble bien compliqué pour faire simple.

Je vois des variables non déclarées, tu n’as pas testé ton code?
delay(1 + E + S);

Je peux me tromper, je débute aussi, et je n’utilise pas tone()

en fait le buzzer et la led fonctionnent dans cette config, c'était juste le problème du clignottement.

mais c'est bon j'ai trouvé !!

https://www.youtube.com/watch?v=m997bg0vFCk

merci pour votre aide

post #1 édité