Guitar Effector using "mbed application board".

Dependencies:   C12832 mbed

Guitar Effector using "mbed application board".

/media/uploads/vaifreak/dscn0187.jpg

/media/uploads/vaifreak/schematic_00.jpg

/media/uploads/vaifreak/schematic_01.jpg

/media/uploads/vaifreak/schematic_02.jpg

main.cpp

Committer:
vaifreak
Date:
2015-09-01
Revision:
1:bfbfd6fede05
Parent:
0:6b260c0931c5
Child:
2:25adc1277b3e

File content as of revision 1:bfbfd6fede05:

//=============================================================================
//  @author vaifreak
//  @brief  Guitar Effector
//=============================================================================
#include "mbed.h"
#include "C12832.h"

#include "Filter.h"
#include "Drive.h"
#include "Delay.h"

C12832 lcd(p5, p7, p6, p8, p11);
AnalogOut a_out(p18);
AnalogIn a_in(p17);

AnalogIn pot1(p19);
AnalogIn pot2(p20);

DigitalIn stick_U(p15);
DigitalIn stick_D(p12);
DigitalIn stick_L(p13);
DigitalIn stick_R(p16);
DigitalIn stick_C(p14);

Ticker display_ticker;
Ticker process_ticker;
Ticker control_ticker;

Filter *lpf;
Drive *drive;
Delay *delay;

float pot1_val;
float pot2_val;
float g_outval;

//---------------------------------------------
//
//---------------------------------------------
void update_display()
{
    float val;
    val = (a_in - 0.5f) * 2.0f;

    lcd.locate(0,21);
    lcd.printf("in:%0.2f out:%0.2f", val, g_outval);

}

//---------------------------------------------
//
//---------------------------------------------
void process()
{
    float val = (a_in * 2.0f) - 1.0f; //convert [0.0 ~ 1.0] to [-1.0 ~ 1.0]

    //---- effect process ----
    {
        //val = lpf->process( val );
        //val = drive->process( val );
        val = delay->process( val );
    }

    val = (val + 1.0f) * 0.5f; //convert [-1.0 ~ 1.0] to [0.0 ~ 1.0]
    
    //clipping. just to be safe. 
    if(val > 1.0f) val = 1.0f;
    else if(val < 0.0f) val =0.0f;

    a_out = val;
    g_outval = val;
}

//---------------------------------------------
//
//---------------------------------------------
void control()
{
    const float threshold = 0.01f;

    if( fabsf(pot1 - pot1_val) > threshold )
    {
        pot1_val = pot1;
    }
    
    if( fabsf(pot2 - pot2_val) > threshold )
    {
        pot2_val = pot2;
    }
}

//---------------------------------------------
//
//---------------------------------------------
int main()
{
    lcd.cls();
    lcd.locate(0,3);
    lcd.printf("MBED Effector.");

    process_ticker.attach(&process, 1.0/22050.0);
    control_ticker.attach(&control, 0.1);
    display_ticker.attach(&update_display, 1.0);

    lpf = new Filter();
    lpf->LPF();
    drive = new Drive();
    delay = new Delay();

    if( lpf == NULL ||
        drive == NULL ||
        delay == NULL )
    {
        // malloc failed, maybe.
        lcd.locate(0,12);
        lcd.printf("Init fail...");
    }   
}