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

Dependencies:   mbed

main.cpp

Committer:
gitakichi
Date:
2016-07-20
Revision:
3:5cae780fe61e
Parent:
2:47210a089f76
Child:
4:3f3d369ca0e3

File content as of revision 3:5cae780fe61e:

#include "mbed.h"

Ticker flipper;
PwmOut mypwm(PC_8);

DigitalOut myled(LED1);
//int data;
float data_sin;
bool flip_flag;
float keika_t;
#define late  0.00001
//100khz-1
#define freq_out 3000

void flip()
{
    //if(data > 100)   data = 0;
    //else data++;
    //data_sin = sin((data/100)*6.28) + 1;
    flip_flag = 1;
}


int main()
{

    mypwm.period_us(10);
    flipper.attach_us(&flip, 10);

    float keika_t;


    //printf("pwm set to %.2f %%\n", mypwm.read() * 100);

    while(1) {
        if(flip_flag == 1) {

            data_sin = sin(6.28 * keika_t * freq_out) + 1;
            mypwm.write( data_sin / 10 );

            if(keika_t + late > 1) keika_t = keika_t + late - 1;
            else keika_t += late;

            flip_flag = 0;
        }
    }
}