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

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?

UserRevisionLine numberNew 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 }