The receiver's code for Home Security with RF

Dependencies:   Camera_LS_Y201 SDFileSystem Servo hmac_md5 mbed

Committer:
jsobchuk3
Date:
Mon Dec 08 22:42:21 2014 +0000
Revision:
0:bbfc7c781872
ECE 4180 Final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsobchuk3 0:bbfc7c781872 1 class Speaker
jsobchuk3 0:bbfc7c781872 2 {
jsobchuk3 0:bbfc7c781872 3 public:
jsobchuk3 0:bbfc7c781872 4 Speaker(PinName pin) : _pin(pin) {
jsobchuk3 0:bbfc7c781872 5 // _pin(pin) means pass pin to the Speaker Constructor
jsobchuk3 0:bbfc7c781872 6 // precompute 32 sample points on one sine wave cycle
jsobchuk3 0:bbfc7c781872 7 // used for continuous sine wave output later
jsobchuk3 0:bbfc7c781872 8 for(int k=0; k<32; k++) {
jsobchuk3 0:bbfc7c781872 9 Analog_out_data[k] = int (65536.0 * ((1.0 + sin((float(k)/32.0*6.28318530717959)))/2.0));
jsobchuk3 0:bbfc7c781872 10 // scale the sine wave to 16-bits - as needed for AnalogOut write_u16 arg
jsobchuk3 0:bbfc7c781872 11 }
jsobchuk3 0:bbfc7c781872 12
jsobchuk3 0:bbfc7c781872 13 }
jsobchuk3 0:bbfc7c781872 14 // class method to play a note based on AnalogOut class
jsobchuk3 0:bbfc7c781872 15 void PlayNote(float frequency, float duration, float volume) {
jsobchuk3 0:bbfc7c781872 16 // scale samples using current volume level arg
jsobchuk3 0:bbfc7c781872 17 for(int k=0; k<32; k++) {
jsobchuk3 0:bbfc7c781872 18 Analog_scaled_data[k] = Analog_out_data[k] * volume;
jsobchuk3 0:bbfc7c781872 19 }
jsobchuk3 0:bbfc7c781872 20 // reset to start of sample array
jsobchuk3 0:bbfc7c781872 21 i=0;
jsobchuk3 0:bbfc7c781872 22 // turn on timer interrupts to start sine wave output
jsobchuk3 0:bbfc7c781872 23 Sample_Period.attach(this, &Speaker::Sample_timer_interrupt, 1.0/(frequency*32.0));
jsobchuk3 0:bbfc7c781872 24 // play note for specified time
jsobchuk3 0:bbfc7c781872 25 wait(duration);
jsobchuk3 0:bbfc7c781872 26 // turns off timer interrupts
jsobchuk3 0:bbfc7c781872 27 Sample_Period.detach();
jsobchuk3 0:bbfc7c781872 28 // sets output to mid range - analog zero
jsobchuk3 0:bbfc7c781872 29 this->_pin.write_u16(32768);
jsobchuk3 0:bbfc7c781872 30
jsobchuk3 0:bbfc7c781872 31 }
jsobchuk3 0:bbfc7c781872 32 private:
jsobchuk3 0:bbfc7c781872 33 // sets up specified pin for analog using AnalogOut class
jsobchuk3 0:bbfc7c781872 34 AnalogOut _pin;
jsobchuk3 0:bbfc7c781872 35 // set up a timer to be used for sample rate interrupts
jsobchuk3 0:bbfc7c781872 36 Ticker Sample_Period;
jsobchuk3 0:bbfc7c781872 37
jsobchuk3 0:bbfc7c781872 38 //variables used by interrupt routine and PlayNote
jsobchuk3 0:bbfc7c781872 39 volatile int i;
jsobchuk3 0:bbfc7c781872 40 short unsigned Analog_out_data[32];
jsobchuk3 0:bbfc7c781872 41 short unsigned Analog_scaled_data[32];
jsobchuk3 0:bbfc7c781872 42
jsobchuk3 0:bbfc7c781872 43 // Interrupt routine
jsobchuk3 0:bbfc7c781872 44 // used to output next analog sample whenever a timer interrupt occurs
jsobchuk3 0:bbfc7c781872 45 void Sample_timer_interrupt(void) {
jsobchuk3 0:bbfc7c781872 46 // send next analog sample out to D to A
jsobchuk3 0:bbfc7c781872 47 this->_pin.write_u16(Analog_scaled_data[i]);
jsobchuk3 0:bbfc7c781872 48 // increment pointer and wrap around back to 0 at 32
jsobchuk3 0:bbfc7c781872 49 i = (i+1) & 0x01F;
jsobchuk3 0:bbfc7c781872 50 }
jsobchuk3 0:bbfc7c781872 51 };
jsobchuk3 0:bbfc7c781872 52