Teste SDCARD

Dependencies:   mbed SDFileSystem2 ssd1306_library USBDevice

Committer:
Marcelocostanzo
Date:
Fri Jan 08 11:18:24 2021 +0000
Revision:
0:b418a81d46b0
Child:
1:5d7f85d83bc0
funcionando

Who changed what in which revision?

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