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 max32630fthr USBDevice
Fork of FTHR_SD_Demo by
Diff: main.cpp
- Revision:
- 11:94a7379c0db8
- Parent:
- 10:148da21c297e
- Child:
- 12:aa9fff0aec91
--- a/main.cpp Mon Jul 02 16:00:52 2018 +0000
+++ b/main.cpp Tue Jul 03 15:59:51 2018 +0000
@@ -2,6 +2,7 @@
#include "SDFileSystem.h"
#include "max32630fthr.h"
#include "USBSerial.h"
+#include <ctype.h>
#define I2C_ADDRESS 0x30 // DS2484 I2C address
@@ -85,6 +86,7 @@
//SD card insertion detection pin
DigitalIn SDDetect(P2_2, PullUp);
+InterruptIn SDInsert(P2_2);
// Virtual serial port over USB
@@ -101,6 +103,7 @@
bool log_flag = false;
bool led_toggle_flag = false;
bool button_flag = false;
+bool sd_insert_flag = false;
bool error_flag;
int error_ticks;
@@ -173,6 +176,11 @@
button_flag = true;
}
+void sd_insert() //sd_insert pressed isr
+{
+ sd_insert_flag = true;
+}
+
/*
void take_data_flag_callback(){ // set data sample time flag
@@ -836,6 +844,7 @@
// Read contents from file
char c = fgetc(fp);
+
while (!feof(fp))
{
pc.printf("%c", c);
@@ -879,6 +888,123 @@
return true;
}
+int getline(char **lineptr, int *n, FILE *stream) {
+ char *bufptr = NULL;
+ char *p = bufptr;
+ size_t size;
+ int c;
+
+ if (lineptr == NULL) {
+ return -1;
+ }
+ if (stream == NULL) {
+ return -1;
+ }
+ if (n == NULL) {
+ return -1;
+ }
+ bufptr = *lineptr;
+ size = *n;
+
+ c = fgetc(stream);
+ if (c == EOF) {
+ return -1;
+ }
+ if (bufptr == NULL) {
+ bufptr = (char *)malloc(128);
+ if (bufptr == NULL) {
+ return -1;
+ }
+ size = 128;
+ }
+ p = bufptr;
+ while(c != EOF) {
+ if ((p - bufptr) > (size - 1)) {
+ size = size + 128;
+ bufptr = (char *)realloc(bufptr, size);
+ if (bufptr == NULL) {
+ return -1;
+ }
+ }
+ *p++ = c;
+ if (c == '\n') {
+ break;
+ }
+ c = fgetc(stream);
+ }
+
+ *p++ = '\0';
+ *lineptr = bufptr;
+ *n = size;
+
+ return p - bufptr - 1;
+}
+
+//returns true if settings file exists and is in the proper format
+bool apply_settings_file(bool (&logged_devices)[MAX_DEVICES], int& interval)
+{
+ //int log_interval = 10;
+ //bool devices[MAX_DEVICES];
+
+ char * line = NULL;
+ int len = 0;
+ int line_number = 0;
+
+
+ FILE *fp = fopen("/sd/settings.txt", "r");
+ if (fp != NULL)
+ {
+
+ //initialize devices to all false;
+ for(int i = 0; i < MAX_DEVICES; i++)
+ {
+ logged_devices[i] = false;
+ }
+
+
+ // Read contents from file
+ while ((getline(&line, &len, fp)) != -1)
+ {
+ line_number++;
+
+ char i = 0;
+ char c = line[i];
+ while(c != '\0')
+ {
+ int number;
+ int n;
+ sscanf((line+i), "%d%n", &number, &n);
+ if(isdigit(c))
+ {
+ if(line_number == 1)
+ {
+ interval = number;
+ }
+ else if(line_number == 2)
+ {
+ logged_devices[number] = true;
+ }
+ if(n > 1)
+ i = i + (n - 1);
+ }
+ i++;
+ c = line[i];
+ }
+ }
+
+ fclose(fp);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+
+}
+
+
+
//******************************************************************************
// main()
@@ -901,6 +1027,11 @@
double T[MAX_DEVICES];
bool device_logged[MAX_DEVICES];
+ //initialize device_logged to all false;
+ for(int i = 0; i < MAX_DEVICES; i++)
+ {
+ device_logged[i] = false;
+ }
// i/o variables
char rx_buff[128]; // comport input buffer
@@ -916,6 +1047,8 @@
int log_interval = PERIOD;
int time_to_sample;
+ apply_settings_file(device_logged, log_interval);
+
//************* init ticker timer callbacks ****************
timer_1.attach(&LED_blink_callback,1.0); //start ticker, once per sec.
@@ -968,11 +1101,20 @@
rx_index = 0; //character buffer index for input from PC
button.fall(&btn_pressed);
+ SDInsert.fall(&sd_insert);
+
+ sd.disk_initialize(); //initialize sd card
//db.printf("start Main loop\r\n");
//db.printf("tf[%d]\r\n",tick_flag);
while(1) { // start main loop, take data if logging, check for input, repeat
+ if(sd_insert_flag == true)
+ {
+ sd.disk_initialize();
+ sd_insert_flag = false;
+ }
+
if(button_flag == true)
{
if(log_flag == false){ //start logging
@@ -985,6 +1127,8 @@
}
else
{
+ apply_settings_file(device_logged, log_interval);
+
FILE *fp = fopen(log_file, "a");
if (fp != NULL)
{
@@ -992,7 +1136,8 @@
for(j=0;j<device_count;j++)
{
- fprintf(fp,", Device %d Temperature (C)",j);
+ if(device_logged[j])
+ fprintf(fp,", Device %d Temperature (C)",j);
}
fprintf(fp,"\r\n");
@@ -1057,6 +1202,13 @@
pc.printf("]\r\n");
}
break;
+ case 'c':
+ case 'C':
+ if(!SDDetect)
+ pc.printf("y\r\n");
+ else
+ pc.printf("n\r\n");
+ break;
case 'd':
case 'D':
if(n==1) // if no device number is given
@@ -1077,10 +1229,24 @@
break;
case 'f':
case 'F': //f is for "flash" for microSD
- if(!SDDetect)
+ /*if(!SDDetect)
pc.printf("y\r\n");
else
- pc.printf("n\r\n");
+ pc.printf("n\r\n");*/
+ apply_settings_file(device_logged, log_interval);
+ pc.printf("Interval: %d\r\n", log_interval);
+ bool no_devices = true;
+ for(i = 0; i < MAX_DEVICES; i ++)
+ {
+ if(device_logged[i])
+ {
+ pc.printf("Device %d is being logged.\r\n", i);
+ no_devices = false;
+ }
+
+ }
+ if(no_devices)
+ pc.printf("No devices being logged.\r\n", i);
break;
case 'g':
case 'G':
@@ -1301,7 +1467,11 @@
fprintf(fp, "%d",time_count);
for(j=0;j<device_count;j++)
{
- fprintf(fp,", %7.3f",T[j]);
+ if(device_logged[j])
+ {
+ fprintf(fp,", %.3f",T[j]);
+ }
+
}
fprintf(fp,"\r\n");
