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

Committer:
vaifreak
Date:
Fri Sep 04 16:50:36 2015 +0000
Revision:
2:25adc1277b3e
Parent:
1:bfbfd6fede05
Child:
3:1666e2d5bd46
mbed effector, version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vaifreak 1:bfbfd6fede05 1 //=============================================================================
vaifreak 1:bfbfd6fede05 2 // @author vaifreak
vaifreak 2:25adc1277b3e 3 // @brief Guitar Effector for "mbed application board"
vaifreak 2:25adc1277b3e 4 // https://developer.mbed.org/cookbook/mbed-application-board
vaifreak 1:bfbfd6fede05 5 //=============================================================================
vaifreak 0:6b260c0931c5 6 #include "mbed.h"
vaifreak 0:6b260c0931c5 7 #include "C12832.h"
vaifreak 2:25adc1277b3e 8 #include <new>
vaifreak 2:25adc1277b3e 9 #include <list>
vaifreak 2:25adc1277b3e 10
vaifreak 2:25adc1277b3e 11 #include "MyInputUtil.h"
vaifreak 2:25adc1277b3e 12 #include "Menu.h"
vaifreak 2:25adc1277b3e 13 #include "LevelMeter.h"
vaifreak 0:6b260c0931c5 14
vaifreak 1:bfbfd6fede05 15 #include "Filter.h"
vaifreak 1:bfbfd6fede05 16 #include "Drive.h"
vaifreak 1:bfbfd6fede05 17 #include "Delay.h"
vaifreak 0:6b260c0931c5 18
vaifreak 2:25adc1277b3e 19
vaifreak 2:25adc1277b3e 20 //---------------------------------------------
vaifreak 2:25adc1277b3e 21 //---------------------------------------------
vaifreak 1:bfbfd6fede05 22 AnalogOut a_out(p18);
vaifreak 1:bfbfd6fede05 23 AnalogIn a_in(p17);
vaifreak 0:6b260c0931c5 24
vaifreak 2:25adc1277b3e 25 Filter *filter_pre;
vaifreak 2:25adc1277b3e 26 Filter *filter_post;
vaifreak 1:bfbfd6fede05 27 Drive *drive;
vaifreak 1:bfbfd6fede05 28 Delay *delay;
vaifreak 1:bfbfd6fede05 29
vaifreak 2:25adc1277b3e 30 list<EffectUnitBase*> g_EffectList;
vaifreak 2:25adc1277b3e 31
vaifreak 2:25adc1277b3e 32 Menu menu;
vaifreak 2:25adc1277b3e 33 LevelMeter level_meter;
vaifreak 2:25adc1277b3e 34
vaifreak 2:25adc1277b3e 35 Ticker menu_ticker;
vaifreak 2:25adc1277b3e 36 Ticker process_ticker;
vaifreak 2:25adc1277b3e 37
vaifreak 2:25adc1277b3e 38 float g_sample_rate = 22050.0f;
vaifreak 2:25adc1277b3e 39
vaifreak 2:25adc1277b3e 40
vaifreak 2:25adc1277b3e 41 //---------------------------------------------
vaifreak 2:25adc1277b3e 42 // Forward declaration
vaifreak 2:25adc1277b3e 43 //---------------------------------------------
vaifreak 2:25adc1277b3e 44 void process();
vaifreak 2:25adc1277b3e 45 void update_display();
vaifreak 2:25adc1277b3e 46
vaifreak 2:25adc1277b3e 47
vaifreak 2:25adc1277b3e 48 //---------------------------------------------
vaifreak 2:25adc1277b3e 49 extern "C"
vaifreak 2:25adc1277b3e 50 void HardFault_Handler() {
vaifreak 2:25adc1277b3e 51 printf("Hard Fault!\r\n");
vaifreak 2:25adc1277b3e 52 while(1);
vaifreak 2:25adc1277b3e 53 }
vaifreak 2:25adc1277b3e 54
vaifreak 2:25adc1277b3e 55 //---------------------------------------------
vaifreak 2:25adc1277b3e 56 void no_memory () {
vaifreak 2:25adc1277b3e 57 printf("panic: can't allocate to memory!\r\n");
vaifreak 2:25adc1277b3e 58 exit(-1);
vaifreak 2:25adc1277b3e 59 }
vaifreak 1:bfbfd6fede05 60
vaifreak 1:bfbfd6fede05 61 //---------------------------------------------
vaifreak 1:bfbfd6fede05 62 //
vaifreak 1:bfbfd6fede05 63 //---------------------------------------------
vaifreak 2:25adc1277b3e 64 int main()
vaifreak 0:6b260c0931c5 65 {
vaifreak 2:25adc1277b3e 66 printf("mbed effector, start!\n");
vaifreak 2:25adc1277b3e 67 set_new_handler(no_memory); // new handler function
vaifreak 2:25adc1277b3e 68
vaifreak 2:25adc1277b3e 69 // create effect unit
vaifreak 2:25adc1277b3e 70 filter_pre = new Filter();
vaifreak 2:25adc1277b3e 71 filter_post = new Filter();
vaifreak 2:25adc1277b3e 72 drive = new Drive();
vaifreak 2:25adc1277b3e 73 delay = new Delay();
vaifreak 0:6b260c0931c5 74
vaifreak 2:25adc1277b3e 75 // add to effect processing list
vaifreak 2:25adc1277b3e 76 g_EffectList.push_back(filter_pre);
vaifreak 2:25adc1277b3e 77 g_EffectList.push_back(filter_post);
vaifreak 2:25adc1277b3e 78 g_EffectList.push_back(drive);
vaifreak 2:25adc1277b3e 79 g_EffectList.push_back(delay);
vaifreak 2:25adc1277b3e 80
vaifreak 2:25adc1277b3e 81 menu.Init( g_sample_rate, filter_pre, filter_post, drive, delay );
vaifreak 0:6b260c0931c5 82
vaifreak 2:25adc1277b3e 83 process_ticker.attach( &process, 1.0/g_sample_rate );
vaifreak 2:25adc1277b3e 84 menu_ticker.attach( &update_display, 0.1 );
vaifreak 2:25adc1277b3e 85
vaifreak 2:25adc1277b3e 86 //---- main loop ----
vaifreak 2:25adc1277b3e 87 //while(1)
vaifreak 2:25adc1277b3e 88 //{
vaifreak 2:25adc1277b3e 89 //}
vaifreak 0:6b260c0931c5 90 }
vaifreak 0:6b260c0931c5 91
vaifreak 1:bfbfd6fede05 92 //---------------------------------------------
vaifreak 1:bfbfd6fede05 93 //
vaifreak 1:bfbfd6fede05 94 //---------------------------------------------
vaifreak 1:bfbfd6fede05 95 void process()
vaifreak 1:bfbfd6fede05 96 {
vaifreak 1:bfbfd6fede05 97 float val = (a_in * 2.0f) - 1.0f; //convert [0.0 ~ 1.0] to [-1.0 ~ 1.0]
vaifreak 2:25adc1277b3e 98 //val = val * 10.0f; //TEST: input gain
vaifreak 2:25adc1277b3e 99
vaifreak 2:25adc1277b3e 100 level_meter.Update( fabsf(val) ); // LED level meter.
vaifreak 2:25adc1277b3e 101
vaifreak 0:6b260c0931c5 102
vaifreak 1:bfbfd6fede05 103 //---- effect process ----
vaifreak 1:bfbfd6fede05 104 {
vaifreak 2:25adc1277b3e 105 list<EffectUnitBase*>::iterator it = g_EffectList.begin();
vaifreak 2:25adc1277b3e 106 while( it != g_EffectList.end() )
vaifreak 2:25adc1277b3e 107 {
vaifreak 2:25adc1277b3e 108 val = (*it)->Process( val );
vaifreak 2:25adc1277b3e 109 ++it;
vaifreak 2:25adc1277b3e 110 }
vaifreak 2:25adc1277b3e 111
vaifreak 2:25adc1277b3e 112 //master volume
vaifreak 2:25adc1277b3e 113 val = val * menu.masterVolume;
vaifreak 1:bfbfd6fede05 114 }
vaifreak 1:bfbfd6fede05 115
vaifreak 1:bfbfd6fede05 116 val = (val + 1.0f) * 0.5f; //convert [-1.0 ~ 1.0] to [0.0 ~ 1.0]
vaifreak 1:bfbfd6fede05 117
vaifreak 1:bfbfd6fede05 118 //clipping. just to be safe.
vaifreak 1:bfbfd6fede05 119 if(val > 1.0f) val = 1.0f;
vaifreak 1:bfbfd6fede05 120 else if(val < 0.0f) val =0.0f;
vaifreak 1:bfbfd6fede05 121
vaifreak 1:bfbfd6fede05 122 a_out = val;
vaifreak 1:bfbfd6fede05 123
vaifreak 1:bfbfd6fede05 124 }
vaifreak 0:6b260c0931c5 125
vaifreak 1:bfbfd6fede05 126 //---------------------------------------------
vaifreak 1:bfbfd6fede05 127 //
vaifreak 1:bfbfd6fede05 128 //---------------------------------------------
vaifreak 2:25adc1277b3e 129 void update_display()
vaifreak 1:bfbfd6fede05 130 {
vaifreak 2:25adc1277b3e 131 menu.Update();
vaifreak 2:25adc1277b3e 132 }
vaifreak 1:bfbfd6fede05 133
vaifreak 1:bfbfd6fede05 134