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 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?

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