Étape 5: Code
La majeure partie du code est pour le WaveShield, basé sur http://www.ladyada.net/make/waveshield/Il existe plusieurs exemples de plusieurs boutons autour - J’ai utilisé un mash-up basé sur Rayshobby blog http://rayshobby.net/?p=16 avec un peu de cette un, jeté en.
Code de sélection aléatoire pour le dernier bouton est une adaptation de www.arduino.cc/en/Tutorial/Blink & www.arduino.cc/en/Reference/Random.
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include « WaveUtil.h »
#include « WaveHC.h »
int buttonPinR = 0 ; Bras droit de boutons sur la broche analogique 0
int buttonValueR = 0 ;
int buttonPinL = 1 ; Bras gauche boutons sur la broche analogique 1
int buttonValueL = 0 ;
long randChoose = 0 ; Initialiser l’élément aléatoire
long randNumber ;
Carte de SdReader ; Cet objet conserve les informations de la carte
Vol FatVolume ; Il conserve les informations pour la partition sur la carte
FatReader racine ; Il conserve les informations pour le système de fichiers sur la carte
FatReader f ; Il conserve les informations pour le fichier que nous allons jouer
WaveHC vague ; C’est le seul objet (audio) de la vague, puisque nous allons jouer seulement un à la fois
int wasplaying = 0 ;
int rval pointe ;
Cette fonction pratique retournera le nombre d’octets actuellement libres en RAM, grand pour le débogage !
int freeRam(void)
{
extern int __bss_end ;
extern int * __brkval ;
int free_memory ;
Si ((int) __brkval == 0) {}
free_memory = ((int) & free_memory)-((int) & __bss_end) ;
}
else {}
free_memory = ((int) & free_memory)-((int) __brkval) ;
}
Return free_memory ;
}
Sub sdErrorCheck(void)
{
Si (! card.errorCode()) retourner ;
putstring ("\n\rSD I/O erreur:") ;
Serial.Print(Card.ErrorCode(), HEX) ;
putstring (",") ;
Serial.println(Card.ErrorData(), HEX) ;
while(1) ;
}
void setup()
{
Serial.Begin(9600) ;
Serial.println ("vague test!") ;
pinMode (sortie 2) ;
pinMode (3, sortie) ;
pinMode (sortie 4) ;
pinMode (5, sortie) ;
pinMode (13, sortie) ;
randomSeed (analogRead (1)) ; générateur de nombres aléatoires d’installation
Si (! card.init(true)) {//play avec 4 MHz spi si 8MHz ne fonctionne pas pour vous
Si (! card.init()) {//play avec spi 8 MHz (par défaut plus rapide!)
putstring_nl ("carte init. a échoué!") ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
sdErrorCheck() ;
while(1) ; puis « arrêter » - ne rien faire !
}
Enable optimiser la lecture - certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes
card.partialBlockRead(true) ;
Maintenant, on va chercher une partition FAT !
uint8_t partie ;
pour (partie = 0; partie < 5; partie ++) {/ / nous avons jusqu'à 5 emplacements de regarder dans
Si (vol.init (carte, partie))
rupture ; Nous avons trouvé un, laisse en liberté sous caution
}
Si (partie == 5) {/ / si nous avons fini ne pas trouver un:(
putstring_nl ("aucun FAT partition valide!") ;
sdErrorCheck() ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
while(1) ; puis « arrêter » - ne rien faire !
}
Permet d’indiquer à l’utilisateur sur ce que nous avons trouvé
putstring ("partition à l’aide") ;
Serial.Print (partie, DEC) ;
putstring (", est de type FAT") ;
Serial.println(vol.fatType(),DEC) ; FAT16 ou FAT32 ?
Essayez d’ouvrir le répertoire racine
Si (! root.openRoot(vol)) {}
putstring_nl ("Impossible d’ouvrir le répertoire racine!") ; Quelque chose a mal tourné,
while(1) ; puis « arrêter » - ne rien faire !
}
Ouf ! Nous avons passé les parties difficiles.
putstring_nl("Ready!") ;
}
Boutons calibré avec une résistance de 10K sur la broche 5 v avec une pile 9v connecté à la prise d’alimentation Arduino.
Utilisez les valeurs de votre esquisse de lecture analogique pour encadrer la valeur attribuée à chaque touche. Vôtre peuvent différer de ceux assignés ici.
Bras droit de boutons sur la broche 0
void loop() {}
buttonValueR = analogRead(buttonPinR) ;
Si (buttonValueR > 645 & & buttonValueR < 660) {}
playcomplete ("R1. « « « WAV ») ;
}
Delay(25) ; Il est toujours bon pour les choses lentes vers le bas lorsque vous lisez un peu entrées
Si (buttonValueR > 225 & & buttonValueR < 240) {}
playcomplete (« R2. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueR > 165 & & buttonValueR < 185) {}
playcomplete "(R3. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueR > 325 & & buttonValueR < 345) {}
playcomplete ("R4. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueR > 495 & & buttonValueR < 515) {}
playcomplete ("R5. « « « WAV ») ;
}
Bras gauche boutons sur la broche 1
buttonValueL = analogRead(buttonPinL) ;
Si (buttonValueL > 645 & & buttonValueL < 660) {}
playcomplete ("L1. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueL > 225 & & buttonValueL < 245) {}
playcomplete ("L2. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueL > 165 & & buttonValueL < 185) {}
playcomplete ("L3. « « « WAV ») ;
}
Delay(25) ;
Si (buttonValueL > 325 & & buttonValueL < 350) {}
playcomplete "(L4. « « « WAV ») ;
}
Delay(25) ;
Randomiser l’effet sonore émis lorsque vous appuyez sur le dernier bouton sur le bras gauche
Si (buttonValueL > 495 & & buttonValueL < 515) {}
randChoose = aléatoire (1, 20) ; générer un choix entre 1 et 20
Switch (randChoose)
{
cas 1 :
playcomplete "(RAND1. « « « WAV ») ;
rupture ;
cas 2 :
playcomplete "(RAND2. « « « WAV ») ;
rupture ;
cas 3 :
playcomplete "(RAND3. « « « WAV ») ;
rupture ;
cas 4 :
playcomplete "(RAND4. « « « WAV ») ;
rupture ;
cas no 5 :
playcomplete "(RAND5. « « « WAV ») ;
rupture ;
cas 6 :
playcomplete "(RAND6. « « « WAV ») ;
rupture ;
cas 7 :
playcomplete "(RAND7. « « « WAV ») ;
rupture ;
cas 8 :
playcomplete "(RAND8. « « « WAV ») ;
rupture ;
cas 9 :
playcomplete "(RAND9. « « « WAV ») ;
rupture ;
cas no 10 :
playcomplete "(RAND10. « « « WAV ») ;
rupture ;
cas no 11 :
playcomplete "(RAND11. « « « WAV ») ;
rupture ;
cas 12 :
playcomplete "(RAND12. « « « WAV ») ;
rupture ;
case 13 :
playcomplete "(RAND13. « « « WAV ») ;
rupture ;
cas no 14 :
playcomplete "(RAND14. « « « WAV ») ;
rupture ;
case 15 :
playcomplete "(RAND15. « « « WAV ») ;
rupture ;
case 16 :
playcomplete "(RAND16. « « « WAV ») ;
rupture ;
cas 17 :
playcomplete "(RAND17. « « « WAV ») ;
rupture ;
Case 18 :
playcomplete "(RAND18. « « « WAV ») ;
rupture ;
case 19 :
playcomplete "(RAND19. « « « WAV ») ;
rupture ;
case 20 :
playcomplete "(RAND20. « « « WAV ») ;
rupture ;
}
Delay(25) ;
}
}
Lit un fichier complet de bout en bout avec aucune pause.
void playcomplete(char *name) {}
Appelez notre aide pour trouver et jouer ce nom
playfile(Name) ;
alors que {(wave.isplaying)
ne rien faire pendant sa lecture
}
maintenant sa fait jouer
}
void playfile(char *name) {}
voir si l’objet vague est en train de faire quelque chose
Si (wave.isplaying) {/ / déjà jouer quelque chose, alors arrêtez d’elle !
Wave.Stop() ; Arrête
}
Regardez dans le répertoire racine et ouvrir le fichier
Si (! f.open (racine, nom)) {}
putstring ("Impossible d’ouvrir le fichier") ; Serial.Print(Name) ; retour ;
}
OK, lire le fichier et le transformer en un objet vague
Si (! wave.create(f)) {}
putstring_nl ("pas un valide" WAV") ; retour ;
}
OK le temps de jouer ! Démarrer la lecture
Wave.Play() ;
}