Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217
Fork of merged_code2_3rd_nov_2017 by
glc.cpp
- Committer:
- nikitateggi
- Date:
- 2017-06-24
- Revision:
- 24:d992ee8369f4
- Parent:
- 22:ffa88619551d
- Child:
- 31:0f67acfc6236
File content as of revision 24:d992ee8369f4:
/*
// Code by nikitha Commented by Nidhin
/#include "mbed.h"
#include "glc.h"
#include "i2c_dec.h"
//#include "ili9325.h"
//#include "lcd_base.h"
#include "display_modules.h"
//#include "touch_modules.h"
#include "rtc.h"
#include "sdcard.h"
void sample();
void Compute();
void i2c_spec();
Ticker flipper;
Ticker flipper1;
//osTimerDef (sample_data, sample); // define timers
//osTimerDef (Compute_GLC, Compute);
DigitalIn test_strip(PTA12);
AnalogIn Ain(PTC1);//Electrode one
AnalogIn Ain2(PTE29); // Electrode two
AnalogOut DAC_signal(PTE30);
Serial gtc(USBTX, USBRX);
//unsigned char c;
//unsigned char HOME = 0;
//signed char test_strip = 0;
unsigned int mgdl = 0;
unsigned int mgdll = 0;
unsigned int daata1= 0;
unsigned int data2 = 0;
unsigned int data1n= 0;
unsigned int data2n = 0;
unsigned int datafinal1 = 0;
unsigned int datafinal2 = 0;
//unsigned int data_diff = 0;
unsigned char err = 0;
Serial ble(PTC4,PTC3);
void sample()
{
data1n = Ain.read_u16();
data2n = Ain2.read_u16();
daata1 = beta*daata1+alpha*data1n;
data2 = beta*data2+alpha*data2n;
if( ((daata1-data2) >=(data2/10) && (daata1 > data2)) || ((data2-daata1) >=(data2/10) && (data2 > daata1)) )
{
err = 1;
}
else
{
err = 0;
}
}
void Compute()
{
datafinal1 = (unsigned int) NUMB1*(data2*VREF/(TOTAL))-NUMB2;
datafinal2 = (unsigned int) NUMB1*(daata1*VREF/(TOTAL))-NUMB2;
mgdl = (unsigned int) NUMB1*(((daata1+data2)/2)*VREF/(TOTAL))-NUMB2;
if (err == 0)
{
glc_4(mgdl);
sd_write(mgdl); // storing value into the sd card
sd_close();
// ble.printf("blood glucose is %d mg/dl", mgdl);
flipper.detach();
flipper1.detach();
// return mgdl;
}
else
{
// lcd1.Print( " ERROR RESULT", 5,220,COLOR_RED,COLOR_BLACK, 0);
// ble.printf("E:");
}
}
void glc(int pid){
unsigned char GLC_START = 0;
char t_s_d = 0;
i2c_spec();
GLC_START = 1;
// ble.baud(115200);
if(GLC_START == 1)
{
//DisableTouch();
//gpo_t = 0;
//lcd1.FillRect(5,127,230,320,COLOR_BLACK);
glc_1(); // displaying messages to insert the test strip
err = 0;
data1n = 0;
data2n = 0;
daata1 = 0;
data2 = 0;
sd_open_GLCfile(pid); // opening the glc file
while((test_strip));
// wait(500);
// Shutdown = 1;
if (!test_strip) // checks for the presence of test strip
{
flipper.attach(&sample, 0.8);
t_s_d = 0;
glc_2(); // displaying message to insert blood
while((!t_s_d) && (!test_strip))
{
gtc.printf("%d\n", data1n);
gtc.printf("%d\n", data2n);
if ((daata1 >= THRESHOLD) || (data2 >= THRESHOLD))
{
t_s_d = 1;
flipper1.attach(&Compute, 2.25); //computing the glucose level
glc_3();
}
else
{
//wait for insertion of blood;
}
}
// t_s_d = 0;
wait_ms(800);
//flipper.detach();
}
}
}
*/
// Code Modified with Bluetooth Structure Nidhin 2/6/17
///
#include "mbed.h"
#include "glc.h"
#include "i2c_dec.h"
//#include "ili9325.h"
//#include "lcd_base.h"
#include "display_modules.h"
//#include "touch_modules.h"
#include "rtc.h"
#include "sdcard.h"
#include "eeprom_pgm.h" // Nidhin 12/6/17
#include "struct.h" //Nidhin 31/5/2017
//#include "test_type.h" //Nidhin 31/5/2017
void sample();
void Compute();
void i2c_spec();
Ticker flipper;
Ticker flipper1;
unsigned char GLC_START = 0;
//osTimerDef (sample_data, sample); // define timers
//osTimerDef (Compute_GLC, Compute);
DigitalIn test_strip(PTA12);
AnalogIn Ain(PTC1);//Electrode one
AnalogIn Ain2(PTE29); // Electrode two
AnalogOut DAC_signal(PTE30);
Serial gtc(USBTX, USBRX);
//unsigned char c;
//unsigned char HOME = 0;
//signed char test_strip = 0;
static uint16_t mgdl = 0;
static uint16_t mgdll = 0;
uint16_t daata1= 0;
uint16_t data2 = 0;
static uint16_t data1n= 0;
static uint16_t data2n = 0;
uint16_t datafinal1 = 0;
uint16_t datafinal2 = 0;
//unsigned int data_diff = 0;
unsigned char err = 0;
uint32_t glcraw[2]; // Nidhin 31/5/2017
uint8_t chk_glc_data = 0;
uint16_t glc_testtype; // Nidhin 12/6/2017
Serial ble(PTC4,PTC3);
void sample()
{
data1n = Ain.read_u16();
data2n = Ain2.read_u16();
daata1 = beta*daata1+alpha*data1n;
data2 = beta*data2+alpha*data2n;
if( ((daata1-data2) >=(data2/10) && (daata1 > data2)) || ((data2-daata1) >=(data2/10) && (data2 > daata1)) )
{
err = 1;
}
else
{
err = 0;
//gtc.printf("\n", data1n, data2n); only for testing added nidhin 5Jun17
}
}
void Compute()
{
flipper.detach(); // ticker for sampling is disabled
datafinal1 = (uint16_t ) NUMB1*(data2*VREF/(TOTAL))-NUMB2;
datafinal2 = (uint16_t ) NUMB1*(daata1*VREF/(TOTAL))-NUMB2;
mgdl = (uint16_t) NUMB1*(((daata1+data2)/2)*VREF/(TOTAL))-NUMB2; // Nidhin 5/6/17 mgdl = (uint16_t) NUMB1*(((daata1+data2)/2)*VREF/(TOTAL))-NUMB2;
if (err == 0)
{
glc_4(mgdl);
}
else
{
// gtc.printf("err=1\n"); Commented Nidhin 8/6/2017
}
GLC_START = 0;
flipper1.detach();// ticker for computation is disabled
}
void glc(int32_t pid){
char t_s_d = 0;
i2c_spec(); // programming the i2c expander
sd_open_GLCfilee(pid); // Opens GLC file in APPEND mode
// Bluetooth Structure created globally
BLEMsg_info *ptr_BLEMsg_info_glc, BLEMsg_info_glc; // A copy of master strcuture [ "BLEMsg_info" ] by name "BLEMsg_info_bp" is created
ptr_BLEMsg_info_glc = &BLEMsg_info_glc; // *ptr_BLEMsg_info_bp is the pointer to local copy;
// Cant declare this statement outside main. Causing conflicts
// Declaration of Date Structure
DateTime_info *ptr_DateTime_info_glc, DateTime_info_glc; // A copy of Master Structure "DateTime_info" created,
ptr_DateTime_info_glc = &DateTime_info_glc; // Structure pointer points to that copy.
// RTC operations
time_t epoch_time_glc; //A copy of time_t by name epoch_time_bp is created
epoch_time_glc = rtc_read(); // time is got from get epoch function.
struct tm * ptr_time_info_glc, time_info_glc; // Sturucture copy of tm is created
ptr_time_info_glc = localtime(&epoch_time_glc); // Structure accepts the time in local format from "time_t" type.
/*
//BELOW LINE IS TO CHECK Date and TIME
gtc.printf("Time is - %d:%d:%d\n", (*ptr_time_info_glc).tm_hour, (*ptr_time_info_glc).tm_min, (*ptr_time_info_glc).tm_sec);
gtc.printf("Date is - %d:%d:%d\n", (*ptr_time_info_glc).tm_mday, (*ptr_time_info_glc).tm_mon+1, (*ptr_time_info_glc).tm_year-100);
*/
//Copying from one structure to the other using variables
DateTime_info_glc.hour = (uint8_t)(*ptr_time_info_glc).tm_hour;
DateTime_info_glc.mins = (uint8_t)(*ptr_time_info_glc).tm_min;
DateTime_info_glc.sec = (uint8_t)(*ptr_time_info_glc).tm_sec;
DateTime_info_glc.date = (uint8_t) (*ptr_time_info_glc).tm_mday;
DateTime_info_glc.month =(uint8_t)(*ptr_time_info_glc).tm_mon+1;
DateTime_info_glc.year = (uint8_t)(*ptr_time_info_glc).tm_year-100;
// Copying Time to Main structure
BLEMsg_info_glc.date_time.hour = DateTime_info_glc.hour;
BLEMsg_info_glc.date_time.mins = DateTime_info_glc.mins;
BLEMsg_info_glc.date_time.sec = DateTime_info_glc.sec;
BLEMsg_info_glc.date_time.date = DateTime_info_glc.date ;
BLEMsg_info_glc.date_time.month = DateTime_info_glc.month ;
BLEMsg_info_glc.date_time.year = DateTime_info_glc.year ;
/*
//Checking if the structure has these values
gtc.printf("\nTime 2 is - %d:%d:%d\n", DateTime_info_glc.hour, DateTime_info_glc.mins, DateTime_info_glc.sec);
gtc.printf("\nDate 2 is - %d:%d:%d\n",DateTime_info_glc.date, DateTime_info_glc.month, DateTime_info_glc.year);
*/
//Loading values to of Test type
test_type_info test_type_info_glc; // copy of " test_type_info" created
test_type_info_glc = BG_Test; // Loaded value 00 to the test type
BLEMsg_info_glc.test_type = test_type_info_glc;
//Check if 01 is getting printed
//gtc.printf("\nTest Type for BG is 01 = %d\n", test_type_info_glc);
// Loading values of Length , PID, DID, sampling frequency, number of samples, calculated data.
BLEMsg_info_glc.device_id = 01; // Device ID fixed
BLEMsg_info_glc.patient_id = (uint16_t)pid; // Patient ID
BLEMsg_info_glc.sampling_freq = 0; // sampling frrquency
BLEMsg_info_glc.length = 30; //Total length of data in bytes 22 B+10752 B
BLEMsg_info_glc.num_samples.num_sample_ecg_OTtyp = 2;
BLEMsg_info_glc.num_samples.num_sample_ppg_dummy = 0;
GLC_START = 1;
// ble.baud(115200);
if(GLC_START == 1)
{
glc_1(); // displaying messages to insert the test strip
err = 0;
data1n = 0;
data2n = 0;
daata1 = 0;
data2 = 0;
//sd_open_GLCfile(pid); // opening the glc file Commented
while((test_strip));
if (!test_strip) // checks for the presence of test strip
{
flipper.attach(&sample, 0.8);
t_s_d = 0;
glc_2(); // displaying message to insert blood
while((!t_s_d) && (!test_strip))
{
//if(chk_glc_data == 0) //Nidhin 31/5/2017
//{
/*
glcraw[0] = (uint16_t) data1n; //Nidhin 31/5/2017
glcraw[1] = (uint16_t) data2n; // Nidhin 31/5/2017
gtc.printf("datain is =%d\n", data1n);
gtc.printf("data2n is = %d\n", data2n);
gtc.printf("datain is =%d\n", data1n);
gtc.printf("data2n is = %d\n", data2n);
*/
//chk_glc_data = 1;
//}
//gtc.printf("Checking\n");
if ((daata1 >= THRESHOLD) || (data2 >= THRESHOLD))
{
//glcraw[0] = (uint16_t) data1n; //Nidhin 5/6/2017
//glcraw[1] = (uint16_t) data2n; // Nidhin 5/6/2017
//gtc.printf("data1n is =%d\n", data1n);
//gtc.printf("data2n is = %d\n", data2n);
// gtc.printf("glcraw[0] is =%d\n", glcraw[0]);
//gtc.printf("glcraw[1] is = %d\n", glcraw[1]);
t_s_d = 1;
flipper1.attach(&Compute, 2.25); //computing the glucose level
glc_3();
}
else
{
//wait for insertion of blood;
}
}
wait_ms(800);
}
//gtc.printf("mgdl is - %d\n", mgdll);
}
wait(2.25);
if (err==0)
{
gtc.printf("DATA1 is - %d\n", data1n);
gtc.printf("DATA2 is - %d\n", data2n);
gtc.printf("mgdl is - %d\n", mgdl);
glcraw[0] = (uint32_t)data1n;
glcraw[1] = (uint32_t)data2n;
sd_glcwrite(glcraw, pid); //Writes the raw data into GLC file
//Results Stored to Bluetooth structure
glc_testtype = eprom_read_16(20); // Reads the test type (before meal = 0 / after meal = 1 OR Random = 2 from location 2 of the EEPROM) Nidhin 12/6/17
BLEMsg_info_glc.cal_data.cal_sbp_dummy = (uint16_t) glc_testtype; // Data stored into structure
BLEMsg_info_glc.cal_data.cal_dbp_OTtyp = (uint16_t) mgdl; //To be checked for reliable results
structure_file(ptr_BLEMsg_info_glc, pid); // Copy the structure into the GLC file
glcfile_mainfile(pid);
}
else
{
gtc.printf("replace teststip");
}
}
