ethernet shield + wave shield (adafruit) = probleme???

Bonjour a tous, Je me lancer dans un projet utilisant un shield ethernet et un shield wave de chez adafruit, mais avant de tout acheter et de me retrouver coincé, quelqu'un a il déjà tenté l'expérience?? de ce que j'ai lu, pas mal de monde rencontrent des problèmes avec le shield ethernet + autre shield en SPI, d’où ma question. autre question, où changer la pin SS pour sélectionner les différents shields?

petite précision, j'ai déjà une arduino duelmilanove+ shield ethernet(avec sd) que j'arrive a faire fonctionner en serveur et en client.

bonjour,

Rien à craindre coté hardware ;) La shield ethernet utilise le SPI hardware (+ SS hardware) et la pin D4 pour le SS de la carte SD. La waveshield de adafruit n'est (de base) connecté à aucune patte, c'est l'utilisateur qui soude ses câbles (SPI + SS) ou il veut. Après le seul problème qu'il peut y avoir peut venir d'une saturation de la ram (la librairie qui lit les .wav demande pas mal de ram).

Je te fais un test vite fais tout de suite pour voir si cela marche ;)

Alors la je veux bien que tu test^^ un grand merci a toi pour cette réponse aussi rapide(et prometteuse!) Pour le problème de ram, je peux toujours voir du coté de uno32. Sur le papier la uno32 est super, mais je n'arrive pas a savoir si elle est aussi compatible qu'ils le disent...

Bon je viens de tester le tout et il y a un problème.

La carte sd de la waveshield est en conflit avec la puce ethernet de la ethshield et le cna de la waveshield utilise la broche de la carte sd de la ethshield ...

Sachant qu'on ne peut pas changer les broches de la ethernet shield ainsi que de la carte sd de la waveshield je suis en train de tenter de changer dans la librairie waveHC les broches du cna (qu'on peut changer lui ^^").

En gros il faudrait utiliser la carte sd de la ethshield pour lire sur le cna de la waveshield (avec les broches changer) tout en gérant le SS hardware de la puce réseau :grin: et bien sur sans placer de carte sd dans la waveshield.

Comment ça tordu ? bon ok ...

arf... Alors la ça annonce de bonne prise de tête... Merci pour le coup de main!

Miracle \o/ bon aucune incompatibilité hardware, la librairie permet de tout modifier ^^

Pour le moment j'utilise la waveshield comme ça s'en modif et ça marche, seul truc bizarre la puce ethernet semble foutre la m**** par moment ... très étrange sachant qu'il y en a déjà une sur la ethshield ... (ça sens le digitalWrite oublié quelque part !)

Donc si j'ai bien compris, suffit de gratter un peu dans le WaveHC, et c'est bon?? Si c'est ça peux tu me dire où a peu près?dans le WavePinDefs.h ?? et coté RAM, c'est correct?

Ouaip après 1h20 de prise de tête voila je confirme cela marche sans aucun changement matériel (enfin 1 fil à ne pas mettre comme prévue) et juste une ligne de soft à changer ^^
600 octets de ram disponible (c’est petit mais bon ça laisse quand même de la place ^^"")

Wave test!
Free RAM: 591 <- YEAH 600 octets de ram pour faire mumuse !
Using partition 1, type is FAT16
Files found (* = fragmented):
SI.WAV  
DO.WAV  
FA.WAV  
LA.WAV  
MI.WAV  
RE.WAV  
SO.WAV  
Got client !

Playing SI.WAV
...........
Playing DO.WAV
.........
Playing FA.WAV
.............
Playing LA.WAV
...........
Playing MI.WAV
............
Playing RE.WAV
..........
Playing SO.WAV
.............Got client !

Playing SI.WAV
...........
Playing DO.WAV
.........
Playing FA.WAV
.............
Playing LA.WAV
...........
Playing MI.WAV
............
Playing RE.WAV
..........
Playing SO.WAV
............

La modif coté waveshield voila les connections normales:
2 → LCS
3 → CLK
4 → DI
5 → LAT
10 → CCS (toi on te veux pas ici ! va donc voir en 7 ! XD)

coté librairie:
dans WavePinDefs.h ligne 14
#define SS  SS_PIN
devient

#define SS   7

