ECE4180proj / Mbed 2 deprecated 4180_proj

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos AD5206

wave.cpp

Committer:
hanjiex
Date:
2015-12-01
Revision:
10:159f38636ed4

File content as of revision 10:159f38636ed4:

/*
* wave.cpp
* 
*/

#include "mbed.h"
#include "wave.h"
#include "para.h"
#include "menu.h"
Serial pc(USBTX, USBRX);
AnalogOut  aout(p18);

// from global variable
extern para mypara;
int waveform_type = mypara.get_type();
int freq = mypara.get_freq();
float amp = mypara.get_amp();
float offset = mypara.get_offset();


int datapoint_counter=0;
float duty_cycle=0.2;
int length_waveform=100;
float time_interv=1.0/freq/length_waveform;
uint16_t waveform[100];
int x;
const double pi = 3.14;
void generate_waveform_datapoints(){
    float t=0;
     
    //------if sine wave--------
    if (waveform_type==0){  
        for (int counter=0; counter<length_waveform; counter++){
            x=amp/3.3*cos(2*pi*freq*t)+offset/3.3;
            waveform[counter]=(uint16_t) (x*65535);      
            t += time_interv;
        }
    }
    
    //------if square wave--------   
    if (waveform_type==1){  
        for (int counter=0; counter<length_waveform; counter++){
            if (counter<=length_waveform*duty_cycle){
                x=amp/3.3+offset/3.3;
            }else{
                x=-1.0*amp/3.3+offset/3.3;
            }
            waveform[counter]=(uint16_t) (x*65535);   
        }           
    }
    
    //------if triangle wave---------  
    if (waveform_type==2){  
        for (int counter=0; counter<length_waveform/2; counter++){
            x=amp/1.65*(2.0*counter/length_waveform-0.5)+offset/3.3;
            waveform[counter]=(uint16_t) (x*65535);   
        } 
        
        for (int counter=length_waveform/2; counter<length_waveform; counter++){
            waveform[counter]=waveform[length_waveform-counter-1];
        } 
                  
    }
}



void output_waveform_datapoints(){
    pc.printf("%d",freq);
    for (int counter=0; counter<length_waveform; counter++){
        aout.write_u16(waveform[counter]);
        wait(time_interv);
    } 
}


void output_waveform_datapoints_timer_ISR(){ 
        aout.write_u16(waveform[datapoint_counter]);
        datapoint_counter++;
        
        if (datapoint_counter==length_waveform-1){datapoint_counter=0;}
}