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@1:cb84b066ab29, 2016-05-06 (annotated)
- Committer:
- fangoman91
- Date:
- Fri May 06 06:40:10 2016 +0000
- Revision:
- 1:cb84b066ab29
- Parent:
- 0:c1150498cbe9
there isn't documentation or istructions
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 | 1:cb84b066ab29 | 6 | WaveGen::WaveGen(PinName WaveForm):_WaveForm(WaveForm) |
fangoman91 | 0:c1150498cbe9 | 7 | { |
fangoman91 | 0:c1150498cbe9 | 8 | _WaveForm.write(0); |
fangoman91 | 0:c1150498cbe9 | 9 | } |
fangoman91 | 0:c1150498cbe9 | 10 | |
fangoman91 | 0:c1150498cbe9 | 11 | int WaveGen::TCalc(int div,float Freq) |
fangoman91 | 0:c1150498cbe9 | 12 | { |
fangoman91 | 0:c1150498cbe9 | 13 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 14 | if(div == 0) |
fangoman91 | 0:c1150498cbe9 | 15 | { |
fangoman91 | 0:c1150498cbe9 | 16 | temp = 1 / Freq; |
fangoman91 | 0:c1150498cbe9 | 17 | temp *= 1000000; |
fangoman91 | 0:c1150498cbe9 | 18 | } |
fangoman91 | 0:c1150498cbe9 | 19 | else |
fangoman91 | 0:c1150498cbe9 | 20 | { |
fangoman91 | 0:c1150498cbe9 | 21 | temp = 1 / Freq; |
fangoman91 | 0:c1150498cbe9 | 22 | temp *= 1000000; |
fangoman91 | 0:c1150498cbe9 | 23 | temp /= div; |
fangoman91 | 0:c1150498cbe9 | 24 | } |
fangoman91 | 0:c1150498cbe9 | 25 | return (int)temp; |
fangoman91 | 0:c1150498cbe9 | 26 | } |
fangoman91 | 0:c1150498cbe9 | 27 | |
fangoman91 | 0:c1150498cbe9 | 28 | float WaveGen::VCalc(float Volt) |
fangoman91 | 0:c1150498cbe9 | 29 | { |
fangoman91 | 0:c1150498cbe9 | 30 | float temp = Volt / 3.30; |
fangoman91 | 0:c1150498cbe9 | 31 | temp /= 2; |
fangoman91 | 0:c1150498cbe9 | 32 | return temp; |
fangoman91 | 0:c1150498cbe9 | 33 | } |
fangoman91 | 0:c1150498cbe9 | 34 | |
fangoman91 | 0:c1150498cbe9 | 35 | float WaveGen::RadCalc(float Ang) |
fangoman91 | 0:c1150498cbe9 | 36 | { |
fangoman91 | 0:c1150498cbe9 | 37 | float temp = 0; |
fangoman91 | 0:c1150498cbe9 | 38 | temp = Ang * 0.0174532925; |
fangoman91 | 0:c1150498cbe9 | 39 | return temp; |
fangoman91 | 0:c1150498cbe9 | 40 | } |
fangoman91 | 0:c1150498cbe9 | 41 | |
fangoman91 | 1:cb84b066ab29 | 42 | void WaveGen::SineWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 43 | { |
fangoman91 | 0:c1150498cbe9 | 44 | float temp = 0; |
fangoman91 | 1:cb84b066ab29 | 45 | int T1 = TCalc(6,Frequency);//porzione 30° |
fangoman91 | 1:cb84b066ab29 | 46 | int T2 = TCalc(12,Frequency);//porzione 120° |
fangoman91 | 0:c1150498cbe9 | 47 | float V = VCalc(Amplitude) * 2; |
fangoman91 | 1:cb84b066ab29 | 48 | for(int a = 0; a <= 30; a += 5) |
fangoman91 | 1:cb84b066ab29 | 49 | { |
fangoman91 | 1:cb84b066ab29 | 50 | temp = 0.5 + V * sin(RadCalc((float)a)); |
fangoman91 | 1:cb84b066ab29 | 51 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 52 | wait_us(T1); |
fangoman91 | 1:cb84b066ab29 | 53 | } |
fangoman91 | 1:cb84b066ab29 | 54 | for(int b = 30; b <= 150; b += 10) |
fangoman91 | 1:cb84b066ab29 | 55 | { |
fangoman91 | 1:cb84b066ab29 | 56 | temp = 0.5 + V * sin(RadCalc((float)b)); |
fangoman91 | 1:cb84b066ab29 | 57 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 58 | wait_us(T2); |
fangoman91 | 1:cb84b066ab29 | 59 | } |
fangoman91 | 1:cb84b066ab29 | 60 | for(int c = 150; c <= 210; c += 5) |
fangoman91 | 0:c1150498cbe9 | 61 | { |
fangoman91 | 1:cb84b066ab29 | 62 | temp = 0.5 + V * sin(RadCalc((float)c)); |
fangoman91 | 1:cb84b066ab29 | 63 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 64 | wait_us(T1); |
fangoman91 | 1:cb84b066ab29 | 65 | } |
fangoman91 | 1:cb84b066ab29 | 66 | for(int d = 210; d <= 330; d += 10) |
fangoman91 | 0:c1150498cbe9 | 67 | { |
fangoman91 | 1:cb84b066ab29 | 68 | temp = 0.5 + V * sin(RadCalc((float)d)); |
fangoman91 | 1:cb84b066ab29 | 69 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 70 | wait_us(T2); |
fangoman91 | 1:cb84b066ab29 | 71 | } |
fangoman91 | 1:cb84b066ab29 | 72 | for(int e = 330; e <= 360; e += 5) |
fangoman91 | 1:cb84b066ab29 | 73 | { |
fangoman91 | 1:cb84b066ab29 | 74 | temp = 0.5 + V * sin(RadCalc((float)e)); |
fangoman91 | 1:cb84b066ab29 | 75 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 76 | wait_us(T1); |
fangoman91 | 1:cb84b066ab29 | 77 | } |
fangoman91 | 0:c1150498cbe9 | 78 | } |
fangoman91 | 0:c1150498cbe9 | 79 | |
fangoman91 | 1:cb84b066ab29 | 80 | void WaveGen::SquareWave(float Frequency,float Amplitude,float DutyCycle) |
fangoman91 | 1:cb84b066ab29 | 81 | { |
fangoman91 | 1:cb84b066ab29 | 82 | float V = VCalc(Amplitude); |
fangoman91 | 1:cb84b066ab29 | 83 | float temp = 0; |
fangoman91 | 1:cb84b066ab29 | 84 | int Ton,Toff = 0; |
fangoman91 | 1:cb84b066ab29 | 85 | int Temp = TCalc(0,Frequency); |
fangoman91 | 1:cb84b066ab29 | 86 | if(DutyCycle != 50) |
fangoman91 | 1:cb84b066ab29 | 87 | { |
fangoman91 | 1:cb84b066ab29 | 88 | temp = DutyCycle / 100; |
fangoman91 | 1:cb84b066ab29 | 89 | temp *= (float)Temp; |
fangoman91 | 1:cb84b066ab29 | 90 | Ton = (int)temp; |
fangoman91 | 1:cb84b066ab29 | 91 | Toff = Temp - Ton; |
fangoman91 | 1:cb84b066ab29 | 92 | } |
fangoman91 | 1:cb84b066ab29 | 93 | else |
fangoman91 | 1:cb84b066ab29 | 94 | { |
fangoman91 | 1:cb84b066ab29 | 95 | Ton = TCalc(0,Frequency); |
fangoman91 | 1:cb84b066ab29 | 96 | Toff = Ton; |
fangoman91 | 1:cb84b066ab29 | 97 | } |
fangoman91 | 1:cb84b066ab29 | 98 | _WaveForm = V; |
fangoman91 | 1:cb84b066ab29 | 99 | wait_us(Ton); |
fangoman91 | 1:cb84b066ab29 | 100 | _WaveForm = 0; |
fangoman91 | 1:cb84b066ab29 | 101 | wait_us(Toff); |
fangoman91 | 1:cb84b066ab29 | 102 | } |
fangoman91 | 1:cb84b066ab29 | 103 | |
fangoman91 | 1:cb84b066ab29 | 104 | void WaveGen::TriangularWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 105 | { |
fangoman91 | 0:c1150498cbe9 | 106 | float temp = 0; |
fangoman91 | 1:cb84b066ab29 | 107 | int T = TCalc(50,Frequency); |
fangoman91 | 0:c1150498cbe9 | 108 | float V = VCalc(Amplitude); |
fangoman91 | 1:cb84b066ab29 | 109 | int min,max,pass; |
fangoman91 | 1:cb84b066ab29 | 110 | //Calcola gli intervalli di tensione |
fangoman91 | 1:cb84b066ab29 | 111 | temp = V * 1000; |
fangoman91 | 1:cb84b066ab29 | 112 | min = 500 - (int)temp; |
fangoman91 | 1:cb84b066ab29 | 113 | max = 500 + (int)temp; |
fangoman91 | 1:cb84b066ab29 | 114 | pass = (max - min) / 50; |
fangoman91 | 1:cb84b066ab29 | 115 | for(int a = min; a <= max; a += pass) |
fangoman91 | 0:c1150498cbe9 | 116 | { |
fangoman91 | 1:cb84b066ab29 | 117 | temp = (float)a; |
fangoman91 | 1:cb84b066ab29 | 118 | temp /= 1000; |
fangoman91 | 1:cb84b066ab29 | 119 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 120 | wait_us(T); |
fangoman91 | 1:cb84b066ab29 | 121 | } |
fangoman91 | 1:cb84b066ab29 | 122 | for(int b = max; b >= min; b -= pass) |
fangoman91 | 1:cb84b066ab29 | 123 | { |
fangoman91 | 1:cb84b066ab29 | 124 | temp = (float)b; |
fangoman91 | 1:cb84b066ab29 | 125 | temp /= 1000; |
fangoman91 | 1:cb84b066ab29 | 126 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 127 | wait_us(T); |
fangoman91 | 0:c1150498cbe9 | 128 | } |
fangoman91 | 0:c1150498cbe9 | 129 | } |
fangoman91 | 0:c1150498cbe9 | 130 | |
fangoman91 | 1:cb84b066ab29 | 131 | void WaveGen::SawToothWave(float Frequency,float Amplitude) |
fangoman91 | 0:c1150498cbe9 | 132 | { |
fangoman91 | 0:c1150498cbe9 | 133 | float temp = 0; |
fangoman91 | 1:cb84b066ab29 | 134 | int T = TCalc(50,Frequency); |
fangoman91 | 0:c1150498cbe9 | 135 | float V = VCalc(Amplitude); |
fangoman91 | 1:cb84b066ab29 | 136 | int min,max,pass; |
fangoman91 | 1:cb84b066ab29 | 137 | temp = V * 100; |
fangoman91 | 1:cb84b066ab29 | 138 | min = 50 - (int)temp; |
fangoman91 | 1:cb84b066ab29 | 139 | max = 50 + (int)temp; |
fangoman91 | 1:cb84b066ab29 | 140 | pass = (max - min) / 50; |
fangoman91 | 1:cb84b066ab29 | 141 | for(int a = min; a <= max; a += pass) |
fangoman91 | 0:c1150498cbe9 | 142 | { |
fangoman91 | 1:cb84b066ab29 | 143 | temp = (float)a; |
fangoman91 | 1:cb84b066ab29 | 144 | temp /= 100; |
fangoman91 | 1:cb84b066ab29 | 145 | _WaveForm = temp; |
fangoman91 | 1:cb84b066ab29 | 146 | wait_us(T); |
fangoman91 | 1:cb84b066ab29 | 147 | } |
fangoman91 | 0:c1150498cbe9 | 148 | } |