et pour finir voila mon code de test (c’est l’exemple de base + ethernet allez savoir pourquoi mais je suis pas arriver à lui faire lire un fichier précis ><" ):
petit truc coté ligne de commande j’ai fait ceci:
ping 192.168.1.117 (la led verte clignote yeah !)
nc 192.168.1.117 1234 enter
p enter
(le retour doit être HIACK retour de ligne foiré ^^")
^c (coupe la cmd avant la fin du morceau sinon sa renvoie des trucs pas net)

#include <WaveHC.h>
#include <WaveUtil.h>
#include <SPI.h>
#include <Ethernet.h>
#include <FatReader.h>
#include <SdReader.h>

SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the volumes root directory
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time

uint8_t dirLevel; // indent level for file/dir names    (for prettyprinting)
dir_t dirBuf;     // buffer for directory reads

Server server(1234);

static uint8_t mac[] = { 
  0x90, 0xA2, 0xDA, 0x00, 0x22, 0x2F };
static uint8_t ip[] = { 
  192, 168, 1, 117};
static uint8_t gateway[] = { 
  192, 168, 1, 1};

/*
 * Define macro to put error messages in flash memory
 */
#define error(msg) error_P(PSTR(msg))

// Function definitions (we define them here, but the code is below)
void play(FatReader &dir);

//////////////////////////////////// SETUP
void setup() 
{
  Serial.begin(9600);           // set up Serial library at 9600 bps for debugging
  pinMode(10,OUTPUT);
  digitalWrite(10, HIGH); 

  putstring_nl("\nWave test!");  // say we woke up!

  putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  Serial.println(FreeRam());

  //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
  if (!card.init()) {         //play with 8 MHz spi (default faster!)  
    error("Card init. failed!");  // Something went wrong, lets print out why
  }

  // enable optimize read - some cards may timeout. Disable if you're having problems
  card.partialBlockRead(true);

  // Now we will look for a FAT partition!
  uint8_t part;
  for (part = 0; part < 5; part++) {   // we have up to 5 slots to look in
    if (vol.init(card, part)) 
      break;                           // we found one, lets bail
  }
  if (part == 5) {                     // if we ended up not finding one  :(
    error("No valid FAT partition!");  // Something went wrong, lets print out why
  }

  // Lets tell the user about what we found
  putstring("Using partition ");
  Serial.print(part, DEC);
  putstring(", type is FAT");
  Serial.println(vol.fatType(),DEC);     // FAT16 or FAT32?

  // Try to open the root directory
  if (!root.openRoot(vol)) {
    error("Can't open root dir!");      // Something went wrong,
  }

  // Whew! We got past the tough parts.
  putstring_nl("Files found (* = fragmented):");

  // Print out all of the files in all the directories.
  root.ls(LS_R | LS_FLAG_FRAGMENTED);

  Ethernet.begin(mac, ip,gateway);
  server.begin();
}

//////////////////////////////////// LOOP
void loop() 
{ 
  root.rewind();
  Client client = server.available();
  if (client) {
    Serial.println("Got client !");
    while (client.connected()) {
      if (client.available()) {
        client.print("HI");
        char c = client.read();
        if(c = 'p'){
          client.print("ACK");
          play(root);
          client.print("OK");
        }
      }
    }
    delay(1);
    client.stop();
  }
}

/////////////////////////////////// HELPERS
/*
 * print error message and halt
 */
void error_P(const char *str)
{
  PgmPrint("Error: ");
  SerialPrint_P(str);
  sdErrorCheck();
  while(1);
}
/*
 * print error message and halt if SD I/O error, great for debugging!
 */
void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  PgmPrint("\r\nSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  PgmPrint(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}
/*
 * play recursively - possible stack overflow if subdirectories too nested
 */
void play(FatReader &dir)
{
  FatReader file;
  while (dir.readDir(dirBuf) > 0) {    // Read every file in the directory one at a time

    // Skip it if not a subdirectory and not a .WAV file
    if (!DIR_IS_SUBDIR(dirBuf)
      && strncmp_P((char *)&dirBuf.name[8], PSTR("WAV"), 3)) {
      continue;
    }

    Serial.println();            // clear out a new line

    for (uint8_t i = 0; i < dirLevel; i++) {
      Serial.print(' ');       // this is for prettyprinting, put spaces in front
    }
    if (!file.open(vol, dirBuf)) {        // open the file in the directory
      error("file.open failed");          // something went wrong
    }

    if (file.isDir()) {                   // check if we opened a new directory
      putstring("Subdir: ");
      printEntryName(dirBuf);
      dirLevel += 2;                      // add more spaces
      // play files in subdirectory
      play(file);                         // recursive!
      dirLevel -= 2;    
    }
    else {
      // Aha! we found a file that isnt a directory
      putstring("Playing ");
      printEntryName(dirBuf);              // print it out
      if (!wave.create(file)) {            // Figure out, is it a WAV proper?
        putstring(" Not a valid WAV");     // ok skip it
      } 
      else {
        Serial.println();                  // Hooray it IS a WAV proper!
        wave.play();                       // make some noise!

        uint8_t n = 0;
        while (wave.isplaying) {// playing occurs in interrupts, so we print dots in realtime
          putstring(".");
          if (!(++n % 32))Serial.println();
          delay(100);
        }       
        sdErrorCheck();                    // everything OK?
        // if (wave.errors)Serial.println(wave.errors);     // wave decoding errors
      }
    }
  }
}

Alors la un grand merci! J'ai plus qu'à acheter la shieldwave, c'est royal^^ Encore merci

Got the same problem and finally found the solution with the help of you guys. Merci beaucoup.