Tadhg Jones
/
Distance
Measure Distance
Revision 8:f3ab61374cd0, committed 2020-12-16
- Comitter:
- tadhgjones
- Date:
- Wed Dec 16 10:38:23 2020 +0000
- Parent:
- 7:71da0dbf4400
- Commit message:
- EE3023
Changed in this revision
diff -r 71da0dbf4400 -r f3ab61374cd0 Speaker.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Speaker.h Wed Dec 16 10:38:23 2020 +0000 @@ -0,0 +1,52 @@ +class Speaker +{ +public: + Speaker(PinName pin) : _pin(pin) { +// _pin(pin) means pass pin to the Speaker Constructor +// precompute 32 sample points on one sine wave cycle +// used for continuous sine wave output later + for(int k=0; k<32; k++) { + Analog_out_data[k] = int (65536.0 * ((1.0 + sin((float(k)/32.0*6.28318530717959)))/2.0)); + // scale the sine wave to 16-bits - as needed for AnalogOut write_u16 arg + } + + } +// class method to play a note based on AnalogOut class + void PlayNote(float frequency, float duration, float volume) { + // scale samples using current volume level arg + for(int k=0; k<32; k++) { + Analog_scaled_data[k] = Analog_out_data[k] * volume; + } + // reset to start of sample array + i=0; + // turn on timer interrupts to start sine wave output + Sample_Period.attach(this, &Speaker::Sample_timer_interrupt, 1.0/(frequency*32.0)); + // play note for specified time + wait(duration); + // turns off timer interrupts + Sample_Period.detach(); + // sets output to mid range - analog zero + this->_pin.write_u16(32768); + + } +private: +// sets up specified pin for analog using AnalogOut class + AnalogOut _pin; + // set up a timer to be used for sample rate interrupts + Ticker Sample_Period; + + //variables used by interrupt routine and PlayNote + volatile int i; + short unsigned Analog_out_data[32]; + short unsigned Analog_scaled_data[32]; + +// Interrupt routine +// used to output next analog sample whenever a timer interrupt occurs + void Sample_timer_interrupt(void) { + // send next analog sample out to D to A + this->_pin.write_u16(Analog_scaled_data[i]); + // increment pointer and wrap around back to 0 at 32 + i = (i+1) & 0x01F; + } +}; +
diff -r 71da0dbf4400 -r f3ab61374cd0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 16 10:38:23 2020 +0000 @@ -0,0 +1,23 @@ +#include "mbed.h" +#include "hcsr04.h" +#include "Speaker.h" + +HCSR04 usensor(p25,p6); +Serial pc(USBTX, USBRX); +Speaker mySpeaker(p18); + +unsigned int dist; +int main() +{ + + while(1) { + usensor.start(); + wait_ms(50); + dist=usensor.get_dist_cm(); + + mySpeaker.PlayNote(329.63, 0.5, 1.0); + + pc.printf("cm:%ld\n",dist ); + + } +} \ No newline at end of file
diff -r 71da0dbf4400 -r f3ab61374cd0 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Dec 16 10:38:23 2020 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/078e4b97a13e