alarm
Dependencies: PinDetect SDFileSystem mbed wave_player
main.cpp
- Committer:
- jhawkins38
- Date:
- 2014-12-02
- Revision:
- 0:a2ded96ce136
File content as of revision 0:a2ded96ce136:
#include "mbed.h" #include "PinDetect.h" #include "SDFileSystem.h" #include <vector> #include <string> #include "wave_player.h" DigitalOut myled(LED1); PwmOut alarm(p22); AnalogOut DACout(p18); PinDetect snooze(p23); PinDetect stop(p24); SDFileSystem sd(p5, p6, p7, p8, p12, "sd"); //SD card volatile bool t = true; volatile bool play = true; volatile float vol = .52; volatile bool insert; volatile int index; wave_player waver(&DACout); int num = 0; vector<string> filenames; //filenames are stored in a vector string void read_file_names(char *dir) { DIR *dp; struct dirent *dirp; dp = opendir(dir); //read all directory and file names in current directory into filename vector while((dirp = readdir(dp)) != NULL) { filenames.push_back(string(dirp->d_name)); num++; } num= num; } void snooze_hit_callback(void) { alarm = 0.0; wait(20); if (insert == true) { play =! play; wait(20); play =! play; } } void stop_hit_callback(void){ //alarm = 0.0; //state = off; myled = 1; vol = 0.0; //wait(1000); t = false; if (insert == true){ play =! play; } } int main() { snooze.mode(PullUp); stop.mode(PullUp); //pb3.mode(PullUp); //Delay for initial pullup to take effect wait(.01); //Setup Interrupt callback functions for a pb hit snooze.attach_deasserted(&snooze_hit_callback); stop.attach_deasserted(&stop_hit_callback); //pb3.attach_deasserted(&pb3_hit_callback); //Start sampling pb inputs using interrupts snooze.setSampleFrequency(); //default is 20KHz sampling stop.setSampleFrequency(); //pb3.setSampleFrequency(); //pushbuttons now setup and running while(t == true) { insert = sd.SD_inserted(); if ((insert == true) && (play ==true)) { read_file_names("/sd/myMusic"); //string str2 = filenames[index].substr(0,filenames[index].length()-4); FILE *wave_file; string filepath = "/sd/mymusic/"; wave_file = fopen( (filepath+filenames[index]).c_str(), "r"); waver.play(wave_file, &play); if (feof(wave_file)) // when playback ends file will close and play will equal false { fclose(wave_file); //play=!play; } myled != myled; } if ((insert == false)&&(play == true)) { // generate a 500Hz tone using PWM hardware output for (int j=0; j<26; j=j+2) { alarm.period(1.0/500.0); // 500hz period alarm =vol; //50% duty cycle - max volume wait(.5); //alarm=0.0; // turn off audio alarm.period(0.0/500.0); wait(.5); } // end of for // two tone police siren effect - two periods or two frequencies // increase volume - by changing the PWM duty cycle for (int i=0; i<26; i=i+2) { alarm = vol; alarm.period(1.0/969.0); wait(.5); alarm.period(1.0/800.0); wait(.5); } //end of for //alarm = 0.0; } //end of if }// end of while while (t == false) { alarm = 0.0; //fclose(wave_file); } }// end of main