Auteur Sujet: Un mini module sonore  (Lu 84906 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Un mini module sonore
« Réponse #15 le: octobre 25, 2016, 03:16:21 pm »
Bonjour,
Je vais vous envoyer une version qui marche.

Mais avant j'ai besoin de votre cahier des charges précis et complet et du schéma électrique : voulez-vous seulement declencher 3 sons avec 3 boutons ?

Soyez un peu patient, j'ai plein de choses à faire en parallèle.
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Un mini module sonore
« Réponse #16 le: octobre 25, 2016, 10:17:37 pm »
Bonsoir,

Essayez cette nouvelle version  (Sons_gare)

Au préalable, il faut installer la bibliothèque (Bounce2). Reportez-vous à l'article http://www.locoduino.org/spip.php?article71 pour plus de détails

Je vous laisse découvrir les changements que j'ai fait. N'hésitez pas à poser des questions.

En quelques mots, les 3 boutons à connecter sur les Pins 2, 3 et 4 démarrent un son ou l'arrêtent (s'il est en train de se jouer).
La led s'allume quand un son se joue.

Vous pouvez jouer les sons à partir du moniteur série de l'IDE.
La commande "0" (suivie d'un saut de ligne /n) affiche le répertoire de la carte.

J'ai testé sur un proto de mon coté, mais je n'ai pas vos sons (qui peuvent d'ailleurs intéresser les lecteurs si vous pouvez les partager et s'ils ne sont pas trop gros).
« Modifié: octobre 26, 2016, 11:29:21 pm par Dominique »
Cordialement,
Dominique

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #17 le: janvier 06, 2017, 07:43:59 pm »
Bonjour Dominique,
Je viens de recevoir les deux cartes micro SD, donc... on y va  :)

Petit problème pour moi.
A la compilation, j'ai ce message : exit status 1   'Joue' was not declared in this scope
J'ai téléchargé et installé Sons_gare.zip et Bounce2.zip sans problème à partir de ton dernier message du 25 oct 2016.
Et là, je suis bloqué.


Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Un mini module sonore
« Réponse #18 le: janvier 06, 2017, 08:33:58 pm »
Bonjour Philippe,

Je viens de télécharger le programme que j'ai mis sur le forum dans le post précédent, sélectionné un Arduino Pro Mini et compilé (vérifié) : pas d'erreur

Je suis donc dans les même conditions que vous et je connais d'autres personnes chez qui ça marche bien.

/*
 * Module sonore - Passage à Niveau
 * Base : un Nano + lecteur microSD + ampli BD241 + haut parleur
 * Version du 13/3/2016 Dominique Bultez
 */
 
#include <SD.h>                 // need to include the SD library
#define SD_ChipSelectPin 10     // using digital pin 10 on arduino nano 328, can use other pins
#include <TMRpcm.h>             //  also need to include this library...
#include <SPI.h>                // SPI: 10 (CS), 11 (MOSI), 12 (MISO), 13 (SCK)
#include <Bounce2.h>            // librairie anti-rebonds pour les boutons

Il faut donc que vous vérifiez que l'IDE et les éléments sont bien installés :
Les bibliothèques TRMpcm et Bounce2 : vérifiez que dans le menu Fichier/Exemples, vous voyez bien et pouvez ouvrir les exemples, comme sur cette image :


Sinon c'est étrange et votre IDE n'est peut-être pas à jour.
Sinon déplacez le fonction "Joue" au dessus de "loop"
Si c'est cela, vous aurez la même punition pour la fonction "PrintDirectory"

Tenez moi au courant des résultat svp

Cordialement
Dominique
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 809
    • Voir le profil
Re : Un mini module sonore
« Réponse #19 le: janvier 06, 2017, 08:59:42 pm »
Je vais mettre mon grain de sel si vous permettez.

Effectivement, avec l'IDE Arduino 1.8.0 sur mon Windows 10, ça marche. Mais c'est quand même incorrect du strict point de vue C/C++. C'est une amélioration de l'IDE Arduino, de son petit nom Wiring.
Dans la norme C, il est effectivement impossible d'appeler une fonction qui ne soit pas déjà déclarée. Soit parce qu'elle est présente avant son utilisation dans le source, soit parce qu'une ligne du début du source 'déclare' cette fonction ( void Joue(int a_val); ). Le Linker fera ensuite son boulot et rebranchera les fils. Cette ligne de pré déclaration se retrouve généralement dans les fichiers .h ... Après observation du fichier Sons_gare.ino.cpp produit par l'IDE dans le répertoire Temp de Windows on retrouve bien ce code :

#include <Arduino.h>
#line 1 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
#line 1 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
/*
 * Module sonore - Passage à Niveau
 * Base : un Nano + lecteur microSD + ampli BD241 + haut parleur
 * Version du 13/3/2016 Dominique Bultez
 */
 
