Bonjour, je souhaite faire un robot qui parle, pour se faire j'ai une carte arduino UNO et un shield wave adafruit, une piste son en WAV sur une carte sd!
mais je ne sais pas comment utiliser, comment programmer arduino pour faire jouer ce son...
pouvez-vous m'aider?
robot qui parle!
Débuté par dydylan, mai 12 2012 07:45
4 réponses à ce sujet
#1
Posté 12 mai 2012 - 07:45
définition de mon robot "un petit bout de vie dans une boite de conserve"
#2
Posté 12 mai 2012 - 08:15
Tout ce dont tu as besoin pour démarrer se trouve sur le site officiel d'adafruit :
http://www.ladyada.net/make/waveshield/design.html
http://www.ladyada.net/make/waveshield/use.html
++
Black Templar
http://www.ladyada.net/make/waveshield/design.html
http://www.ladyada.net/make/waveshield/use.html
++
Black Templar
Mon site internet : http://ferdinandpiette.com/
#3
Posté 27 mai 2012 - 11:09
oui quel code utiliser?
définition de mon robot "un petit bout de vie dans une boite de conserve"
#4
Posté 27 mai 2012 - 11:24
Essaye de les comprendre plutôt que de copier/coller à l'aveugle. Si tu arrives à les comprendre un minimum, tu arriveras à voir lequel est le plus adapté.
Esprit
*Rêve d'en caser un dans un robot*
#5
Posté 27 mai 2012 - 03:02
ben en fait, j'ai utilisé ce code, qui permet de lire tous les fichier de la carte:
mais là, une énorme quantité d'erreur apparaissent...
petit morceau de la liste des erreurs:
aidez moi, s'il vous plait ...
# Include <FatReader.h> # Include <SdReader.h> # Include <avr/pgmspace.h> # Include "WaveUtil.h" # include "WaveHC.h" SdReader carte; / / Cet objet contient les informations de la carte vol FatVolume; / / Ceci est l'information pour la partition sur la carte racine FatReader; / / Ceci est l'information pour le système de fichiers sur la carte dirLevel uint8_t; / / niveau de retrait pour le fichier et les noms de dir (pour prettyPrinting) dirBuf dir_t; / / buffer pour le répertoire lit WaveHC vague; / / Il s'agit de la seule vague (audio) objet, puisque nous allons jouer qu'un seul à un moment / Définitions / fonction (nous les définissons ici, mais le code est ci-dessous) nulle LSR (FatReader & D); nulle jeu (FatReader & dir); vide de configuration () { série . commencer (9600); / / Mise en place de bibliothèque série à 9600 bps pour le débogage putstring_nl ( "test \ nWave!" ); / / dire nous nous sommes réveillés! putstring ( "Free RAM:" ); / / Ceci peut faciliter le débogage, à court de RAM est mauvaise série . println (FreeRAM ()); / / Définit les broches de sortie pour le contrôle du CAD. Cette repères sont définis dans la bibliothèque pinMode (2, SORTIE ); pinMode (3, SORTIE ); pinMode (4, SORTIE ); pinMode (5, SORTIE ); / / If (! Card.init (true)) {/ / lecture avec 4 MHz spi si 8MHz ne fonctionne pas pour vous , si (! card.init ()) { / / jeu avec 8 MHz spi (par défaut plus rapide!) putstring_nl ( "Échec de l'initialisation de carte.!" ); / / Quelque chose s'est mal passé, permet d'imprimer les raisons pour lesquelles sdErrorCheck (); alors (1); / / puis «arrêt» - ne rien faire! } / / Enable optimiser lire - Certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes card.partialBlockRead ( vrai ); / / Maintenant nous allons regarder pour une partition FAT! partie uint8_t; pour (une partie = 0; partie <5; partie + +) { / / nous avons jusqu'à 5 emplacements pour regarder dans le cas (vol.init (carte, qui fait partie)) break; / / nous avons trouvé un, permet de renflouer } si (partie == 5) { / / si nous avons fini par ne pas trouver un: ( putstring_nl ( "Pas de partition FAT valide!" ); sdErrorCheck (); / / Quelque chose s'est mal passé, permet d'imprimer les raisons pour lesquelles tout (1); / / puis «arrêt» - ne rien faire! } / / Permet de dire à l'utilisateur de ce nous avons trouvé putstring ( «Utilisation de la partition" ); série . d'impression (partie, décembre ); putstring ( ", le type est FAT" ); série . println (vol.fatType (), décembre ); / / 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 s'est mal passé, alors que (1); / / puis «arrêt» - ne rien faire! } / / Ouf! Nous avons passé les parties dures. putstring_nl ( "Fichiers trouvés:" ); dirLevel = 0; / / Imprimer tous les fichiers dans tous les répertoires. LSR (racine); } / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / LOOP vide boucle () { root.rewind (); jouer (racine); } / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / AIDANTS / / Cette fonction pratique vous renvoyer le nombre d'octets actuellement libres dans la mémoire RAM, idéal pour le débogage! int FreeRAM ( vide ) { extern int __bss_end; extern int * __brkval; int free_memory; si (( int ) __brkval == 0) { free_memory = (( int ) & free_memory) - (( int ) & __bss_end); } d'autre { free_memory = (( int ) & free_memory) - (( int ) __brkval); } retourner free_memory; } / * * message d'erreur d'impression et de halte si une carte SD I / O error, grande pour le débogage! * / vide sdErrorCheck ( vide ) { si (card.errorCode ()!) retour ; putstring ( "\ n \ RSD I / O error:" ); série . d'impression (card.errorCode (), HEX ); putstring ( "," ); série . println (card.errorData (), HEX ); tandis que (1); } / * print * champ Nom dir_t. La sortie est au format 8.3, si semblable à Sound.wav ou nom_fichier.dat * / vide printName (dir_t & dir) { pour (uint8_t i = 0; i <11; i + +) { / / format 8.3 dispose de 8 +3 = 11 lettres dans l' , si (dir.name [i] == '' ) continuer; / / n'est plus imprimer les espaces dans le nom , si (i == 8) de série . d'impression ( '.' ); / / après la lettre du 8, placer un point de série . d'impression (dir.name [i]); / / imprimer le n-ième chiffre } si (DIR_IS_SUBDIR (dir)) de série . d'impression ( '/' ); / / répertoires obtenir un / à la fin } / * liste * de manière récursive - débordement de pile possible que si les sous-répertoires imbriqués trop * / vide LSR (FatReader & D) { r int8_t; / / indique le niveau de récursivité tandis que ((r = d.readDir (dirBuf))> 0) { / / lire le fichier suivant dans le répertoire / / sous-répertoires saut. et .. si (dirBuf.name [0] == '.' ) continuer; pour (uint8_t i = 0; i <dirLevel; i + +) de série . d'impression ( ' ); / / c'est pour prettyPrinting, mis des espaces à l'avant printName (dirBuf); / / imprimer le nom du fichier que nous venons de trouver de série . println (); / / et une nouvelle ligne si (DIR_IS_SUBDIR (dirBuf)) { / / Nous allons recurse sur n'importe quel direcory s FatReader; / / créer un objet nouveau répertoire pour stocker les informations dirLevel + = 2; / / tiret 2 places pour des tirages futurs si (s.open (vol, dirBuf)) LSR (s); ! / / lister tous les fichiers dans ce répertoire maintenant dirLevel - = 2; / / supprimer l'indentation supplémentaire } } sdErrorCheck (); / / sommes-nous doign OK? } / * * jouer de manière récursive - débordement de pile possible que si les sous-répertoires imbriqués trop * / vide jeu (FatReader & dir) { Fichier FatReader; tandis que (dir.readDir (dirBuf)> 0) { / / lire tous les fichiers dans le répertoire un à la fois / / sauter. et .. répertoires si (dirBuf.name [0] == '.' ) continuer; Série . println (); / / efface une nouvelle ligne pour (uint8_t i = 0; i <dirLevel; i + +) de série . d'impression ( ' ); / / c'est pour prettyPrinting, mis des espaces à l'avant si {(File.Open (vol, dirBuf)!) / / ouvrir le fichier dans le répertoire de série . println ( "File.Open a échoué" ); / / quelque chose n'allait pas: ( tout en (1); / / halt } si (file.isDir ()) { / / vérifier si nous avons ouvert un nouveau répertoire putstring ( "Subdir:" ); printName (dirBuf); dirLevel + = 2; / / ajouter d'autres espaces / Les Dossiers / jeux en sous-répertoire de jeu (fichier); / / récursive! dirLevel - = 2; } d'autre { / / Ah! nous avons trouvé un fichier qui n'est pas un répertoire putstring ( "Lecture en cours» ); printName (dirBuf); / / l'imprimer si (! wave.create (fichier)) { / / Figure dehors, est-ce un bon WAV? putstring ( " Pas valable WAV " ); / / ok, il ignorer } autre { série . println (); ! / / Hourra il EST un bon WAV wave.play (); / / faire du bruit! tandis que (wave.isplaying) { / / playing se produit des interruptions, afin que nous imprimer des points en temps réel putstring ( "." ); retard (100); } sdErrorCheck (); ? / / tout est OK / / if (wave.errors) Serial.println (wave.errors) / / vague des erreurs de décodage } } } }
mais là, une énorme quantité d'erreur apparaissent...
petit morceau de la liste des erreurs:
Exception in thread "Thread-5" java.lang.StackOverflowError at java.util.regex.Pattern$Loop.match(Pattern.java:4275) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345) at
aidez moi, s'il vous plait ...
définition de mon robot "un petit bout de vie dans une boite de conserve"
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users