F401REにてアナログモデリングシンセもどきを作ってみました。 リングモジュレーターっぽいことやってみてます。正弦波、三角波、矩形波の関数が用意してあります。sin(2pift)のftをサンプリングレートごとに積分したものをiftとしてます。iftのポインタを関数に与えるだけで特に計算は入りません。
main.cpp@5:f798a173eefa, 2016-07-21 (annotated)
- Committer:
- gitakichi
- Date:
- Thu Jul 21 12:20:51 2016 +0000
- Revision:
- 5:f798a173eefa
- Parent:
- 4:3f3d369ca0e3
- Child:
- 6:e3ed48abbd53
??????DA??????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gitakichi | 0:1b56cf88e38c | 1 | #include "mbed.h" |
gitakichi | 0:1b56cf88e38c | 2 | |
gitakichi | 1:1b9ca25019a6 | 3 | Ticker flipper; |
gitakichi | 0:1b56cf88e38c | 4 | PwmOut mypwm(PC_8); |
gitakichi | 4:3f3d369ca0e3 | 5 | DigitalIn sw(USER_BUTTON); |
gitakichi | 4:3f3d369ca0e3 | 6 | |
gitakichi | 3:5cae780fe61e | 7 | bool flip_flag; |
gitakichi | 4:3f3d369ca0e3 | 8 | |
gitakichi | 3:5cae780fe61e | 9 | void flip() |
gitakichi | 3:5cae780fe61e | 10 | { |
gitakichi | 3:5cae780fe61e | 11 | flip_flag = 1; |
gitakichi | 3:5cae780fe61e | 12 | } |
gitakichi | 1:1b9ca25019a6 | 13 | |
gitakichi | 0:1b56cf88e38c | 14 | |
gitakichi | 3:5cae780fe61e | 15 | int main() |
gitakichi | 3:5cae780fe61e | 16 | { |
gitakichi | 5:f798a173eefa | 17 | double keika_t,data,late; |
gitakichi | 5:f798a173eefa | 18 | int freq_out = 5000; |
gitakichi | 5:f798a173eefa | 19 | late = 20 * 0.001 * 0.001; |
gitakichi | 5:f798a173eefa | 20 | |
gitakichi | 5:f798a173eefa | 21 | mypwm.period_us(20); |
gitakichi | 5:f798a173eefa | 22 | flipper.attach_us(&flip,20); |
gitakichi | 3:5cae780fe61e | 23 | |
gitakichi | 3:5cae780fe61e | 24 | |
gitakichi | 0:1b56cf88e38c | 25 | while(1) { |
gitakichi | 4:3f3d369ca0e3 | 26 | |
gitakichi | 3:5cae780fe61e | 27 | if(flip_flag == 1) { |
gitakichi | 5:f798a173eefa | 28 | |
gitakichi | 5:f798a173eefa | 29 | if(sw == 0) data = keika_t; |
gitakichi | 5:f798a173eefa | 30 | else data = sin(6.28 * keika_t * freq_out) + 1; |
gitakichi | 5:f798a173eefa | 31 | |
gitakichi | 5:f798a173eefa | 32 | mypwm.write( data / 20 ); |
gitakichi | 3:5cae780fe61e | 33 | |
gitakichi | 3:5cae780fe61e | 34 | if(keika_t + late > 1) keika_t = keika_t + late - 1; |
gitakichi | 3:5cae780fe61e | 35 | else keika_t += late; |
gitakichi | 3:5cae780fe61e | 36 | |
gitakichi | 3:5cae780fe61e | 37 | flip_flag = 0; |
gitakichi | 3:5cae780fe61e | 38 | } |
gitakichi | 0:1b56cf88e38c | 39 | } |
gitakichi | 0:1b56cf88e38c | 40 | } |