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
- Committer:
- fangoman91
- Date:
- 2015-07-24
- Revision:
- 0:c1150498cbe9
- Child:
- 1:cb84b066ab29
File content as of revision 0:c1150498cbe9:
#include "mbed.h"
#include "WaveGen.h"
using namespace mbed;
WaveGen::WaveGen(PinName ext,PinName WaveForm):_ext(ext),_WaveForm(WaveForm)
{
_ext.mode(PullUp);
_WaveForm.write(0);
}
int WaveGen::TCalc(int div,float Freq)
{
float temp = 0;
if(div == 0)
{
temp = 1 / Freq;
temp *= 1000000;
}
else
{
temp = 1 / Freq;
temp *= 1000000;
temp /= div;
}
return (int)temp;
}
float WaveGen::VCalc(float Volt)
{
float temp = Volt / 3.30;
temp /= 2;
return temp;
}
float WaveGen::RadCalc(float Ang)
{
float temp = 0;
temp = Ang * 0.0174532925;
return temp;
}
bool WaveGen::SineWave(float Frequency,float Amplitude)
{
float temp = 0;
int T = TCalc(20,Frequency);
float V = VCalc(Amplitude) * 2;
while(1)
{
for(int i = 0; i < 360; i += 18)
{
temp = 0.5 + V * sin(RadCalc((float)i));
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
else
return false;
}
}
}
bool WaveGen::SquareWave(float Frequency,float Amplitude,float DutyCycle)
{
int Ton = TCalc(0,Frequency);
Ton *= DutyCycle;
int Toff = Ton - TCalc(0,Frequency);
float V = VCalc(Amplitude);
while(1)
{
_WaveForm = V;
wait_us(Ton);
_WaveForm = 0;
wait_us(Toff);
if(!_ext.read())
return true;
}
}
bool WaveGen::TriangularWave(float Frequency,float Amplitude)
{
float temp = 0;
int T = TCalc(80,Frequency);
float V = VCalc(Amplitude);
while(1)
{
for(int a = 50; a < V; a += 5)
{
temp = (float)a / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
for(int b = V; b > 50; b -= 5)
{
temp = (float)b / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
for(int c = 50; c < V - 50; c -= 5)
{
temp = (float)c / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
for(int d = V - 50; d < 50; d += 5)
{
temp = (float)d / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
}
}
bool WaveGen::SawToothWave(float Frequency,float Amplitude)
{
float temp = 0;
int T = TCalc(40,Frequency);
float V = VCalc(Amplitude);
while(1)
{
for(int a = 50; a < V; a += 5)
{
temp = (float)a / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
for(int b = 50; b > V - 50; b -= 5)
{
temp = (float)b / 100;
_WaveForm = temp;
wait_us(T);
if(!_ext.read())
return true;
}
}
}