for percussion1

Dependencies:   mbed

Fork of penkich_test_percussion by kitac_mbed_WS

main.cpp

Committer:
penkich
Date:
2015-08-23
Revision:
2:269fadd5d1f2
Parent:
1:3252e4fbccab
Child:
3:396b2628e3d7

File content as of revision 2:269fadd5d1f2:

#include "mbed.h"

DigitalIn sw(D7);

Ticker timer;
PwmOut speaker(D5);
Ticker envelope;
PwmOut env(D3);
static int tms_per10=0; 

void env_out(void){
    float attack_ms =10;
    float decay_ms = 10;
    float sustain_ms = 20;
    float sustain = 0.2;
    float release_ms = 5000;

    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.0f/attack_ms * tms_per10;
        env.write(out_level);
    }
}

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

     
int main()
{
    sw.mode(PullUp);
    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);
    }
}