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

Dependencies:   mbed

main.cpp

Committer:
gitakichi
Date:
2016-07-22
Revision:
6:e3ed48abbd53
Parent:
5:f798a173eefa
Child:
7:725b3bc34e7e

File content as of revision 6:e3ed48abbd53:

#include "mbed.h"

Ticker flipper;
PwmOut mypwm(PC_8);
DigitalIn sw(USER_BUTTON);

bool flip_flag;

void flip()
{
    flip_flag = 1;
}


int main()
{
    double ft,data,late;
    int freq_out = 5000;
    late = 20 * 0.001 * 0.001;

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


    while(1) {

        if(flip_flag == 1) {

            if(sw == 0) data = ft;
            else data = sin(6.28 * ft) + 1;
          
            mypwm.write( data / 20 );

            ft += late * freq_out;
            if(ft > 1)    ft--;

            flip_flag = 0;
        }
    }
}