Teste SDCARD

Dependencies:   mbed SDFileSystem2 ssd1306_library USBDevice

Committer:
henriquer
Date:
Wed May 25 14:09:38 2022 +0000
Revision:
1:5d7f85d83bc0
Parent:
0:b418a81d46b0
Teste SDCARD - HR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henriquer 1:5d7f85d83bc0 1
Marcelocostanzo 0:b418a81d46b0 2 #include "mbed.h"
Marcelocostanzo 0:b418a81d46b0 3 //#include "USBSerial.h"
Marcelocostanzo 0:b418a81d46b0 4 #include "ssd1306.h"
Marcelocostanzo 0:b418a81d46b0 5 #include "SDFileSystem.h"
Marcelocostanzo 0:b418a81d46b0 6
Marcelocostanzo 0:b418a81d46b0 7 #define fator_filtro 5
Marcelocostanzo 0:b418a81d46b0 8 #define ctoT 0.224f
Marcelocostanzo 0:b418a81d46b0 9
Marcelocostanzo 0:b418a81d46b0 10 SDFileSystem sd(D11, D12, D13, D10, "sd"); // the pinout on the mbed Cool Components workshop board
Marcelocostanzo 0:b418a81d46b0 11
Marcelocostanzo 0:b418a81d46b0 12 FILE *myLogFile;
Marcelocostanzo 0:b418a81d46b0 13
Marcelocostanzo 0:b418a81d46b0 14 AnalogIn amp_pin(A0);
Marcelocostanzo 0:b418a81d46b0 15 AnalogIn volt_pin(A3);
Marcelocostanzo 0:b418a81d46b0 16
Marcelocostanzo 0:b418a81d46b0 17 //Virtual serial port over USB
Marcelocostanzo 0:b418a81d46b0 18 //USBSerial device;
Marcelocostanzo 0:b418a81d46b0 19 Serial pc(USBTX, USBRX);
Marcelocostanzo 0:b418a81d46b0 20
Marcelocostanzo 0:b418a81d46b0 21 SSD1306 lcd (D14, D15); // assumes default I2C address of 0x78
Marcelocostanzo 0:b418a81d46b0 22
Marcelocostanzo 0:b418a81d46b0 23 Ticker flipper;
Marcelocostanzo 0:b418a81d46b0 24 Timer fileOpenTimer;
Marcelocostanzo 0:b418a81d46b0 25 Timer debug_timer;
Marcelocostanzo 0:b418a81d46b0 26
Marcelocostanzo 0:b418a81d46b0 27 //DigitalOut led(D13);
Marcelocostanzo 0:b418a81d46b0 28 DigitalIn sw(PC_13);
Marcelocostanzo 0:b418a81d46b0 29
Marcelocostanzo 0:b418a81d46b0 30 float mAmp_S;
Marcelocostanzo 0:b418a81d46b0 31 float mAmp;
Marcelocostanzo 0:b418a81d46b0 32 float mAmp_filtred;
Marcelocostanzo 0:b418a81d46b0 33 float mAmp_filtred_old;
Marcelocostanzo 0:b418a81d46b0 34
Marcelocostanzo 0:b418a81d46b0 35 int second = 0;
Marcelocostanzo 0:b418a81d46b0 36 int minute = 0;
Marcelocostanzo 0:b418a81d46b0 37 int hour = 0;
Marcelocostanzo 0:b418a81d46b0 38 bool flag;
Marcelocostanzo 0:b418a81d46b0 39
Marcelocostanzo 0:b418a81d46b0 40 FILE *nextLogFile(void)
Marcelocostanzo 0:b418a81d46b0 41 {
Marcelocostanzo 0:b418a81d46b0 42 static unsigned int fileNumber = 0;
Marcelocostanzo 0:b418a81d46b0 43 char fileName[32];
Marcelocostanzo 0:b418a81d46b0 44 FILE *filePtr = NULL;
Marcelocostanzo 0:b418a81d46b0 45 do
Marcelocostanzo 0:b418a81d46b0 46 {
Marcelocostanzo 0:b418a81d46b0 47 if (filePtr != NULL)
Marcelocostanzo 0:b418a81d46b0 48 fclose(filePtr);
Marcelocostanzo 0:b418a81d46b0 49 sprintf(fileName,"/sd/log%04u.csv",fileNumber++);
Marcelocostanzo 0:b418a81d46b0 50 filePtr = fopen(fileName,"r");
Marcelocostanzo 0:b418a81d46b0 51 } while (filePtr != NULL);
Marcelocostanzo 0:b418a81d46b0 52 return fopen( fileName,"w");
Marcelocostanzo 0:b418a81d46b0 53 }
Marcelocostanzo 0:b418a81d46b0 54
Marcelocostanzo 0:b418a81d46b0 55
Marcelocostanzo 0:b418a81d46b0 56 void mAmp_time_base()
Marcelocostanzo 0:b418a81d46b0 57 {
Marcelocostanzo 0:b418a81d46b0 58 mAmp_S = mAmp_S + mAmp_filtred;
Marcelocostanzo 0:b418a81d46b0 59 //led=!led;
Marcelocostanzo 0:b418a81d46b0 60 second++;
Marcelocostanzo 0:b418a81d46b0 61 flag =! flag;
Marcelocostanzo 0:b418a81d46b0 62 }
Marcelocostanzo 0:b418a81d46b0 63
Marcelocostanzo 0:b418a81d46b0 64 int main(void)
Marcelocostanzo 0:b418a81d46b0 65 {
Marcelocostanzo 0:b418a81d46b0 66
Marcelocostanzo 0:b418a81d46b0 67 float volt;
Marcelocostanzo 0:b418a81d46b0 68 float volt_filtred;
Marcelocostanzo 0:b418a81d46b0 69 float volt_filtred_old;
Marcelocostanzo 0:b418a81d46b0 70
Marcelocostanzo 0:b418a81d46b0 71 float mAmp_H;
Marcelocostanzo 0:b418a81d46b0 72 bool start = 0;
Marcelocostanzo 0:b418a81d46b0 73
Marcelocostanzo 0:b418a81d46b0 74 lcd.speed (SSD1306::Medium); // set working frequency
Marcelocostanzo 0:b418a81d46b0 75 lcd.init(); // initialize SSD1306
Marcelocostanzo 0:b418a81d46b0 76 lcd.set_contrast(100);
Marcelocostanzo 0:b418a81d46b0 77 lcd.cls(); // clear frame buffer
Marcelocostanzo 0:b418a81d46b0 78 lcd.locate (3,2); // set text cursor to line 3, column 1
Marcelocostanzo 0:b418a81d46b0 79 lcd.printf ("Starting up"); // print to frame buffer
Marcelocostanzo 0:b418a81d46b0 80 for( int i = 0; i < 16; i++)
Marcelocostanzo 0:b418a81d46b0 81 {
Marcelocostanzo 0:b418a81d46b0 82 lcd.locate (4,i);
Marcelocostanzo 0:b418a81d46b0 83 lcd.printf (".");
Marcelocostanzo 0:b418a81d46b0 84 lcd.redraw();
Marcelocostanzo 0:b418a81d46b0 85 wait_ms(150);
Marcelocostanzo 0:b418a81d46b0 86 }
Marcelocostanzo 0:b418a81d46b0 87 wait_ms(300);
Marcelocostanzo 0:b418a81d46b0 88 lcd.cls();
Marcelocostanzo 0:b418a81d46b0 89 lcd.redraw();
Marcelocostanzo 0:b418a81d46b0 90
Marcelocostanzo 0:b418a81d46b0 91 myLogFile = nextLogFile();
Marcelocostanzo 0:b418a81d46b0 92 if (!myLogFile) {
Marcelocostanzo 0:b418a81d46b0 93 // ERROR failed to open the first log file for writing.
Marcelocostanzo 0:b418a81d46b0 94 // The SD card is missing, not working, read only or full?
Marcelocostanzo 0:b418a81d46b0 95
Marcelocostanzo 0:b418a81d46b0 96 return 1; // probably want to exit the program in this situation
Marcelocostanzo 0:b418a81d46b0 97 }
Marcelocostanzo 0:b418a81d46b0 98 float fator_filtro_x_ctoT = fator_filtro * ctoT;
Marcelocostanzo 0:b418a81d46b0 99 float soma_fator_filtro_x_ctoT = 1.0f + fator_filtro_x_ctoT;
Marcelocostanzo 0:b418a81d46b0 100
Marcelocostanzo 0:b418a81d46b0 101 printf("%f\n",fator_filtro_x_ctoT);
Marcelocostanzo 0:b418a81d46b0 102 printf("%f\n",soma_fator_filtro_x_ctoT);
Marcelocostanzo 0:b418a81d46b0 103
Marcelocostanzo 0:b418a81d46b0 104 while(1)
Marcelocostanzo 0:b418a81d46b0 105 {
Marcelocostanzo 0:b418a81d46b0 106 //debug_timer.reset();
Marcelocostanzo 0:b418a81d46b0 107 //debug_timer.start();
Marcelocostanzo 0:b418a81d46b0 108
Marcelocostanzo 0:b418a81d46b0 109
Marcelocostanzo 0:b418a81d46b0 110 if((sw == 0) && (start == 0))
Marcelocostanzo 0:b418a81d46b0 111 {
Marcelocostanzo 0:b418a81d46b0 112 wait_ms(200);
Marcelocostanzo 0:b418a81d46b0 113 if((sw == 0) && (start == 0))
Marcelocostanzo 0:b418a81d46b0 114 {
Marcelocostanzo 0:b418a81d46b0 115 start = 1;
Marcelocostanzo 0:b418a81d46b0 116 wait_ms(1000);
Marcelocostanzo 0:b418a81d46b0 117 flipper.attach(&mAmp_time_base, 1.0f);
Marcelocostanzo 0:b418a81d46b0 118 fileOpenTimer.start();
Marcelocostanzo 0:b418a81d46b0 119 lcd.cls();
Marcelocostanzo 0:b418a81d46b0 120 }
Marcelocostanzo 0:b418a81d46b0 121 }
Marcelocostanzo 0:b418a81d46b0 122
Marcelocostanzo 0:b418a81d46b0 123 if((sw == 0) && (start == 1))
Marcelocostanzo 0:b418a81d46b0 124 {
Marcelocostanzo 0:b418a81d46b0 125 wait_ms(200);
Marcelocostanzo 0:b418a81d46b0 126 if((sw == 0) && (start == 1))
Marcelocostanzo 0:b418a81d46b0 127 {
Marcelocostanzo 0:b418a81d46b0 128 start = 0;
Marcelocostanzo 0:b418a81d46b0 129 flipper.detach();
Marcelocostanzo 0:b418a81d46b0 130 lcd.locate(1,1);
Marcelocostanzo 0:b418a81d46b0 131 lcd.printf("Log finished");
Marcelocostanzo 0:b418a81d46b0 132 lcd.redraw();
Marcelocostanzo 0:b418a81d46b0 133 fileOpenTimer.stop();
Marcelocostanzo 0:b418a81d46b0 134 fileOpenTimer.reset(); // restart the timer
Marcelocostanzo 0:b418a81d46b0 135 fclose(myLogFile); // close the current file
Marcelocostanzo 0:b418a81d46b0 136 myLogFile = nextLogFile(); // open a new file
Marcelocostanzo 0:b418a81d46b0 137 wait_ms(5000);
Marcelocostanzo 0:b418a81d46b0 138 mAmp_S = 0;
Marcelocostanzo 0:b418a81d46b0 139 mAmp_H = 0;
Marcelocostanzo 0:b418a81d46b0 140 second = 0;
Marcelocostanzo 0:b418a81d46b0 141 minute = 0;
Marcelocostanzo 0:b418a81d46b0 142 hour = 0;
Marcelocostanzo 0:b418a81d46b0 143 lcd.cls();
Marcelocostanzo 0:b418a81d46b0 144 lcd.redraw();
Marcelocostanzo 0:b418a81d46b0 145 }
Marcelocostanzo 0:b418a81d46b0 146 }
Marcelocostanzo 0:b418a81d46b0 147
Marcelocostanzo 0:b418a81d46b0 148
Marcelocostanzo 0:b418a81d46b0 149 //mAmp = amp_pin.read() * 3.3f * 14.6f;
Marcelocostanzo 0:b418a81d46b0 150 //mAmp = mAmp * 1.37f * 100.0f;
Marcelocostanzo 0:b418a81d46b0 151
Marcelocostanzo 0:b418a81d46b0 152 mAmp = amp_pin.read() * 4870.0f;//6600.66f ;
Marcelocostanzo 0:b418a81d46b0 153
Marcelocostanzo 0:b418a81d46b0 154 mAmp_filtred = ((fator_filtro_x_ctoT * mAmp) + (mAmp_filtred_old)) / soma_fator_filtro_x_ctoT;
Marcelocostanzo 0:b418a81d46b0 155 mAmp_filtred_old = mAmp_filtred;
Marcelocostanzo 0:b418a81d46b0 156
Marcelocostanzo 0:b418a81d46b0 157
Marcelocostanzo 0:b418a81d46b0 158 volt = volt_pin.read() * 36.45f; //3.3f * divisor resistivo 10k / 1k
Marcelocostanzo 0:b418a81d46b0 159
Marcelocostanzo 0:b418a81d46b0 160 volt_filtred = ((fator_filtro_x_ctoT * volt) + (volt_filtred_old)) / soma_fator_filtro_x_ctoT;
Marcelocostanzo 0:b418a81d46b0 161 volt_filtred_old = volt_filtred;
Marcelocostanzo 0:b418a81d46b0 162
Marcelocostanzo 0:b418a81d46b0 163
Marcelocostanzo 0:b418a81d46b0 164 if(start == 0)
Marcelocostanzo 0:b418a81d46b0 165 {
Marcelocostanzo 0:b418a81d46b0 166 lcd.locate(1,1);
Marcelocostanzo 0:b418a81d46b0 167 lcd.printf("Press to log");
Marcelocostanzo 0:b418a81d46b0 168 }
Marcelocostanzo 0:b418a81d46b0 169
Marcelocostanzo 0:b418a81d46b0 170 if(start == 1)
Marcelocostanzo 0:b418a81d46b0 171 {
Marcelocostanzo 0:b418a81d46b0 172 mAmp_H = mAmp_S / 3600.0f;
Marcelocostanzo 0:b418a81d46b0 173 lcd.locate(1,1);
Marcelocostanzo 0:b418a81d46b0 174 lcd.printf("Logging...");
Marcelocostanzo 0:b418a81d46b0 175 lcd.locate(5,1);
Marcelocostanzo 0:b418a81d46b0 176 lcd.printf("%8.2f mAh",mAmp_H);
Marcelocostanzo 0:b418a81d46b0 177 lcd.locate(7,1);
Marcelocostanzo 0:b418a81d46b0 178 lcd.printf("%02i:%02i:%02i",hour, minute, second);
Marcelocostanzo 0:b418a81d46b0 179 }
Marcelocostanzo 0:b418a81d46b0 180
Marcelocostanzo 0:b418a81d46b0 181
Marcelocostanzo 0:b418a81d46b0 182 if(second > 59)
Marcelocostanzo 0:b418a81d46b0 183 {
Marcelocostanzo 0:b418a81d46b0 184 second = 0;
Marcelocostanzo 0:b418a81d46b0 185 minute++;
Marcelocostanzo 0:b418a81d46b0 186 }
Marcelocostanzo 0:b418a81d46b0 187
Marcelocostanzo 0:b418a81d46b0 188 if(minute > 59)
Marcelocostanzo 0:b418a81d46b0 189 {
Marcelocostanzo 0:b418a81d46b0 190 minute = 0;
Marcelocostanzo 0:b418a81d46b0 191 hour++;
Marcelocostanzo 0:b418a81d46b0 192 }
Marcelocostanzo 0:b418a81d46b0 193
Marcelocostanzo 0:b418a81d46b0 194 if(hour > 23)
Marcelocostanzo 0:b418a81d46b0 195 {
Marcelocostanzo 0:b418a81d46b0 196 hour = 0;
Marcelocostanzo 0:b418a81d46b0 197 }
Marcelocostanzo 0:b418a81d46b0 198
Marcelocostanzo 0:b418a81d46b0 199 lcd.locate(3,1);
Marcelocostanzo 0:b418a81d46b0 200 lcd.printf("%8.2f V",volt_filtred);
Marcelocostanzo 0:b418a81d46b0 201
Marcelocostanzo 0:b418a81d46b0 202 lcd.locate(4,1);
Marcelocostanzo 0:b418a81d46b0 203 lcd.printf("%8.2f mA",mAmp_filtred);
Marcelocostanzo 0:b418a81d46b0 204
Marcelocostanzo 0:b418a81d46b0 205 lcd.redraw();
Marcelocostanzo 0:b418a81d46b0 206
Marcelocostanzo 0:b418a81d46b0 207 if(flag == 1)
Marcelocostanzo 0:b418a81d46b0 208 {
Marcelocostanzo 0:b418a81d46b0 209 flag = 0;
Marcelocostanzo 0:b418a81d46b0 210 if(start == 1)
Marcelocostanzo 0:b418a81d46b0 211 {
Marcelocostanzo 0:b418a81d46b0 212 fprintf(myLogFile, "%02i:%02i:%02i ; %8.2f ; %8.2f ; %8.2f\n", hour, minute, second, volt_filtred, mAmp_filtred, mAmp_H);
Marcelocostanzo 0:b418a81d46b0 213 }
Marcelocostanzo 0:b418a81d46b0 214 }
Marcelocostanzo 0:b418a81d46b0 215
Marcelocostanzo 0:b418a81d46b0 216 if (fileOpenTimer > (5*60))
Marcelocostanzo 0:b418a81d46b0 217 { // file has been open 5 minutes
Marcelocostanzo 0:b418a81d46b0 218 fclose(myLogFile); // close the current file
Marcelocostanzo 0:b418a81d46b0 219 myLogFile = nextLogFile(); // open a new file
Marcelocostanzo 0:b418a81d46b0 220 fileOpenTimer.reset(); // restart the timer
Marcelocostanzo 0:b418a81d46b0 221 }
Marcelocostanzo 0:b418a81d46b0 222 wait_ms(200);
Marcelocostanzo 0:b418a81d46b0 223
Marcelocostanzo 0:b418a81d46b0 224 //debug_timer.stop();
Marcelocostanzo 0:b418a81d46b0 225 //printf("%f\n", debug_timer.read());
Marcelocostanzo 0:b418a81d46b0 226 }
Marcelocostanzo 0:b418a81d46b0 227 }