/* à copier coller dans Arduino,les commentaires sont en italique, j’ai laissé les Serial.println(« »); qui m’ont permis de debugger le programme */
/* partie déterminant la librairie et les variables traitement du son */
#include <AF_Wave.h>
#include <avr/pgmspace.h>
#include « util.h »
#include « wave.h »
AF_Wave card;
File f;Wavefile wave; // only one!
#define redled 9
/* variables concernant la position du spectateur */
int proxipin = 0; // definit le pin 0 comme recevant le fil orange du proximetre
int val; // initialise la variable val qui va contenir la valeur du proximetre
int val2; // initialise la variable val2 qui va contenir la valeur du proximetre dans la boucle while
/* concaténation de string */
char* myStrings[4]={« A », »B », »C »} ; //déclare le tableau de string des terminaisons
char nomComplet[11]; // ouvre un tableau pour le nom complet du fichier à jouer
int hasard ; // initie la variable hasard
char* miMot; // initie la variable miMot (string)
#define nomFichier « FIC » //definit la constante fic qui sera la première partie du ficher a jouer
#define queuFichier « .WAV » // definit l’extension du fichier à jouer
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println(« Wave test! »);
pinMode(2, OUTPUT); // configuration de la carte
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(redled, OUTPUT);
/* initialisation de la carte*/
if (!card.init_card()) {
putstring_nl(« Card init. failed! verif »); return; }
if (!card.open_partition()) {
putstring_nl(« No partition! »); return; }
if (!card.open_filesys()) {
putstring_nl(« Couldn’t open filesys »); return; }
if (!card.open_rootdir()) {
putstring_nl(« Couldn’t open dir »); return; }
putstring_nl(« Files found: »); }
void loop() {
/* partie dans loop qui gére le démarrage de la lecture du fichier son en fonction de la position du spectateur*/
val = analogRead(proxipin); // lit la valeur du proximetre
val = map(val, 0, 1023, 80, 10); // echantillonne la valeur du capteur ( primitivement entre 0 et 1023) entre 80 et 10 centimetres
delay(1000); // espace les prises de mesure toute les secondes
Serial.println (« boucle 1 »);
Serial.println (val); // affiche la valeur du proxi dans la fenetre du moniteur serie
/* test de présence d’un spectateur declenchant la lecture du fichier wave choisi aléatoirement */
if (val != 80) // s’il y a un spectateur dans le champ
{
/*Générateur de fin de fichier*/
randomSeed(val);
hasard = random(3); // genere un nombre aleatoire entre 0 et 3
Serial.println (hasard);
/* boucle de choix de miMot */
miMot = myStrings[hasard];
Serial.println (miMot);
delay(500);
/* construction du nom de fichier*/
strcpy (nomComplet, nomFichier);
strcat (nomComplet, miMot);
strcat (nomComplet, queuFichier);
Serial.println(nomComplet);
delay(1000);
playcomplete(nomComplet); // appel de la fonction playcomplete, elle même convoquant la fonction
playfile
/* test de sortie du pectateur de la zone 80 cm*/
val2 = val;
while (val2 != 80) // tant que le spectateur reste dans le champ
{
val2 = analogRead(proxipin); // lit la valeur du proximetre et la met dans val2
val2 = map(val2, 0, 1023, 80, 10); // echantillonne la valeur du capteur (entre 0 et 1023) entre 80 et 10 centimetres
delay(500); // espace les prises de mesures toutes les demies secondes
Serial.println (« boucle 2 »);
Serial.println (val2); }
val= val2; // on réinitialise val } }
void playcomplete(char *name) {
playfile(name);
while (wave.isplaying) {
putstring(« . »);
delay(100); } card.close_file(f);}
void playfile(char *name) {
f = card.open_file(name);
if (!f) {
putstring_nl( » Couldn’t open file »);
return; }
if (!wave.create(f)) {
putstring_nl( » Not a valid WAV »);
return; }
/* ok time to play! */
wave.play(); }