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

Dependencies:   mbed

main.cpp

Committer:
gitakichi
Date:
2016-07-21
Revision:
5:f798a173eefa
Parent:
4:3f3d369ca0e3
Child:
6:e3ed48abbd53

File content as of revision 5:f798a173eefa:

#include "mbed.h"

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

bool flip_flag;

void flip()
{
    flip_flag = 1;
}


int main()
{
    double keika_t,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 = keika_t;
            else data = sin(6.28 * keika_t * freq_out) + 1;
            
            mypwm.write( data / 20 );

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

            flip_flag = 0;
        }
    }
}