[Résolu] Fonction tone() problématique sur Arduino Nano Every

Bonjour !

J'ai été contraint d'utiliser un Nano Every pour gagner quelques dizaines d'octets qui manquaient sur la version Nano standard.

Je me retrouve avec un problème lié à la fonction tone(), fonction utilisée dans le cadre d'un programme complet.

Cette fonction remplit parfaitement sont rôle sur un Nano standard, mais, le même code appliqué sur un Nano Every émet alors, une fois sur deux, un son continu à la fin du morceau.

J'ai bien essayé d'inclure un :
digitalWrite(BUZZER_PIN, LOW);
à la fin du code, mais cette ligne crée alors un son strident que quelques dixièmes de seconde.

J'ai trouvé ce même problème dans différents posts dont le plus ancien remonte à 2019. Apparemment aucune solution n'est proposée ; la raison semblerait être "un conflit dans les timers".

Quelqu'un a-t-il une solution à ce problème ?

Merci pour votre aide.

Est-ce que tu utilises d'autres bibliothèques dans ton code, qui pourrait utiliser le même timer et provoquer un conflit ?
As-tu essayé le plus simple code possible pour tester la fonction tone ? Par exemple celui-ci :

utilisez vous un servo comme dans le post que vous présentez? le souci de timer vient de là.

avez vous la dernière version de l'IDE et tout à jour pour le Nano Every?

PS/

ça se trouve quelques dizaines d'octets généralement... Avez vous vraiment tout essayé ?

Merci pour vos réponses.

@lesept
C'est exactement le code que j'ai utilisé (voir le lien dans mon post).
Ce code fonctionne parfaitement avec le Nano classique, mais pas avec le Every (remplacement pin à pin d'une carte par l'autre).

@J-M-L. Jackson
Pas de servo, rien, juste le buzzer.
Aucun autre #include dans le code.

Le montage de test ne comporte vraiment rien d'autre que le buzzer avec ce code.
C'est la raison de cette incompréhension.

C’est quoi comme buzzer ? (La Nano every a un max de 15mA par pin)

@ J-M-L Jackson

C'est un buzzer standard dit "actif "(lien).

Je viens de remarquer que le son est correct (sans le sifflement de fin) lorsque le buzzer est connecté à la pin 8 comme définit dans le code original (IDE Arduino > 02.Exemples > Digital > toneMelody).

Par contre, une fois connecté à la pin D13/SCK, le problème apparaît.
Je continue la recherche !

Oops, j'avais pas vu...

Si ça peut aider, voici le pinout :


La pin 8 et la 13 sont sur deux ports différents
Lien vers la datasheet du µC.

la pin 13 a du "matériel accroché" (R + LED) qui doit consommer du courant, c'est ça de moins dispo pour le buzzer actif et 15mA ce n'est pas bcp... à mon avis il ne faut pas chercher plus loin

Bonjour,

Si c'est un buzzer actif, on n'utilise pas tone(). Il suffit de l'alimenter pour qu'il 'buzze'.

Oui mais si on veut générer des fréquences différentes il faut bien faire des fronts plus ou moins rapprochés non ?

Si on veut générer des fréquences différentes, on utilise un buzzer passif et tone().

En effet, il y a un exemple de code dans le lien fourni par l'OP:

Exemple de programme :
L’exemple de code suivant (à copier dans l’IDE Arduino®) permet de faire fonctionner le
buzzer.

int speakerPin = 8; // Définition du buzzer sur la broche 8
void setup () {
pinMode (speakerPin, OUTPUT); // Définition de la broche 8 en tant que
sortie
}
void loop () {
analogWrite (speakerPin, 255); // Signal haut sur broche 8
delay (50); // pendant 50 ms
analogWrite (speakerPin, 0); // Signal bas sur broche 8
delay (10); // pendant 10 ms
}

Pas de tone()

Oui - ça doit cependant fonctionner un peu avec un buzzer actif et des fréquences « correctes » - le buzzer actif fait un petit bruit si l’impulsion est courte et assez puissante

@kamill, J-M-L jackson et lesept
Merci de vous intéresser à mon problème !

Tests effectués avec la fonction tone().

1. Nano Every avec un buzzer passif (vulgaire plaque piezo)

  • Fonctionne sans problème.
    (fréquences audio conformes aux notes du code)
  • Signal propre.
  • Puissance sonore faible.

2. Nano Every avec un buzzer actif

  • Fonctionne vraiment mal sur la pin D13 configurée en sortie.
    (Sifflement continu en fin de mélodie et signal non représentatif du code pour certaines notes. Exemple G6 devient G7.)
  • Fonctionne mal sur les autres pins configurées en sortie.
    (signal non représentatif du code pour certaines notes. Exemple G6 devient G7.)
  • En fin du play, présence d'un signal aigu continu.
  • Puissance sonore importante.

3. Nano Standard avec un buzzer passif

  • Code fonctionnant sans problème.
  • Le signal propre.
    (fréquences audio conformes au notes du code)
  • Puissance sonore très faible.

4. Nano Standard avec un buzzer actif

  • Code fonctionnant partiellement.
    (signal non représentatif du code pour certaines notes. Exemple G6 devient G7.)
  • Signal propre.
  • Puissance sonore importante.

@lesept
Entièrement d'accord pour le code fourni que j'avais déjà testé.
Le montage comportait un buzzer actif et j'ai ensuite simplement souhaité jouer 4 notes comme signal de validation, d'où l'utilisation (inappropriée) du tone().

En conclusion
Pour la fonction tone(), le Nano Every et le Nano standard ne fonctionnent correctement qu'avec un buzzer passif. Mais puissance de sortie faible en 5V.
Camille a donc parfaitement raison !

Merci pour votre aide.

1 Like

Effectivement peut utiliser un marteau pour fendre une bûche, mais ça fonctionne quand même mieux avec une hache. :grinning:

:slight_smile:

le meilleur buzzer quand on bidouille c'est celui qu'on a sous la main (à défaut de celui qui est adéquat)

mais oui, vous avez raison sur le fond

bravo pour les test !

Finalement, j'ai ajouté un BC547B gérant le buzzer passif (base pilotée par le Nano et collecteur au +12V) .
Ca fonctionne parfaitement avec le Nano Every et avec nettement plus de puissance qu'en 5 V !

Merci à tous pour votre aide.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.