Wave Shield + IR Kit

Parlez nous de vos projets et de vos idées, imaginez des applications

Re: Wave Shield + IR Kit

Message non lude dam » Mer 25 Jan 2012 15:53

bon maintenant ça ne marche plus, quand je reinitialise, il lance directement un son alors que la faisceau n'est pas coupé :cry:
dam
 
Messages: 17
Inscription: Mer 4 Jan 2012 17:14

Re: Wave Shield + IR Kit

Message non lude dam » Mer 25 Jan 2012 16:42

La je coince car je pensais que le son se lançait en supposant que la LED ne s'éclaire pas instantanément et que du coup le détecteur est en LOW. Mais après avoir laissé tourné le son, il lance directement le suivant.
J'ai ré-uploader le code de Ken Shirrif, la barrière marche bien, donc aucun problème au niveau des composants. Le problème ne vient pas non plus du shield car j'ai tester la barrière en montant les fils sur le shield.
Du coup je sais plus trop quoi faire
dam
 
Messages: 17
Inscription: Mer 4 Jan 2012 17:14

Re: Wave Shield + IR Kit

Message non lude Lionel » Mer 25 Jan 2012 16:47

Mettez votre code actuel complet ici
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Wave Shield + IR Kit

Message non lude dam » Mer 25 Jan 2012 16:58

Code: Tout sélectionner
#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"
#include <IRremote.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 filesystem on the card
FatReader f;      // This holds the information for the file we're play

WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time

#define DEBOUNCE 100  // button debouncer
#define PIN_IR 3
#define PIN_DETECT 7
#define PIN_STATUS 13

IRsend irsend;
// this handy function will return the number of bytes currently free in RAM, great for debugging!   
int freeRam(void)
{
  extern int  __bss_end;
  extern int  *__brkval;
  int free_memory;
  if((int)__brkval == 0) {
    free_memory = ((int)&free_memory) - ((int)&__bss_end);
  }
  else {
    free_memory = ((int)&free_memory) - ((int)__brkval);
  }
  return free_memory;
}

void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  putstring("\n\rSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  putstring(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}

void setup() {
  // set up serial port
  Serial.begin(9600);
  putstring_nl("WaveHC with IR Beam");
 
   putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
 
  // Set the output pins for the DAC control. This pins are defined in the library
  pinMode(2, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(PIN_DETECT, INPUT);
  pinMode(PIN_STATUS, OUTPUT);
  irsend.enableIROut(38);
  irsend.mark(0);
 
  // pin13 LED
  pinMode(13, OUTPUT);
 
  // enable pull-up resistors on switch pins (analog inputs)
  digitalWrite(14, HIGH);
  digitalWrite(15, HIGH);
  digitalWrite(16, HIGH);
  digitalWrite(17, HIGH);
  digitalWrite(18, HIGH);
  digitalWrite(19, HIGH);
 
  //  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!) 
    putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
    sdErrorCheck();
    while(1);                            // then 'halt' - do nothing!
  }
 
  // 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  :(
    putstring_nl("No valid FAT partition!");
    sdErrorCheck();      // Something went wrong, lets print out why
    while(1);                            // then 'halt' - do nothing!
  }
 
  // 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)) {
    putstring_nl("Can't open root dir!"); // Something went wrong,
    while(1);                             // then 'halt' - do nothing!
  }
 
  // Whew! We got past the tough parts.
  putstring_nl("Ready!");
}

void loop() {
     //putstring(".");            // uncomment this to see if the loop isnt running
   int Song = random(0, 5);  // choose a random song
   int Coupure = digitalRead(PIN_DETECT);
   if (Coupure == LOW) {
   switch (Song)
   {
      case 1: playcomplete("1.WAV"); break;
      case 2: playcomplete("2.WAV"); break;
      case 3: playcomplete("3.WAV"); break;
      case 4: playcomplete("4.WAV"); break;
   }
}
}




// Plays a full file from beginning to end with no pause.
void playcomplete(char *name) {
  // call our helper to find and play this name
  playfile(name);
  while (wave.isplaying) {
  // do nothing while its playing
  }
  // now its done playing
}

void playfile(char *name) {
  // see if the wave object is currently doing something
  if (wave.isplaying) {// already playing something, so stop it!
    wave.stop(); // stop it
  }
  // look in the root directory and open the file
  if (!f.open(root, name)) {
    putstring("Couldn't open file "); Serial.print(name); return;
  }
  // OK read the file and turn it into a wave object
  if (!wave.create(f)) {
    putstring_nl("Not a valid WAV"); return;
  }
 
  // ok time to play! start playback
  wave.play();
}
dam
 
