Haoran Xiao
/
SignalGenerator
EE202A HW1 ADC Test
main.cpp@0:fd564dc0cd83, 2014-02-12 (annotated)
- Committer:
- HaoranX
- Date:
- Wed Feb 12 22:20:56 2014 +0000
- Revision:
- 0:fd564dc0cd83
v
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
HaoranX | 0:fd564dc0cd83 | 1 | #include "mbed.h" |
HaoranX | 0:fd564dc0cd83 | 2 | #include "SLCD.h" |
HaoranX | 0:fd564dc0cd83 | 3 | #include "TSISensor.h" |
HaoranX | 0:fd564dc0cd83 | 4 | |
HaoranX | 0:fd564dc0cd83 | 5 | #define CHART_SIZE 64 |
HaoranX | 0:fd564dc0cd83 | 6 | |
HaoranX | 0:fd564dc0cd83 | 7 | Ticker timer; |
HaoranX | 0:fd564dc0cd83 | 8 | AnalogOut vout(PTE30); |
HaoranX | 0:fd564dc0cd83 | 9 | SLCD slcd; |
HaoranX | 0:fd564dc0cd83 | 10 | TSISensor tsi; |
HaoranX | 0:fd564dc0cd83 | 11 | InterruptIn amp_up(SW1); |
HaoranX | 0:fd564dc0cd83 | 12 | InterruptIn amp_down(SW3); |
HaoranX | 0:fd564dc0cd83 | 13 | |
HaoranX | 0:fd564dc0cd83 | 14 | float amplitude = 0; |
HaoranX | 0:fd564dc0cd83 | 15 | float freq = 20; |
HaoranX | 0:fd564dc0cd83 | 16 | static int phase = 0; |
HaoranX | 0:fd564dc0cd83 | 17 | static float sinwave[CHART_SIZE] = { |
HaoranX | 0:fd564dc0cd83 | 18 | 0.5000,0.5490,0.5975,0.6451,0.6913,0.7357,0.7778,0.8172,0.8536,0.8865, |
HaoranX | 0:fd564dc0cd83 | 19 | 0.9157,0.9410,0.9619,0.9785,0.9904,0.9976,1.0000,0.9976,0.9904,0.9785, |
HaoranX | 0:fd564dc0cd83 | 20 | 0.9619,0.9410,0.9157,0.8865,0.8536,0.8172,0.7778,0.7357,0.6913,0.6451, |
HaoranX | 0:fd564dc0cd83 | 21 | 0.5975,0.5490,0.5000,0.4510,0.4025,0.3549,0.3087,0.2643,0.2222,0.1828, |
HaoranX | 0:fd564dc0cd83 | 22 | 0.1464,0.1135,0.0843,0.0590,0.0381,0.0215,0.0096,0.0024,0.0000,0.0024, |
HaoranX | 0:fd564dc0cd83 | 23 | 0.0096,0.0215,0.0381,0.0590,0.0843,0.1135,0.1464,0.1828,0.2222,0.2643, |
HaoranX | 0:fd564dc0cd83 | 24 | 0.3087,0.3549,0.4025,0.4510}; |
HaoranX | 0:fd564dc0cd83 | 25 | void timer_int(); |
HaoranX | 0:fd564dc0cd83 | 26 | void display(float val); |
HaoranX | 0:fd564dc0cd83 | 27 | void amp_up_int(); |
HaoranX | 0:fd564dc0cd83 | 28 | void amp_down_int(); |
HaoranX | 0:fd564dc0cd83 | 29 | |
HaoranX | 0:fd564dc0cd83 | 30 | |
HaoranX | 0:fd564dc0cd83 | 31 | void timer_int(){ |
HaoranX | 0:fd564dc0cd83 | 32 | phase++; |
HaoranX | 0:fd564dc0cd83 | 33 | if(phase >= CHART_SIZE) |
HaoranX | 0:fd564dc0cd83 | 34 | phase = 0; |
HaoranX | 0:fd564dc0cd83 | 35 | vout = amplitude*sinwave[phase]; |
HaoranX | 0:fd564dc0cd83 | 36 | } |
HaoranX | 0:fd564dc0cd83 | 37 | |
HaoranX | 0:fd564dc0cd83 | 38 | void amp_up_int(){ |
HaoranX | 0:fd564dc0cd83 | 39 | if(amplitude <= 0.95){ |
HaoranX | 0:fd564dc0cd83 | 40 | amplitude += 0.05; |
HaoranX | 0:fd564dc0cd83 | 41 | display(amplitude*3.3); |
HaoranX | 0:fd564dc0cd83 | 42 | } |
HaoranX | 0:fd564dc0cd83 | 43 | } |
HaoranX | 0:fd564dc0cd83 | 44 | |
HaoranX | 0:fd564dc0cd83 | 45 | void amp_down_int(){ |
HaoranX | 0:fd564dc0cd83 | 46 | if(amplitude >= 0.05){ |
HaoranX | 0:fd564dc0cd83 | 47 | amplitude -= 0.05; |
HaoranX | 0:fd564dc0cd83 | 48 | display(amplitude*3.3); |
HaoranX | 0:fd564dc0cd83 | 49 | } |
HaoranX | 0:fd564dc0cd83 | 50 | } |
HaoranX | 0:fd564dc0cd83 | 51 | |
HaoranX | 0:fd564dc0cd83 | 52 | void display(float val){ |
HaoranX | 0:fd564dc0cd83 | 53 | char buf[16]; |
HaoranX | 0:fd564dc0cd83 | 54 | int tmp = int(val*100); |
HaoranX | 0:fd564dc0cd83 | 55 | sprintf(buf,"%d%d%d",tmp/100,(tmp%100)/10,tmp%10); |
HaoranX | 0:fd564dc0cd83 | 56 | slcd.printf(buf); |
HaoranX | 0:fd564dc0cd83 | 57 | slcd.Home(); |
HaoranX | 0:fd564dc0cd83 | 58 | } |
HaoranX | 0:fd564dc0cd83 | 59 | |
HaoranX | 0:fd564dc0cd83 | 60 | int main(){ |
HaoranX | 0:fd564dc0cd83 | 61 | amp_up.rise(amp_up_int); |
HaoranX | 0:fd564dc0cd83 | 62 | amp_down.rise(amp_down_int); |
HaoranX | 0:fd564dc0cd83 | 63 | slcd.DP1(1); |
HaoranX | 0:fd564dc0cd83 | 64 | display(amplitude*3.3); |
HaoranX | 0:fd564dc0cd83 | 65 | timer.attach(&timer_int, 1/freq); |
HaoranX | 0:fd564dc0cd83 | 66 | while(true){ |
HaoranX | 0:fd564dc0cd83 | 67 | if(tsi.readPercentage()!=0){ |
HaoranX | 0:fd564dc0cd83 | 68 | freq = 50 * tsi.readPercentage(); |
HaoranX | 0:fd564dc0cd83 | 69 | timer.attach(&timer_int, 1/freq); |
HaoranX | 0:fd564dc0cd83 | 70 | } |
HaoranX | 0:fd564dc0cd83 | 71 | wait(0.05); |
HaoranX | 0:fd564dc0cd83 | 72 | } |
HaoranX | 0:fd564dc0cd83 | 73 | } |