![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
10/29/20 12:23
Dependencies: mbed DRV2605 HCSR04 HC_SR04_Ultrasonic_Library
Diff: main.cpp
- Revision:
- 0:00bd403e0742
- Child:
- 1:fbdfdb9ecbd2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 29 16:23:43 2020 +0000 @@ -0,0 +1,57 @@ + +//Theremin style demo using HC-SR04 Sonar and a speaker +// moving a hand away/towards sonar changes audio frequency +#include "mbed.h" +#include "ultrasonic.h" +#include "DRV2605.h" + +DigitalOut audio(p26); //output to speaker amp or audio jack +DigitalOut led(LED1); +DigitalOut led2(LED2); +DRV2605 haptics(p9, p10); + +Timeout cycle; + +volatile int half_cycle_time = 1; + +//two calls to this interrupt routine generates a square wave +void toggle_interrupt() +{ + if (half_cycle_time>22000) haptics.play_waveform(0); + else { + static int e1 = 1; + haptics.play_waveform(e1); + e1+=10; + if(e1 > 121) e1 = 1; + } + led = !led; + + cycle.detach(); + //update time for interrupt activation -change frequency of square wave + cycle.attach_us(&toggle_interrupt, half_cycle_time); +} +void newdist(int distance) +{ + //update frequency based on new sonar data + led2 = !led2; + half_cycle_time = distance<<3; +} +//HC-SR04 Sonar module + ultrasonic mu(p7, p8, .07, 1, &newdist); +//Set the trigger pin to p6 and the echo pin to p7 +//have updates every .07 seconds and a timeout after 1 +//second, and call newdist when the distance changes + +int main() +{ + audio = 0; + led = 0; + cycle.attach(&toggle_interrupt, half_cycle_time); + mu.startUpdates();//start measuring the distance with the sonar + while(1) { + //Do something else here + mu.checkDistance(); + //call checkDistance() as much as possible, as this is where + //the class checks if dist needs to be called. + } +} \ No newline at end of file