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:
Thu Sep 24 11:35:30 2015 +0000
Revision:
4:dbd755f9fca6
Parent:
3:1666e2d5bd46
Guitar Effector using "mbed application board".

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