Aller au contenu


Photo

robot qui parle!


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 dydylan

dydylan

    Membre

  • Membres
  • 66 messages
  • Gender:Male

Posté 12 mai 2012 - 07:45

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?
définition de mon robot "un petit bout de vie dans une boite de conserve"

#2 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

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

Mon site internet : http://ferdinandpiette.com/


#3 dydylan

dydylan

    Membre

  • Membres
  • 66 messages
  • Gender:Male

Posté 27 mai 2012 - 11:09

oui quel code utiliser? :blush:
définition de mon robot "un petit bout de vie dans une boite de conserve"

#4 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

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 dydylan

dydylan

    Membre

  • Membres
  • 66 messages
  • Gender:Male

Posté 27 mai 2012 - 03:02

ben en fait, j'ai utilisé ce code, qui permet de lire tous les fichier de la carte:

# 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 :blush: ...
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