lab 7

Dependencies:   SDFileSystem mbed

software_osc.cpp

Committer:
jedh
Date:
2016-12-10
Revision:
0:f6d3b930f382

File content as of revision 0:f6d3b930f382:

#include "stdio.h"
#include "stdint.h"
#include "mbed.h"
#include "Freedom_headers.h"

#define USE_PC TRUE
/* UNCOMMENT THE FOLLOWING LINE TO ENABLE SD CARD FILESYSTEM VIA DEFAULT SPI */
#define USE_SD_CARD TRUE
/* UNCOMMENT THE FOLLOWING LINE TO ENABLE DS1307 REAL-TIME CLOCK VIA IIC */
#define USE_DS1307 TRUE
/* UNCOMMENT THE FOLLOWING LINE TO ENABLE SIMPLE FIFO FUNCTIONS */
#define USE_SIMPLE_FIFO TRUE

#ifdef USE_PC
Serial pc(USBTX,USBRX);

#ifdef USE_SD_CARD
#include "SDFileSystem.h"
#define SD_MOSI PTD6
#define SD_MISO PTD7
#define SD_SCK  PTD5
#define SD_CS   PTD4
char sd_root_name[]="sd";
char filename[80];
SDFileSystem sd(SD_MOSI, SD_MISO, SD_SCK, SD_CS, sd_root_name);  /* MOSI,MISO,SCK,CS, "Name of directory structure" */

#endif /* #ifdef USE_SD_CARD*/

#ifdef USE_DS1307
#include "EE3420_time.h"

#endif /* #ifdef USE_DS1307*/

#ifdef USE_SIMPLE_FIFO

/* comment out the folloing definitions to use the library defaults */
#define SIMPLE_FIFO_SIZE 32

#include "simple_fifo.h"

#endif /* #ifdef USE_SIMPLE_FIFO*/

FIFO_FLOAT scope_data;
int samples_active=0;
float voltage_level;
float ftemp;
char timestr[80];

int sample_count=0;
    
AnalogIn voltage_sensor(PTB0);
InterruptIn left_button(PTC12);  /* button labeled SW3, wired active-low needing pull-up */
Ticker t;
#define SAMPLE_FREQUENCY 5000.0

void take_sample()
{
    if(samples_active==1)
    {    
        voltage_level=voltage_sensor.read();
        /*if(fifo_float_writable(&scope_data))
        {
        fifo_float_write(&scope_data,voltage_level);
        }
        else
        {
            printf("fifo overrun\n");
            samples_active=0;
        }*/
        
        
        sample_count++;
    }
    if(sample_count>= 2000)
    {
        samples_active=0;
    }
}

void start_sample()
{
    if(samples_active==0)
    {
        fifo_float_init(&scope_data);
        sample_count=0;
        samples_active=1;  
    }
    else
    {
        samples_active=0;
    }
    
}

int main()
{

#ifdef USE_PC    
    pc.baud(115200);    /* set serial port speed to 115200 - must be matched in terminal emulator */
#endif
#ifdef USE_SLCD
    slcd.All_Segments(0);
#endif
#ifdef USE_CHARACTER_LCD
    character_lcd_initialize();
#endif

    fifo_float_init(&scope_data);
    
#ifdef USE_PC
    pc.printf("\n");
#endif

    get_DS1307_time(&EE3420_DS1307_data);
    set_KL46Z_RTC_from_DS1307();

    sprintf(filename,"/sd/voltage.csv");
    
    FILE *fp = fopen(filename, "w");
    if(fp == NULL) 
    {
        error("Could not open file ""%s"" for write\n", filename);
    }
    fprintf(fp,"date, time, scopes\n");
    fclose(fp);

    samples_active=0;
    
    left_button.mode(PullUp);
    left_button.fall(&start_sample);

    t.attach(&take_sample,1.0/SAMPLE_FREQUENCY);

while(true)
{
    
    if(fifo_float_readable(&scope_data))
    {
        
        fp = fopen(filename, "a");
        while(fifo_float_readable(&scope_data))
        {
            //get_DS1307_time(&EE3420_DS1307_data);
            //format_time_string_24(&EE3420_DS1307_data, timestr);
            fifo_float_read(&scope_data,&ftemp);
            //fprintf(fp, "20%02i/%02i/%02i, %02i:%02i:%02i, %f\n",EE3420_DS1307_data.year,EE3420_DS1307_data.month,
            //EE3420_DS1307_data.day,EE3420_DS1307_data.hours,EE3420_DS1307_data.min,EE3420_DS1307_data.sec,ftemp);
            fprintf(fp, "%f\n",ftemp);
            pc.printf("%f\n",ftemp);
        }
        fclose(fp);  
    }
}
} //end of main()