EE202A HW1 ADC Test

Dependencies:   SLCD TSI mbed

Committer:
HaoranX
Date:
Wed Feb 12 22:20:56 2014 +0000
Revision:
0:fd564dc0cd83
v

Who changed what in which revision?

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