Messages: 17
Inscription: Mer 4 Jan 2012 17:14

Re: Wave Shield + IR Kit

Message non lude dam » Mer 1 Fév 2012 18:24

étant donné que je ne suis pas arrivé a refaire fonctionner l'installation avec ce code j'ai essayé de m'y prendre autrement
Code: Tout sélectionner
#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"
#include <IRremote.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 filesystem on the card
FatReader f;      // This holds the information for the file we're play

WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time

#define DEBOUNCE 100  // button debouncer
#define PIN_IR 3
#define PIN_DETECT 7
//#define PIN_STATUS 13

IRsend irsend;
// this handy function will return the number of bytes currently free in RAM, great for debugging!   
int freeRam(void)
{
  extern int  __bss_end;
  extern int  *__brkval;
  int free_memory;
  if((int)__brkval == 0) {
    free_memory = ((int)&free_memory) - ((int)&__bss_end);
  }
  else {
    free_memory = ((int)&free_memory) - ((int)__brkval);
  }
  return free_memory;
}

void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  putstring("\n\rSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  putstring(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}

void setup() {
  // set up serial port
 // Serial.begin(9600);
  //putstring_nl("WaveHC with IR Beam");
 
   //putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  //Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
 
  // Set the output pins for the DAC control. This pins are defined in the library
  pinMode(2, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(PIN_DETECT, INPUT);
 // pinMode(PIN_STATUS, OUTPUT);
  irsend.enableIROut(38);
  irsend.mark(0);
 
  // pin13 LED
  //pinMode(13, OUTPUT);
 
  // enable pull-up resistors on switch pins (analog inputs)
 //digitalWrite(3, HIGH);
 //  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!) 
    putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
    sdErrorCheck();
    while(1);                            // then 'halt' - do nothing!
  }
 
  // enable optimize read - some cards may timeout. Disable if you're having problems
  card.partialBlockRead(false);
 
// 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  :(
    putstring_nl("No valid FAT partition!");
    sdErrorCheck();      // Something went wrong, lets print out why
    while(1);                            // then 'halt' - do nothing!
  }
 
  // 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)) {
    putstring_nl("Can't open root dir!"); // Something went wrong,
    while(1);                             // then 'halt' - do nothing!
  }
 
  // Whew! We got past the tough parts.
  putstring_nl("Ready!");

}

void loop() {
     //putstring(".");            // uncomment this to see if the loop isnt running
   int Song = random(0, 9);  // choose a random song
   int Coupure = digitalRead(PIN_DETECT);
   
   if (Coupure == LOW) {
   switch (Song)
   {
      case 0: playfile("1.WAV") ; break;
      case 1: playfile("2.WAV") ; break;
      case 2: playfile("3.WAV") ; break;
      case 3: playfile("4.WAV") ; break;
     case 4: playfile("5.WAV"); break;
     case 5: playfile("6.WAV"); break;
     case 6: playfile("7.WAV"); break;
     case 7: playfile("8.WAV"); break;
   }
}
}
 




// Plays a full file from beginning to end with no pause.
void playcomplete(char *name) {
  // call our helper to find and play this name
  playfile(name);
  while (wave.isplaying) {
  // do nothing while its playing
  }
  // now its done playing
}

void playfile(char *name) {
 
  // see if the wave object is currently doing something
  if (wave.isplaying) { // already playing something, so stop it!
   wave.stop();// stop it
  }
  // look in the root directory and open the file
  if (!f.open(root, name)) {
    putstring("Couldn't open file "); Serial.print(name); return;
  }
  // OK read the file and turn it into a wave object
  if (!wave.create(f)) {
    putstring_nl("Not a valid WAV"); return;
  }
 
  // ok time to play! start playback
   wave.play();
}


pour chaque "case" j'utilise la fonction playfile au lieu de playcomplete. Le problème c'est que lorsqu'une personne coupe le faisceau le son est joué tant que le faisceau reste coupé, soit à peine une seconde. Du coup je pensait mettre un délai avant le break de cette manière afin que le son soit joué pendant 10 secondes.

Code: Tout sélectionner
case 0: playfile("1.WAV") ; delay(10000); break;


Bizarrement au lieu de jouer le son a la coupure du faisceau, il joue directement chaque son 10 secondes et passe automatiquement au suivant :/
dam
 
Messages: 17
Inscription: Mer 4 Jan 2012 17:14

Précédente

Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron