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".
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 :
@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.
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 !
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
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
}
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 !
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 !