penkich_percussion_2_NUCLEO

Dependencies:   mbed

Fork of penkich_test_percussion by kitac_mbed_WS

main.cpp

Committer:
penkich
Date:
2015-08-18
Revision:
0:e363f64b5744
Child:
1:b102b9476594

File content as of revision 0:e363f64b5744:

#include "mbed.h"

DigitalIn sw(dp9);
Ticker timer;
PwmOut speaker(dp18);
Ticker envelope;
PwmOut env(dp24);
static int tms_per10=0; 

void env_out(void){
    float attack_ms =10;
    float decay_ms = 10;
    float sustain_ms = 200;
    float sustain = 0.5;
    float release_ms = 400;

    float out_level;
    tms_per10++;
    if (tms_per10 > (attack_ms + decay_ms + sustain_ms + release_ms) * 10){
        env.write(0.0f);
    }else if(tms_per10 > (attack_ms + decay_ms + sustain_ms) * 10){
        out_level = sustain/(tms_per10 - (attack_ms + decay_ms + sustain_ms)) * release_ms; 
        env.write(out_level);
    }else if(tms_per10 > (attack_ms + decay_ms) * 10){
        env.write(sustain);
    }else if(tms_per10 > attack_ms * 10){
        env.write(1.0f);
    }else{
        out_level = 1.0/attack_ms * tms_per10;
        env.write(out_level);
    }
}

void sound_out(void){
    speaker.write(((float)rand()/RAND_MAX));
}

     
int main()
{
    while(1){
        if (sw ==0){
            tms_per10=0; 
            speaker.period_us(10);
            env.period_us(10);
            timer.attach_us(&sound_out,100); //10kHz
            envelope.attach_us(&env_out,100); //10kHz
        }
    wait(0.01f);
    }
}