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 !) .