![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Coursework
Piezo.cpp@45:f1db729741f7, 2022-02-04 (annotated)
- Committer:
- sesa514652
- Date:
- Fri Feb 04 16:44:14 2022 +0000
- Revision:
- 45:f1db729741f7
- Parent:
- 3:6ecb75a2675c
Submission
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sesa514652 | 3:6ecb75a2675c | 1 | #include "Piezo.h" |
sesa514652 | 3:6ecb75a2675c | 2 | |
sesa514652 | 3:6ecb75a2675c | 3 | Piezo::Piezo(PinName Pwmout):_pwm(Pwmout) |
sesa514652 | 3:6ecb75a2675c | 4 | { |
sesa514652 | 3:6ecb75a2675c | 5 | min_freq = 1.0; |
sesa514652 | 3:6ecb75a2675c | 6 | max_freq = 20000.0; |
sesa514652 | 3:6ecb75a2675c | 7 | |
sesa514652 | 3:6ecb75a2675c | 8 | _pwm.period(1); |
sesa514652 | 3:6ecb75a2675c | 9 | _pwm.write(0.0); |
sesa514652 | 3:6ecb75a2675c | 10 | } |
sesa514652 | 3:6ecb75a2675c | 11 | |
sesa514652 | 3:6ecb75a2675c | 12 | void Piezo::play(float frequency, int duration_ms) |
sesa514652 | 3:6ecb75a2675c | 13 | { |
sesa514652 | 3:6ecb75a2675c | 14 | float Frequency = (frequency < min_freq)? min_freq : frequency; |
sesa514652 | 3:6ecb75a2675c | 15 | Frequency = (frequency > max_freq)? max_freq : frequency; |
sesa514652 | 3:6ecb75a2675c | 16 | |
sesa514652 | 3:6ecb75a2675c | 17 | Period = 1.0/Frequency; |
sesa514652 | 3:6ecb75a2675c | 18 | |
sesa514652 | 3:6ecb75a2675c | 19 | _pwm.period(Period); |
sesa514652 | 3:6ecb75a2675c | 20 | _pwm.write(0.5); |
sesa514652 | 3:6ecb75a2675c | 21 | wait_ms(duration_ms); |
sesa514652 | 3:6ecb75a2675c | 22 | _pwm.write(0.0); |
sesa514652 | 3:6ecb75a2675c | 23 | } |
sesa514652 | 3:6ecb75a2675c | 24 | |
sesa514652 | 3:6ecb75a2675c | 25 | void Piezo::playAsync(float frequency, int duration_ms) |
sesa514652 | 3:6ecb75a2675c | 26 | { |
sesa514652 | 3:6ecb75a2675c | 27 | float Frequency = (frequency < min_freq)? min_freq : frequency; |
sesa514652 | 3:6ecb75a2675c | 28 | Frequency = (frequency > max_freq)? max_freq : frequency; |
sesa514652 | 3:6ecb75a2675c | 29 | |
sesa514652 | 3:6ecb75a2675c | 30 | Period = 1.0/Frequency; |
sesa514652 | 3:6ecb75a2675c | 31 | |
sesa514652 | 3:6ecb75a2675c | 32 | _pwm.period(Period); |
sesa514652 | 3:6ecb75a2675c | 33 | _pwm.write(0.5); |
sesa514652 | 3:6ecb75a2675c | 34 | _timer.detach(); |
sesa514652 | 3:6ecb75a2675c | 35 | _timer.attach_us(this,&Piezo::stop, duration_ms*1000); |
sesa514652 | 3:6ecb75a2675c | 36 | } |
sesa514652 | 3:6ecb75a2675c | 37 | |
sesa514652 | 3:6ecb75a2675c | 38 | void Piezo::stop(void) |
sesa514652 | 3:6ecb75a2675c | 39 | { |
sesa514652 | 3:6ecb75a2675c | 40 | _pwm.write(0.0); |
sesa514652 | 3:6ecb75a2675c | 41 | } |