Etape 42 : Arduino Uno R3
L’Arduino Uno R3 lit une valeur binaire à 4 chiffres de l’Arduino Mega 2560 et joue un fichier audio associé à la valeur binaire. Il s’agit de la voix du droïde C3PO. Se référer aux dessins pour l’information de raccordement électriques.
John Guarnero
Septembre 2014
#include
#include
#include
#include
int inp6 = 0 ;
int inp7 = 0 ;
int inp8 = 0 ;
int inp9 = 0 ;
int TC_Value = 8 ;
int Last_TC = 0 ;
int Demonstration_Value = 0 ;
int Last_Demonstration_Value = 1 ;
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
uint8_t dirLevel ; tiret de niveau pour les noms de fichier/dir
dir_t dirBuf ; tampon pour répertoire lectures
/*
Définir des macros pour mettre des messages d’erreur dans la mémoire flash
*/
#define error(msg) error_P(PSTR(msg))
Définitions de fonction (nous les définissons ici, mais le code est ci-dessous)
void play (FatReader et dir) ;
PROGRAMME D’INSTALLATION
void setup() {}
Serial.Begin(9600) ; mettre en place une bibliothèque série à 9600 bits/s pour le débogage
putstring_nl (« \nWave test!") ; dire que nous nous sommes réveillés !
putstring ("RAM libre:") ; Ce qui peut aider avec le débogage, manquer de RAM est mauvais
Serial.println(FreeRam()) ;
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!)
erreur ("carte init. a échoué!") ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
}
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, donc sortir
}
Si (partie == 5) {/ / si nous avons fini ne pas trouver un:(
erreur ("aucun FAT partition valide!") ; Dire ce qui s’est mal passé
}
Permet d’indiquer à l’utilisateur de ce qui s’est passé
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)) {}
erreur ("Impossible d’ouvrir le répertoire racine!") ; Quelque chose a mal tourné,
}
//
putstring_nl ("fichiers trouvés (* = fragmenté):") ;
Imprimer tous les fichiers dans tous les répertoires.
root.ls(LS_R | LS_FLAG_FRAGMENTED) ;
}
AIDES
/*
imprimer des message d’erreur et arrêter
*/
void error_P (const char * str) {}
PgmPrint ("erreur:") ;
SerialPrint_P(str) ;
sdErrorCheck() ;
while(1) ;
}
void sdErrorCheck(void) {}
Si (! card.errorCode()) retourner ;
PgmPrint ("\r\nSD I/O erreur:") ;
Serial.Print(Card.ErrorCode(), HEX) ;
PgmPrint (",") ;
Serial.println(Card.ErrorData(), HEX) ;
while(1) ;
}
Début de boucle
void loop()
{
octet i ;
INP6 = digitalRead(6) ; 1 binaire
inp7 = digitalRead(7) ; 2 binaire
inp8 = digitalRead(8) ; 4 binaire
inp9 = digitalRead(9) ; 8 binaire
Si (inp6 == HIGH & & inp7 == LOW & & inp8 == LOW & & inp9 == faible) / / 1 2 4 8
{//Happy anniversaire Emily
Serial.println("1") ;
TC_Value = 1 ;
playcomplete("1.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == HIGH & & inp8 == LOW & & inp9 == faible) / / 1 2 4 8
{//Happy anniversaire Kim
Serial.println("2") ;
TC_Value = 2 ;
playcomplete("2.wav") ;
retard (1) ;
}
Si (inp6 == HIGH & & inp7 == HIGH & & inp8 == LOW & & inp9 == faible) / / 1 2 4 8
{//Happy anniversaire Megan
Serial.println("3") ;
TC_Value = 3 ;
playcomplete("3.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == LOW & & inp8 == HIGH & & inp9 == faible) / / 1 2 4 8
{//Welcome à la maison de Guarnero
Serial.println("4") ;
TC_Value = 4 ;
playcomplete("4.wav") ;
retard (1) ;
}
Si (inp6 == HIGH & & inp7 == LOW & & inp8 == HIGH & & inp9 == faible) / / 1 2 4 8
{//Happy Halloween
Serial.println("5") ;
TC_Value = 5 ;
playcomplete("5.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == HIGH & & inp8 == HIGH & & inp9 == faible) / / 1 2 4 8
{//Happy anniversaire
Serial.println("6") ;
TC_Value = 6 ;
playcomplete("6.wav") ;
retard (1) ;
}
Si (inp6 == HIGH & & inp7 == HIGH & & inp8 == HIGH & & inp9 == faible) / / 1 2 4 8
{//Say quelques blagues
Serial.println("7") ;
TC_Value = 7 ;
playcomplete("7.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == LOW & & inp8 == LOW & & inp9 == haut) / / 1 2 4 8
{//Kim Saint dialogue & Kim R2D2 dialogue
Serial.println("8") ;
TC_Value = 8 ;
playcomplete("8.wav") ;
retard (1) ;
}
Si (inp6 == HIGH & & inp7 == LOW & & inp8 == LOW & & inp9 == haut) / / 1 2 4 8
{//Happy Thanksgiving
Serial.println("9") ;
TC_Value = 9 ;
playcomplete("9.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == HIGH & & inp8 == LOW & & inp9 == haut) / / 1 2 4 8
{//Kims brioches à la boîte de dialogue
Serial.println("10") ;
TC_Value = 10 ;
playcomplete("10.wav") ;
retard (1) ;
}
Si (inp6 == HIGH & & inp7 == HIGH & & inp8 == LOW & & inp9 == haut) / / 1 2 4 8
{//Master John & Lost In Space
Serial.println("11") ;
TC_Value = 11 ;
playcomplete("11.wav") ;
retard (1) ;
}
Si (inp6 == LOW & & inp7 == LOW & & inp8 == HIGH & & inp9 == haut) / / 1 2 4 8
{//Merry Noël
Serial.println("12") ;
TC_Value = 12 ;
playcomplete("12.wav") ;
retard (1) ;
}
Last_TC = TC_Value ;
Serial.println(Last_TC) ;
//
}
Fin de boucle
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 la lecture audio
}
Audio est fait jouer
}
void playfile(char *name) {}
voir si l’objet vague est en train de faire quelque chose
Si (wave.isplaying) {/ / audio qui déjà joue donc l’arrêter
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() ;
}