F401REにてアナログモデリングシンセもどきを作ってみました。 リングモジュレーターっぽいことやってみてます。正弦波、三角波、矩形波の関数が用意してあります。sin(2pift)のftをサンプリングレートごとに積分したものをiftとしてます。iftのポインタを関数に与えるだけで特に計算は入りません。

Dependencies:   mbed

Committer:
gitakichi
Date:
Wed Jul 20 13:30:45 2016 +0000
Revision:
1:1b9ca25019a6
Parent:
0:1b56cf88e38c
Child:
2:47210a089f76
?????

Who changed what in which revision?

UserRevisionLine numberNew 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 0:1b56cf88e38c 5
gitakichi 0:1b56cf88e38c 6 DigitalOut myled(LED1);
gitakichi 1:1b9ca25019a6 7 int data;
gitakichi 1:1b9ca25019a6 8
gitakichi 1:1b9ca25019a6 9 void flip(){
gitakichi 1:1b9ca25019a6 10 if(data > 100) data = 0;
gitakichi 1:1b9ca25019a6 11 else data++;
gitakichi 1:1b9ca25019a6 12 }
gitakichi 1:1b9ca25019a6 13
gitakichi 0:1b56cf88e38c 14
gitakichi 0:1b56cf88e38c 15 int main() {
gitakichi 0:1b56cf88e38c 16
gitakichi 1:1b9ca25019a6 17 mypwm.period_us(10);
gitakichi 1:1b9ca25019a6 18 flipper.attach_us(&flip, 50);
gitakichi 1:1b9ca25019a6 19
gitakichi 0:1b56cf88e38c 20
gitakichi 1:1b9ca25019a6 21 //printf("pwm set to %.2f %%\n", mypwm.read() * 100);
gitakichi 0:1b56cf88e38c 22
gitakichi 0:1b56cf88e38c 23 while(1) {
gitakichi 1:1b9ca25019a6 24 mypwm.write( (float)data / 1000 );
gitakichi 1:1b9ca25019a6 25 //myled = !myled;
gitakichi 1:1b9ca25019a6 26 //wait(1);
gitakichi 0:1b56cf88e38c 27 }
gitakichi 0:1b56cf88e38c 28 }