If anyone could code this and design the Circuit....!
found this online:
#include <FatReader.h> #include <SdReader.h> #include <avr/pgmspace.h> #include "WaveUtil.h" #include "WaveHC.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 int motion_1 = 8; int light_1 = 13; int led2 = 6; int led3 = 7; int led = 9; int randomSound = 1; int chooseWAV = (randomSound); int delayTime = 201; int flash = 31; int randomChoose = 1; int chooseLED = (randomChoose); int flashTime = 1; int sporaticCounter = 0; int strikeCounter = 0; // 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() { pinMode (motion_1,INPUT); pinMode (light_1, OUTPUT); // set up serial port Serial.begin(9600); putstring_nl("WaveHC with "); Serial.print("NUMBUTTONS, DEC"); putstring_nl("buttons"); 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(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); // pin13 LED pinMode(13, OUTPUT); pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); // 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() { delay(3000); //this delay is to let the sensor settle down before taking a reading int sensor_1 = digitalRead(motion_1);\ if (sensor_1 == LOW){ Serial.println("nomotion"); delay (200); } else if (sensor_1 == HIGH){ Serial.print("motiondetected"); strikeCounter = 0; while (strikeCounter < random (3,25)){ sporaticCounter = 0; delayTime = random (30,5000); flash = random (10,50); flashTime = random (1,3); int randomChoose = random (1,4); if (randomChoose == 1){ chooseLED = led; } else if (randomChoose == 2){ chooseLED = led2; } else if (randomChoose == 3){ chooseLED = led3; } while (flashTime > sporaticCounter){ digitalWrite(chooseLED, HIGH); // turn the LED on (HIGH is the voltage level) delay (flash); digitalWrite(chooseLED, LOW); delay (flash); sporaticCounter = sporaticCounter + 1; } delay (delayTime); strikeCounter = strikeCounter + 1; Serial.println(strikeCounter); } //STORM!!!!! putstring("storm"); digitalWrite(led, HIGH); // 1st Flash delay (5); digitalWrite(led2, HIGH); delay (10); digitalWrite(led3, HIGH); delay (50); digitalWrite(led, LOW); digitalWrite(led2, LOW); delay (30); digitalWrite(led3, LOW); delay (70); digitalWrite(led3, HIGH); // 2nd Flash delay (5); digitalWrite(led2, HIGH); delay (10); digitalWrite(led, HIGH); delay (50); digitalWrite(led, LOW); digitalWrite(led2, HIGH); delay (30); digitalWrite(led3, LOW); delay (20); digitalWrite(led, HIGH); // 3rd Flash delay (5); digitalWrite(led2, HIGH); delay (10); digitalWrite(led3, HIGH); delay (50); digitalWrite(led, LOW); digitalWrite(led2, LOW); delay (30); digitalWrite(led3, LOW); delay (10); digitalWrite(led2, HIGH); // 4th Flash delay (5); digitalWrite(led, HIGH); delay (10); digitalWrite(led3, HIGH); delay (50); digitalWrite(led, LOW); digitalWrite(led2, LOW); delay (30); digitalWrite(led3, HIGH); delay (100); digitalWrite(led, HIGH); // 5th Flash delay (5); digitalWrite(led2, HIGH); delay (10); digitalWrite(led3, HIGH); delay (50); digitalWrite(led, LOW); digitalWrite(led2, LOW); delay (30); digitalWrite(led3, LOW); delay (100); int randomSound = random (1,9); if (randomSound == 1){ playcomplete("01.WAV"); putstring_nl("DO"); } else if (randomSound == 2){ playcomplete("02.WAV"); putstring_nl("RE"); } else if (randomSound == 3){ playcomplete("03.WAV"); putstring_nl("MI"); } else if (randomSound == 4){ playcomplete("04.WAV"); putstring_nl("MI"); } else if (randomSound == 5){ playcomplete("05.WAV"); putstring_nl("MI"); } else if (randomSound == 6){ playcomplete("06.WAV"); putstring_nl("MI"); } else if (randomSound == 7){ ; playcomplete("07.WAV"); putstring_nl("MI"); } else if (randomSound == 8){ playcomplete("08.WAV"); putstring_nl("MI"); } delay(500); digitalWrite(light_1,LOW); digitalWrite(led,LOW); digitalWrite(led3,LOW); digitalWrite(led2,LOW); delay(3000); } } // 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(); }