#include #include #include "util.h" #include "wave.h" AF_Wave card; File f; Wavefile wave; // only one! #define playcomplete(x) ROM_playcomplete(PSTR(x)) // save RAM by using program memory strings #define servo 7 #define redled 9 #define eyeleds 18 #define mouthleds 17 #define midmouthleds 16 #define outermouthleds 19 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); pinMode(servo, OUTPUT); pinMode(eyeleds, OUTPUT); pinMode(outermouthleds, OUTPUT); pinMode(midmouthleds, OUTPUT); pinMode(mouthleds, OUTPUT); randomSeed(analogRead(0)); 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); } } void pulseServo(uint8_t servopin, uint16_t p) { digitalWrite(servopin, HIGH); delayMicroseconds(600); while (p--) { delayMicroseconds(4); } digitalWrite(servopin, LOW); delay(18); } uint8_t pumpkinstate = 0; void loop() { int distsensor, i; long time; /* for (i=0; i<50; i++) { pulseServo(servo,0); } for (i=0; i<50; i++) { pulseServo(servo,400); } return; */ distsensor = 0; for (i=0; i<8; i++) { distsensor += analogRead(0); delay(50); } distsensor /= 8; putstring("Sensor = "); Serial.println(distsensor); if (distsensor <= 500) { digitalWrite(eyeleds, HIGH); } if (distsensor > 500) { digitalWrite(eyeleds, LOW); pumpkinstate = 1; // nobody there. one out of 200 times play one of the scary sounds (once every few minutes) i = random(200); //Serial.println(i); if (i == 0) { i = random(3); if (i == 0) { playcomplete("CACKLE.WAV"); } else if (i == 1) { playcomplete("GOSTMOAN.WAV"); } else { playcomplete("CATSCREM.WAV"); } } } else if ((distsensor > 300) && (distsensor < 400)) { if (pumpkinstate <= 1) { // play "hello children" playcomplete("HELOCHIL.WAV"); } else { i = random(60); // more often //Serial.println(i); if (i == 0) { i = random(3); if (i == 0) { playcomplete("KNOCKING.WAV"); } else if (i == 1) { playcomplete("MONSTER.WAV"); } else { playcomplete("SCREAM2.WAV"); } } } pumpkinstate = 2; } else if ((distsensor > 100) && (distsensor < 200)) { if (pumpkinstate <= 2) { // play "hello children" playcomplete("GOBACK.WAV"); } else { i = random(50); // more often //Serial.println(i); if (i == 0) { i = random(3); if (i == 0) { playcomplete("GHOULLAF.WAV"); } else if (i == 1) { playcomplete("SCREAM.WAV"); } else { playcomplete("SCREECH.WAV"); } } } pumpkinstate = 3; } else if (distsensor < 50) { if (pumpkinstate <= 3) { // play "hello children" playcomplete("HPYHALWN.WAV"); } else { i = random(30); // more often //Serial.println(i); if (i == 0) { i = random(2); if (i == 0) { playcomplete("BOOHAHA.WAV"); } else if (i == 1) { playcomplete("WELCOME.WAV"); } } } pumpkinstate = 4; } } void ROM_playcomplete(const char *romname) { char name[13], i; uint8_t volume; int v2; for (i=0; i<13; i++) { name[i] = pgm_read_byte(&romname[i]); } name[12] = 0; Serial.println(name); playfile(name); while (wave.isplaying) { volume = 0; for (i=0; i<8; i++) { v2 = analogRead(1) - 512; if (v2 < 0) v2 *= -1; if (v2 > volume) volume = v2; delay(5); } if (volume > 200) { digitalWrite(outermouthleds, HIGH); } else { digitalWrite(outermouthleds, LOW); } if (volume > 150) { digitalWrite(midmouthleds, HIGH); } else { digitalWrite(midmouthleds, LOW); } if (volume > 100) { digitalWrite(mouthleds, HIGH); } else { digitalWrite(mouthleds, LOW); } //putstring("vol = "); Serial.println(volume, DEC); } 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(); }