#include <SD.h>                 // need to include the SD library
#define SD_ChipSelectPin 10     // using digital pin 10 on arduino nano 328, can use other pins
#include <TMRpcm.h>             //  also need to include this library...
#include <SPI.h>                // SPI: 10 (CS), 11 (MOSI), 12 (MISO), 13 (SCK)
#include <Bounce2.h>            // librairie anti-rebonds pour les boutons

#define _Bouton1 2              // bouton 1 connecté entre la Pin 2 et Gnd
#define _Son1 1                 // pour jouer le son 1
#define _Bouton2 3              // bouton 2 connecté entre la Pin 3 et Gnd
#define _Son2 2                 // pour jouer le son 2
#define _Bouton3 4              // bouton 3 connecté entre la Pin 4 et Gnd
#define _Son3 3                 // pour jouer le son 3
#define _LedSon 5               // Led Son connectée sur Pin 5 (en serie avec une résistance de 1K)
#define _SonOut 9               // sortie audio vers ampli et HP

// Variables
Bounce bounceB1 = Bounce();     // creation des objets Bounce
Bounce bounceB2 = Bounce();
Bounce bounceB3 = Bounce();
TMRpcm tmrpcm;                  // creation d'un objet tmrpcm
File root;
int val;
int bouton, oldbouton = 0;
bool debouncing = false;



/////////////////////// SETUP /////////////////

#line 36 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
void setup();
#line 73 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
void loop();
#line 128 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
void Joue(int a_val);
#line 163 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"
void printDirectory(File dir, int numTabs);
#line 36 "D:\\Mes documents\\Trusty\\Arduino\\Sons_gare\\Sons_gare.ino"

donc je ne comprend pas que votre IDE refuse de le compiler... Sauf si votre IDE est très ancien (version 1.4 ou avant !) .

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #20 le: janvier 07, 2017, 09:58:54 am »
Bonjour à tous,
J'ai bien "Les bibliothèques TRMpcm et Bounce2" et j'ai vérifié que dans le menu Fichier/Exemples, il y a bien et on peut ouvrir les exemples".

Maintenant c'est quoi l'"IDE"? Désolé mais je me classe plutôt dans les débutants.
Tout ce que je peut lire c'est : Arduino 1.6.12
« Modifié: janvier 07, 2017, 10:11:27 am par PhB22560 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 809
    • Voir le profil
Re : Un mini module sonore
« Réponse #21 le: janvier 07, 2017, 10:09:11 am »
Ben, c'est juste ça l'IDE, pour Interactive Development Environment ou Environnement de développement interactif dans la langue de Pierre Dac. C'est à dire l'éditeur de texte (côté interactif) qui permet de coder puis de compiler ce code (côté développement...). Désolé pour les acronymes, on ne se méfie pas assez de nos vieux réflexes...

Pour revenir au problème, si le message d'erreur est bien ce que vous avez signalé ''Joue' was not declared in this scope', comme le disait Dominique, il suffit de déplacer la fonction Joue() et sans doute sa suivante au début du fichier, après les include, bien sûr. L'autre solution est d'ajouter deux lignes juste avant le setup:

void Joue(int a_val);
void printDirectory(File dir, int numTabs);

D'autre part, passer à la dernière version 1.8.0 de l’environnement Arduino (l'IDE !) ne serait pas inutile...

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Un mini module sonore
« Réponse #22 le: janvier 07, 2017, 10:29:21 am »
Merci Thierry d'avoir pris le relai (des courses m'obligent à respirer l'air pas très pur de Sallanches).

Je me souviens que j'ai déjà vu ce message d'erreur (mais je ne l'ai pas sur la 1.6.0) et d'avoir remonté la routine incriminée. Mais vraiment pas souvent.

C'est vrai qu'il vaut mieux éviter de déclarer une fonction après son appel !

À retenir
Cordialement,
Dominique

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #23 le: janvier 07, 2017, 12:55:02 pm »
Bonjour à tous,
J'utiliserais deux cartes micro Sd, une avec un UNO (Selectronic) pour l'animation réseau et l'autre avec un MEGA (clone) pour le va et vient à trois autorails.
Ma question est donc : Sons_gare.zip est-il directement applicable avec le UNO ou le MEGA que j'utilise?
Après correction suivant le conseil de Thierry, plus de problème de compilation.
J'ai un message " SD fail".
Je crois que moi aussi je vais "fail"  :)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Re : Un mini module sonore
« Réponse #24 le: janvier 07, 2017, 02:15:47 pm »
Citation de: PhB22560 link=topic=B ;D157.msg2473#msg2473 date=1483790102
Bonjour à tous,
J'utiliserai deux cartes micro Sd, une avec un UNO (Selectronic) pour l'animation réseau et l'autre avec un MEGA (clone) pour le va et vient à trois autorails.
Ma question est donc : Sons_gare.zip est-il directement applicable avec le UNO ou le MEGA que j'utilise?
Après correction suivant le conseil de Thierry, plus de problème de compilation.
J'ai un message " SD fail".
Je crois que moi aussi je vais "fail"  :)

