art project arduino- pause waveshield- sensor triggered

Status
Niet open voor verdere reacties.

donleonard

Nieuwe gebruiker
Lid geworden
8 dec 2008
Berichten
2
voor een kunstwerk
The dancing white man
http://vimeo.com/1991582?pg=embed&sec=1991582
ben ik bezig met het inbouwen van een sensor en een sd card reader[waveshield]


de Wave Shield kit en de Arduino board doen het goed , en een Maxbotics EZ1 http://www.maxbotix.com sensor met analog signal output , en een relay http://www.eztronics.nl/webshop/catalog/product_info.php/products_id/78 /dual relay board.

ik wil graag het volgende:
als de sensor beweging ziet:
-de tl- 's gaan aan
-de robot begint te bewegen,[relay =on].
-de waveshield[sd card speler] start het spelen van de sd cart.d
[dus het weet welk geluid het laatst gespeeld is.[ uit de meerdere geluiden op de sd card ]]
-na +- 7 seconds allese stopt.. [the relay slaat weer om en de wavecard pauseert]
dan waht +- 8 seconden start het aflezen van "if sensor" sensor.

Iik vond 3 schriptjes die ik volgens mij moet combineren
thanks to http://www.ladyada.net/make/waveshield/examples.html

the Digital audio player sketch
Code:
#include <AF_Wave.h>
#include <avr/pgmspace.h>
#include "util.h"
#include "wave.h"

AF_Wave card;
File f;
Wavefile wave;      // only one!

#define redled 9

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Wave test!");

  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(redled, OUTPUT);
  
  if (!card.init_card()) {
    putstring_nl("Card init. failed!"); return;
  }
  if (!card.open_partition()) {
    putstring_nl("No partition!"); return;
  }
  if (!card.open_filesys()) {
    putstring_nl("Couldn't open filesys"); return;
  }

 if (!card.open_rootdir()) {
    putstring_nl("Couldn't open dir"); return;
  }

  putstring_nl("Files found:");
  ls();
}

void ls() {
  char name[13];
  int ret;
  
  card.reset_dir();
  putstring_nl("Files found:");
  while (1) {
    ret = card.get_next_name_in_dir(name);
    if (!ret) {
       card.reset_dir();
       return;
    }
    Serial.println(name);
  }
}

uint8_t tracknum = 0;

void loop() { 
   uint8_t i, r;
   char c, name[15];


   card.reset_dir();
   // scroll through the files in the directory
   for (i=0; i<tracknum+1; i++) {
     r = card.get_next_name_in_dir(name);
     if (!r) {
       // ran out of tracks! start over
       tracknum = 0;
       return;
     }
   }
   putstring("\n\rPlaying "); Serial.print(name);
   // reset the directory so we can find the file
   card.reset_dir();
   playcomplete(name);
   tracknum++;
}

void playcomplete(char *name) {
  playfile(name);
  while (wave.isplaying) {
     putstring(".");
     delay(100);
   }
  card.close_file(f);
}

void playfile(char *name) {
   f = card.open_file(name);
   if (!f) {
      putstring_nl(" Couldn't open file"); return;
   }
   if (!wave.create(f)) {
     putstring_nl(" Not a valid WAV"); return;
   }
   // ok time to play!
   wave.play();
}



the sensor read sketch

Code:
//Output
int statusLed = 13;

//intput
int ez1Analog = 0;

void setup() {
pinMode(statusLed,OUTPUT);statusLed
pinMode(ez1Analog,INPUT);

beginSerial(9600);
}

void loop() {
int val = analogRead(ez1Analog);
if (val > 0) {
// The Maxbotix reports 512 steps of information on AN
// but we read that as 1024. Each step is 1", so we need
// to divide by 2 to get the correct rough range in inches.
//
// this value should also be calibrated for your particular
// sensor and enclosure
val = val* 2.24;
Serial.println(val); // cm
}

blinkLed(statusLed,val);
}

void blinkLed(int pin, int ms) {
digitalWrite(pin,LOW); // turn it off it was on
digitalWrite(pin,HIGH);
delay(ms);
digitalWrite(pin,LOW);
delay(ms);
}

and
Saving & restoring the play position

als je wilt weten waar je je in de .wave bevindt , deze info krijg je met in wave.getSize() (the number of bytes in the entire wave) en wave.remainingBytesInChunk (hhoeveel bytes zijn er over om te spelen)
je kunt de huidige locatie in de wave vinden in: wave.seek(), the Arduino start meteen . Dus, wave.seek(0) brengt je naar het begin, wave.seek(wave.getSize()/2) brengt je naar det midden van een geluid

ik hoop dat iemand me verder kan helpen
ben een o0 op het gebied van programmeren


alvast bedankt
Leonard
 
Laatst bewerkt:
Beste "Donleonard",

Helpmij is een nederlands forum, er wordt dus ook van je verwacht dat je je vraag in het nederlands stelt.

Je kunt hem hier alsnog in het nederlands stellen, zo niet dan sluit ik deze vraag.

Your question has to be in dutch since this is a dutch forum, otherwise I'll have to close this question
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan