This library generate four classic waves, have an escape button to stop to generate wave. And is possible to use function for calculate period,... separately
WaveGen.cpp@0:c1150498cbe9, 2015-07-24 (annotated)
- Committer:
- fangoman91
- Date:
- Fri Jul 24 13:38:10 2015 +0000
- Revision:
- 0:c1150498cbe9
- Child:
- 1:cb84b066ab29
wave generating library with escape button
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fangoman91 | 0:c1150498cbe9 | 1 | #include "mbed.h" |
fangoman91 | 0:c1150498cbe9 | 2 | #include "WaveGen.h" |
fangoman91 | 0:c1150498cbe9 | 3 | |
fangoman91 | 0:c1150498cbe9 | 4 | using namespace mbed; |
fangoman91 | 0:c1150498cbe9 | 5 | |
fangoman91 | 0:c1150498cbe9 | 6 | WaveGen::WaveGen(PinName ext,PinName WaveForm):_ext(ext),_WaveForm(WaveForm) |
fangoman91 | 0:c1150498cbe9 | 7 | { |
fangoman91 | 0:c1150498cbe9 | 8 | _ext.mode(PullUp); |
fangoman91 | 0:c1150498cbe9 | 9 | _WaveForm.write(0); |
fangoman91 | 0:c1150498cbe9 | 10 | } |
fangoman91 | 0:c1150498cbe9 | 11 | |
fangoman91 | 0:c1150498cbe9 | 12 | int WaveGen::TCalc(int div,float Freq) |
fangoman91 | 0:c1150498cbe9 | 13 | { |
fangoman91 | 0:c1150498cbe9 | 14 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 15 | if(div == 0) |
fangoman91 | 0:c1150498cbe9 | 16 | { |
fangoman91 | 0:c1150498cbe9 | 17 | temp = 1 / Freq; |
fangoman91 | 0:c1150498cbe9 | 18 | temp *= 1000000; |
fangoman91 | 0:c1150498cbe9 | 19 | } |
fangoman91 | 0:c1150498cbe9 | 20 | else |
fangoman91 | 0:c1150498cbe9 | 21 | { |
fangoman91 | 0:c1150498cbe9 | 22 | temp = 1 / Freq; |
fangoman91 | 0:c1150498cbe9 | 23 | temp *= 1000000; |
fangoman91 | 0:c1150498cbe9 | 24 | temp /= div; |
fangoman91 | 0:c1150498cbe9 | 25 | } |
fangoman91 | 0:c1150498cbe9 | 26 | return (int)temp; |
fangoman91 | 0:c1150498cbe9 | 27 | } |
fangoman91 | 0:c1150498cbe9 | 28 | |
fangoman91 | 0:c1150498cbe9 | 29 | float WaveGen::VCalc(float Volt) |
fangoman91 | 0:c1150498cbe9 | 30 | { |
fangoman91 | 0:c1150498cbe9 | 31 | float temp = Volt / 3.30; |
fangoman91 | 0:c1150498cbe9 | 32 | temp /= 2; |
fangoman91 | 0:c1150498cbe9 | 33 | return temp; |
fangoman91 | 0:c1150498cbe9 | 34 | } |
fangoman91 | 0:c1150498cbe9 | 35 | |
fangoman91 | 0:c1150498cbe9 | 36 | float WaveGen::RadCalc(float Ang) |
fangoman91 | 0:c1150498cbe9 | 37 | { |
fangoman91 | 0:c1150498cbe9 | 38 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 39 | temp = Ang * 0.0174532925; |
fangoman91 | 0:c1150498cbe9 | 40 | return temp; |
fangoman91 | 0:c1150498cbe9 | 41 | } |
fangoman91 | 0:c1150498cbe9 | 42 | |
fangoman91 | 0:c1150498cbe9 | 43 | bool WaveGen::SineWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 44 | { |
fangoman91 | 0:c1150498cbe9 | 45 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 46 | int T = TCalc(20,Frequency); |
fangoman91 | 0:c1150498cbe9 | 47 | float V = VCalc(Amplitude) * 2; |
fangoman91 | 0:c1150498cbe9 | 48 | while(1) |
fangoman91 | 0:c1150498cbe9 | 49 | { |
fangoman91 | 0:c1150498cbe9 | 50 | for(int i = 0; i < 360; i += 18) |
fangoman91 | 0:c1150498cbe9 | 51 | { |
fangoman91 | 0:c1150498cbe9 | 52 | temp = 0.5 + V * sin(RadCalc((float)i)); |
fangoman91 | 0:c1150498cbe9 | 53 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 54 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 55 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 56 | return true; |
fangoman91 | 0:c1150498cbe9 | 57 | else |
fangoman91 | 0:c1150498cbe9 | 58 | return false; |
fangoman91 | 0:c1150498cbe9 | 59 | } |
fangoman91 | 0:c1150498cbe9 | 60 | } |
fangoman91 | 0:c1150498cbe9 | 61 | } |
fangoman91 | 0:c1150498cbe9 | 62 | |
fangoman91 | 0:c1150498cbe9 | 63 | bool WaveGen::SquareWave(float Frequency,float Amplitude,float DutyCycle) |
fangoman91 | 0:c1150498cbe9 | 64 | { |
fangoman91 | 0:c1150498cbe9 | 65 | int Ton = TCalc(0,Frequency); |
fangoman91 | 0:c1150498cbe9 | 66 | Ton *= DutyCycle; |
fangoman91 | 0:c1150498cbe9 | 67 | int Toff = Ton - TCalc(0,Frequency); |
fangoman91 | 0:c1150498cbe9 | 68 | float V = VCalc(Amplitude); |
fangoman91 | 0:c1150498cbe9 | 69 | while(1) |
fangoman91 | 0:c1150498cbe9 | 70 | { |
fangoman91 | 0:c1150498cbe9 | 71 | _WaveForm = V; |
fangoman91 | 0:c1150498cbe9 | 72 | wait_us(Ton); |
fangoman91 | 0:c1150498cbe9 | 73 | _WaveForm = 0; |
fangoman91 | 0:c1150498cbe9 | 74 | wait_us(Toff); |
fangoman91 | 0:c1150498cbe9 | 75 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 76 | return true; |
fangoman91 | 0:c1150498cbe9 | 77 | } |
fangoman91 | 0:c1150498cbe9 | 78 | } |
fangoman91 | 0:c1150498cbe9 | 79 | |
fangoman91 | 0:c1150498cbe9 | 80 | bool WaveGen::TriangularWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 81 | { |
fangoman91 | 0:c1150498cbe9 | 82 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 83 | int T = TCalc(80,Frequency); |
fangoman91 | 0:c1150498cbe9 | 84 | float V = VCalc(Amplitude); |
fangoman91 | 0:c1150498cbe9 | 85 | while(1) |
fangoman91 | 0:c1150498cbe9 | 86 | { |
fangoman91 | 0:c1150498cbe9 | 87 | for(int a = 50; a < V; a += 5) |
fangoman91 | 0:c1150498cbe9 | 88 | { |
fangoman91 | 0:c1150498cbe9 | 89 | temp = (float)a / 100; |
fangoman91 | 0:c1150498cbe9 | 90 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 91 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 92 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 93 | return true; |
fangoman91 | 0:c1150498cbe9 | 94 | } |
fangoman91 | 0:c1150498cbe9 | 95 | for(int b = V; b > 50; b -= 5) |
fangoman91 | 0:c1150498cbe9 | 96 | { |
fangoman91 | 0:c1150498cbe9 | 97 | temp = (float)b / 100; |
fangoman91 | 0:c1150498cbe9 | 98 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 99 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 100 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 101 | return true; |
fangoman91 | 0:c1150498cbe9 | 102 | } |
fangoman91 | 0:c1150498cbe9 | 103 | for(int c = 50; c < V - 50; c -= 5) |
fangoman91 | 0:c1150498cbe9 | 104 | { |
fangoman91 | 0:c1150498cbe9 | 105 | temp = (float)c / 100; |
fangoman91 | 0:c1150498cbe9 | 106 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 107 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 108 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 109 | return true; |
fangoman91 | 0:c1150498cbe9 | 110 | } |
fangoman91 | 0:c1150498cbe9 | 111 | for(int d = V - 50; d < 50; d += 5) |
fangoman91 | 0:c1150498cbe9 | 112 | { |
fangoman91 | 0:c1150498cbe9 | 113 | temp = (float)d / 100; |
fangoman91 | 0:c1150498cbe9 | 114 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 115 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 116 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 117 | return true; |
fangoman91 | 0:c1150498cbe9 | 118 | } |
fangoman91 | 0:c1150498cbe9 | 119 | } |
fangoman91 | 0:c1150498cbe9 | 120 | } |
fangoman91 | 0:c1150498cbe9 | 121 | |
fangoman91 | 0:c1150498cbe9 | 122 | bool WaveGen::SawToothWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 123 | { |
fangoman91 | 0:c1150498cbe9 | 124 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 125 | int T = TCalc(40,Frequency); |
fangoman91 | 0:c1150498cbe9 | 126 | float V = VCalc(Amplitude); |
fangoman91 | 0:c1150498cbe9 | 127 | while(1) |
fangoman91 | 0:c1150498cbe9 | 128 | { |
fangoman91 | 0:c1150498cbe9 | 129 | for(int a = 50; a < V; a += 5) |
fangoman91 | 0:c1150498cbe9 | 130 | { |
fangoman91 | 0:c1150498cbe9 | 131 | temp = (float)a / 100; |
fangoman91 | 0:c1150498cbe9 | 132 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 133 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 134 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 135 | return true; |
fangoman91 | 0:c1150498cbe9 | 136 | } |
fangoman91 | 0:c1150498cbe9 | 137 | for(int b = 50; b > V - 50; b -= 5) |
fangoman91 | 0:c1150498cbe9 | 138 | { |
fangoman91 | 0:c1150498cbe9 | 139 | temp = (float)b / 100; |
fangoman91 | 0:c1150498cbe9 | 140 | _WaveForm = temp; |
fangoman91 | 0:c1150498cbe9 | 141 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 142 | if(!_ext.read()) |
fangoman91 | 0:c1150498cbe9 | 143 | return true; |
fangoman91 | 0:c1150498cbe9 | 144 | } |
fangoman91 | 0:c1150498cbe9 | 145 | } |
fangoman91 | 0:c1150498cbe9 | 146 | } |