Pour le fonctionnent sur Uno et Mega la réponse est OUI.
Pour le Uno faites attention à la mémoire !
Si le compilateur vous dit que la mémoire disponible est inférieure à 700 octets, ça peut planter car l'objet SD est assez gourmand.

Le message SD fail veut dire que vous avez fait une erreur quel part (il sert à ça : pas de carte SD ou mauvais type de carte ou mal initialisée.   )

Regardez le dernier numéro de Hackable en librairie : il
contient un article très bien fait en attendant que quelqu'un (vous peut-être) se dévoue sur Locoduino.

Là je vous recommande de chercher un peu plus par vous même  >:(
Cordialement
« Modifié: janvier 07, 2017, 02:22:33 pm par Dominique »
Cordialement,
Dominique

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #25 le: janvier 07, 2017, 04:25:27 pm »
Bon, ça va déjà mieux.
En plaçant le fil CS de la carte SD sur la borne 4 au lieu de la borne 10 : tout va bien ; en lançant Cardinfo on trouve bien la carte et le fichier qui est dedans.
Utilisant la borne 4 j'ai donc "supprimé", dans le programme, le bouton3. Sans importance pour moi.
Avec le bouton 1 on fait bien démarrer ou arrêter le fichier son "annonce1.wav". Si on laisse jouer complètement, il s'arrete à la fin. Donc tout va presque bien.
J'ai plus un crachouillis qu'un bruit d'hélico tel que je l'ai enregistré.
Il est sous 8 bits, en mono et échantillonné à 11025Hz. C'est peut être là le problème.
Merci pour votre aide, je suis sorti du "fail" pour l'instant  ;) ;)

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #26 le: janvier 07, 2017, 05:05:09 pm »
Hop! C'est bon! :D :D

Les cartes je les ai trouvé via "A ma zone" : https://www.amazon.fr/gp/product/B00YMJVLAS/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1 pour 1,70 eur.

Donc je résume :
- avec un UNO mettre le fil CS de la carte micro SD sur la borne 4 du UNO. Ca, je l'ai lu ou vu quelque part et de toute façon, on le découvre en lancant Cardinfo ; Je crois que c'est le truc à retenir pour le brochage d'une carte SD.
- faire la modif de Thierry : void Joue(int a_val);  void printDirectory(File dir, int numTabs); avant le setup.
- pour le fichier son : mono, 8 bits et 16000Hz en échantillonnage.

Pour la conversion des fichiers j'ai utilisé un convertisseur en ligne : http://audio.online-convert.com/fr/convertir-en-wav.
C'est un convertisseur qui m'évite une installation et c'est amplement suffisant pour ce que je fais.


Bon, on va mettre le sifflet du chef de gare pour chaque départ d'autorail. :) :) :)
Qui a dit qu'il fallait un décodeur sound pour le coup de sifflet de départ?  ;) ;)

Merci à tous  :) :) :)
« Modifié: janvier 07, 2017, 05:24:47 pm par PhB22560 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 809
    • Voir le profil
Re : Un mini module sonore
« Réponse #27 le: janvier 07, 2017, 05:21:42 pm »
Content de voir que ça marche !

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3034
  • 100% Arduino et N
    • Voir le profil
Re : Un mini module sonore
« Réponse #28 le: janvier 07, 2017, 05:46:07 pm »
C'est exact : ça sert à éviter les décodeurs avec son !

Bravo et merci pour le retour d'expérience.
Cordialement,
Dominique

PhB22

  • Invité
Re : Un mini module sonore
« Réponse #29 le: janvier 07, 2017, 06:22:07 pm »
En fait, mais il faut le savoir, il faut lancer Cardinfo pour voir si la carte ne sera pas décrite en "fail" puis lancer listfiles pour voir si le ou les fichiers sont bien repérés.
J'avais lu sur un site qu'il fallait créer un répertoire, sur un autre qu'il fallait ne pas dépasser 6 caractères etc. Bon, je veux bien...

Bref, il vaut mieux lancer les deux programmes précités et qui se trouvent dans la bibliothèque de l'Arduino pour être certain de son coup pour le câblage.

Ah oui, pour l'amplificateur, bien que le fer à souder soit un de mes compagnons favoris, j'ai acheter un module ampli également sur "A ma zone" pour 2,35 eur. J'ai laissé un commentaire (cf. commentaire de A.B.). Pourquoi se prendre la tête? Le potentiomètre d'entrée est en place et le condensateur également ; à brancher sur les broches 9 et GRD (masse) et à alimenter en 9 / 12v si possible filtrés et régulés. https://www.amazon.fr/gp/product/B017CWS7JE/ref=oh_aui_detailpage_o08_s00?ie=UTF8&psc=1
« Modifié: janvier 07, 2017, 06:32:24 pm par PhB22560 »