KIT Solar Car Project / Mbed 2 deprecated mbed_max6675_4_LM61_AEmicroSD

Dependencies:   mbed SDFileSystem

Committer:
BoostNori
Date:
Thu Mar 19 04:45:23 2020 +0000
Revision:
0:d68d5418c985
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BoostNori 0:d68d5418c985 1 #include "mbed.h"
BoostNori 0:d68d5418c985 2 #include "max6675.h"
BoostNori 0:d68d5418c985 3 #include "max6675_2.h"
BoostNori 0:d68d5418c985 4 #include "max6675_3.h"
BoostNori 0:d68d5418c985 5 #include "max6675_4.h"
BoostNori 0:d68d5418c985 6 #include "SDFileSystem.h"
BoostNori 0:d68d5418c985 7 #include <time.h>
BoostNori 0:d68d5418c985 8 #include <stdio.h>
BoostNori 0:d68d5418c985 9
BoostNori 0:d68d5418c985 10 DigitalOut led_1(LED1);
BoostNori 0:d68d5418c985 11 DigitalOut led_2(LED2);
BoostNori 0:d68d5418c985 12 DigitalOut led_3(LED3);
BoostNori 0:d68d5418c985 13 DigitalOut led_4(LED4);
BoostNori 0:d68d5418c985 14 SPI spi(p11,p12,p13);
BoostNori 0:d68d5418c985 15 max6675 max(spi,p18);
BoostNori 0:d68d5418c985 16 SPI spi_2(p11,p12,p13);
BoostNori 0:d68d5418c985 17 max6675_2 max_2(spi_2,p21);
BoostNori 0:d68d5418c985 18 SPI spi_3(p11,p12,p13);
BoostNori 0:d68d5418c985 19 max6675_3 max_3(spi_3,p22);
BoostNori 0:d68d5418c985 20 SPI spi_4(p11,p12,p13);
BoostNori 0:d68d5418c985 21 max6675_4 max_4(spi_4,p23);
BoostNori 0:d68d5418c985 22 AnalogIn LM61(p15);
BoostNori 0:d68d5418c985 23 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
BoostNori 0:d68d5418c985 24 Serial pc(USBTX,USBRX);
BoostNori 0:d68d5418c985 25 DigitalIn swi_1(p24); //p5~p30のどれでも良い
BoostNori 0:d68d5418c985 26 DigitalIn swi_2(p25); //p5~p30のどれでも良い
BoostNori 0:d68d5418c985 27
BoostNori 0:d68d5418c985 28 void led()
BoostNori 0:d68d5418c985 29 {
BoostNori 0:d68d5418c985 30 led_1 = 1;
BoostNori 0:d68d5418c985 31 led_2 = 1;
BoostNori 0:d68d5418c985 32 led_3 = 1;
BoostNori 0:d68d5418c985 33 led_4 = 1;
BoostNori 0:d68d5418c985 34 wait(.2);
BoostNori 0:d68d5418c985 35
BoostNori 0:d68d5418c985 36 led_1 = 0;
BoostNori 0:d68d5418c985 37 led_2 = 0;
BoostNori 0:d68d5418c985 38 led_3 = 0;
BoostNori 0:d68d5418c985 39 led_4 = 0;
BoostNori 0:d68d5418c985 40 wait(.2);
BoostNori 0:d68d5418c985 41
BoostNori 0:d68d5418c985 42 led_1 = 1;
BoostNori 0:d68d5418c985 43 led_2 = 1;
BoostNori 0:d68d5418c985 44 led_3 = 1;
BoostNori 0:d68d5418c985 45 led_4 = 1;
BoostNori 0:d68d5418c985 46 wait(.2);
BoostNori 0:d68d5418c985 47
BoostNori 0:d68d5418c985 48 led_1 = 0;
BoostNori 0:d68d5418c985 49 led_2 = 0;
BoostNori 0:d68d5418c985 50 led_3 = 0;
BoostNori 0:d68d5418c985 51 led_4 = 0;
BoostNori 0:d68d5418c985 52 wait(.2);
BoostNori 0:d68d5418c985 53 }
BoostNori 0:d68d5418c985 54
BoostNori 0:d68d5418c985 55
BoostNori 0:d68d5418c985 56 int main() {
BoostNori 0:d68d5418c985 57 int r = 5; //平均する値の個数
BoostNori 0:d68d5418c985 58 double w_h = .25; //加熱waitの時間
BoostNori 0:d68d5418c985 59 double w_c = .25; //冷却waitの時間
BoostNori 0:d68d5418c985 60 clock_t start_h;
BoostNori 0:d68d5418c985 61 clock_t start_c;
BoostNori 0:d68d5418c985 62 float tempC, sum, sum_2, sum_3, sum_4, ave, ave_2, ave_3, ave_4;
BoostNori 0:d68d5418c985 63 int i, j, k, l; //平均化処理に使用
BoostNori 0:d68d5418c985 64 swi_1.mode(PullUp);
BoostNori 0:d68d5418c985 65 swi_2.mode(PullUp);
BoostNori 0:d68d5418c985 66
BoostNori 0:d68d5418c985 67 mkdir("/sd/mydir", 0777);
BoostNori 0:d68d5418c985 68 printf("test start!\n");
BoostNori 0:d68d5418c985 69 FILE *fp = fopen("/sd/mydir/test_heating.csv", "a");
BoostNori 0:d68d5418c985 70 if(fp == NULL)
BoostNori 0:d68d5418c985 71 { error("Could not open file for write\n");
BoostNori 0:d68d5418c985 72 }
BoostNori 0:d68d5418c985 73
BoostNori 0:d68d5418c985 74 fprintf(fp, "t,T_1,T_2,T_3,T_4,tempC\n");
BoostNori 0:d68d5418c985 75 fclose(fp);
BoostNori 0:d68d5418c985 76 /*FILE *fp =*/ fopen("/sd/mydir/test_cooling.csv", "a");
BoostNori 0:d68d5418c985 77 if(fp == NULL)
BoostNori 0:d68d5418c985 78 { error("Could not open file for write\n");
BoostNori 0:d68d5418c985 79 }
BoostNori 0:d68d5418c985 80
BoostNori 0:d68d5418c985 81 fprintf(fp, "t,T_1,T_2,T_3,T_4,tempC\n");
BoostNori 0:d68d5418c985 82 fclose(fp);
BoostNori 0:d68d5418c985 83
BoostNori 0:d68d5418c985 84
BoostNori 0:d68d5418c985 85 if( swi_1 == 1 && swi_2 == 0 ) //スイッチをマイコンのUSBと逆方向に倒したとき
BoostNori 0:d68d5418c985 86 {
BoostNori 0:d68d5418c985 87 printf("\n\n\nheating start\n\n\n");
BoostNori 0:d68d5418c985 88
BoostNori 0:d68d5418c985 89 led();
BoostNori 0:d68d5418c985 90
BoostNori 0:d68d5418c985 91 while (1)
BoostNori 0:d68d5418c985 92 {
BoostNori 0:d68d5418c985 93 start_h = clock();
BoostNori 0:d68d5418c985 94 printf("%f\n", (double)start_h/CLOCKS_PER_SEC);
BoostNori 0:d68d5418c985 95
BoostNori 0:d68d5418c985 96 max.select();
BoostNori 0:d68d5418c985 97 max_2.deselect_2();
BoostNori 0:d68d5418c985 98 max_3.deselect_3();
BoostNori 0:d68d5418c985 99 max_4.deselect_4();
BoostNori 0:d68d5418c985 100
BoostNori 0:d68d5418c985 101 //平均化処理
BoostNori 0:d68d5418c985 102
BoostNori 0:d68d5418c985 103 sum = 0;
BoostNori 0:d68d5418c985 104 ave = 0;
BoostNori 0:d68d5418c985 105 i = 0;
BoostNori 0:d68d5418c985 106 for( i = 0; i < r; i++)
BoostNori 0:d68d5418c985 107 {
BoostNori 0:d68d5418c985 108 float temp = max.read_temp();
BoostNori 0:d68d5418c985 109 sum += temp;
BoostNori 0:d68d5418c985 110 }
BoostNori 0:d68d5418c985 111
BoostNori 0:d68d5418c985 112 ave = sum / r;
BoostNori 0:d68d5418c985 113 printf("\n\rT: %f",ave );
BoostNori 0:d68d5418c985 114
BoostNori 0:d68d5418c985 115
BoostNori 0:d68d5418c985 116
BoostNori 0:d68d5418c985 117 max.deselect();
BoostNori 0:d68d5418c985 118 max_2.select_2();
BoostNori 0:d68d5418c985 119 max_3.deselect_3();
BoostNori 0:d68d5418c985 120 max_4.deselect_4();
BoostNori 0:d68d5418c985 121
BoostNori 0:d68d5418c985 122 //平均化処理
BoostNori 0:d68d5418c985 123 sum_2 = 0;
BoostNori 0:d68d5418c985 124 ave_2 = 0;
BoostNori 0:d68d5418c985 125 j = 0;
BoostNori 0:d68d5418c985 126 for( j = 0; j < r; j++)
BoostNori 0:d68d5418c985 127 {
BoostNori 0:d68d5418c985 128 float temp_2 = max_2.read_temp_2();
BoostNori 0:d68d5418c985 129 sum_2 += temp_2;
BoostNori 0:d68d5418c985 130 }
BoostNori 0:d68d5418c985 131
BoostNori 0:d68d5418c985 132 ave_2 = sum_2 / r;
BoostNori 0:d68d5418c985 133 printf("\n\rT: %f",ave_2 );
BoostNori 0:d68d5418c985 134
BoostNori 0:d68d5418c985 135
BoostNori 0:d68d5418c985 136
BoostNori 0:d68d5418c985 137 max.deselect();
BoostNori 0:d68d5418c985 138 max_2.deselect_2();
BoostNori 0:d68d5418c985 139 max_3.select_3();
BoostNori 0:d68d5418c985 140 max_4.deselect_4();
BoostNori 0:d68d5418c985 141
BoostNori 0:d68d5418c985 142 //平均化処理
BoostNori 0:d68d5418c985 143 sum_3 = 0;
BoostNori 0:d68d5418c985 144 ave_3 = 0;
BoostNori 0:d68d5418c985 145 k = 0;
BoostNori 0:d68d5418c985 146 for( k = 0; k < r; k++)
BoostNori 0:d68d5418c985 147 {
BoostNori 0:d68d5418c985 148 float temp_3 = max_3.read_temp_3();
BoostNori 0:d68d5418c985 149 sum_3 += temp_3;
BoostNori 0:d68d5418c985 150 }
BoostNori 0:d68d5418c985 151
BoostNori 0:d68d5418c985 152 ave_3 = sum_3 / r;
BoostNori 0:d68d5418c985 153 printf("\n\rT: %f",ave_3 );
BoostNori 0:d68d5418c985 154
BoostNori 0:d68d5418c985 155
BoostNori 0:d68d5418c985 156
BoostNori 0:d68d5418c985 157 max.deselect();
BoostNori 0:d68d5418c985 158 max_2.deselect_2();
BoostNori 0:d68d5418c985 159 max_3.deselect_3();
BoostNori 0:d68d5418c985 160 max_4.select_4();
BoostNori 0:d68d5418c985 161
BoostNori 0:d68d5418c985 162 //平均化処理
BoostNori 0:d68d5418c985 163 sum_4 = 0;
BoostNori 0:d68d5418c985 164 ave_4 =0;
BoostNori 0:d68d5418c985 165 l = 0;
BoostNori 0:d68d5418c985 166 for( l = 0; l < r; l++)
BoostNori 0:d68d5418c985 167 {
BoostNori 0:d68d5418c985 168 float temp_4 = max_4.read_temp_4();
BoostNori 0:d68d5418c985 169 sum_4 += temp_4;
BoostNori 0:d68d5418c985 170 }
BoostNori 0:d68d5418c985 171
BoostNori 0:d68d5418c985 172 ave_4 = sum_4 / r;
BoostNori 0:d68d5418c985 173 printf("\n\rT: %f",ave_4 );
BoostNori 0:d68d5418c985 174
BoostNori 0:d68d5418c985 175 //conversion to degrees C - from sensor output voltage per LM61 data sheet
BoostNori 0:d68d5418c985 176 tempC = ((LM61*3.3)-0.600)*100.0;
BoostNori 0:d68d5418c985 177
BoostNori 0:d68d5418c985 178 printf("\nC: %5.2F \n\n\n\r", tempC);
BoostNori 0:d68d5418c985 179
BoostNori 0:d68d5418c985 180 /*FILE *fp =*/ fopen("/sd/mydir/test_heating.csv", "a");
BoostNori 0:d68d5418c985 181 if(fp == NULL)
BoostNori 0:d68d5418c985 182 { error("Could not open file for write\n");
BoostNori 0:d68d5418c985 183 }
BoostNori 0:d68d5418c985 184
BoostNori 0:d68d5418c985 185 fprintf(fp, "%f,%f,%f,%f,%f,%f\n",(double)start_h/CLOCKS_PER_SEC, ave, ave_2, ave_3,ave_4, tempC);
BoostNori 0:d68d5418c985 186 fclose(fp);
BoostNori 0:d68d5418c985 187 wait(w_h);
BoostNori 0:d68d5418c985 188 }//while_h
BoostNori 0:d68d5418c985 189
BoostNori 0:d68d5418c985 190 }//if_h
BoostNori 0:d68d5418c985 191
BoostNori 0:d68d5418c985 192
BoostNori 0:d68d5418c985 193 if( swi_1 == 0 && swi_2 == 1 ) //スイッチをマイコンのUSBの方向に倒したとき
BoostNori 0:d68d5418c985 194 {
BoostNori 0:d68d5418c985 195 printf("\n\n\ncolling start\n\n\n");
BoostNori 0:d68d5418c985 196
BoostNori 0:d68d5418c985 197 led();
BoostNori 0:d68d5418c985 198
BoostNori 0:d68d5418c985 199 while (1)
BoostNori 0:d68d5418c985 200 {
BoostNori 0:d68d5418c985 201 start_c = clock();
BoostNori 0:d68d5418c985 202 printf("%f\n", (double)start_c/CLOCKS_PER_SEC);
BoostNori 0:d68d5418c985 203 // double sum_time = start_h/CLOCKS_PER_SEC + start_c/CLOCKS_PER_SEC;
BoostNori 0:d68d5418c985 204 // printf("%f\n", sum_time);
BoostNori 0:d68d5418c985 205
BoostNori 0:d68d5418c985 206
BoostNori 0:d68d5418c985 207
BoostNori 0:d68d5418c985 208 max.select();
BoostNori 0:d68d5418c985 209 max_2.deselect_2();
BoostNori 0:d68d5418c985 210 max_3.deselect_3();
BoostNori 0:d68d5418c985 211 max_4.deselect_4();
BoostNori 0:d68d5418c985 212
BoostNori 0:d68d5418c985 213 //平均化処理
BoostNori 0:d68d5418c985 214
BoostNori 0:d68d5418c985 215 sum = 0;
BoostNori 0:d68d5418c985 216 ave = 0;
BoostNori 0:d68d5418c985 217 i = 0;
BoostNori 0:d68d5418c985 218 for( i = 0; i < r; i++)
BoostNori 0:d68d5418c985 219 {
BoostNori 0:d68d5418c985 220 float temp = max.read_temp();
BoostNori 0:d68d5418c985 221 sum += temp;
BoostNori 0:d68d5418c985 222 }
BoostNori 0:d68d5418c985 223
BoostNori 0:d68d5418c985 224 ave = sum / r;
BoostNori 0:d68d5418c985 225 printf("\n\rT: %f",ave );
BoostNori 0:d68d5418c985 226
BoostNori 0:d68d5418c985 227
BoostNori 0:d68d5418c985 228
BoostNori 0:d68d5418c985 229
BoostNori 0:d68d5418c985 230 max.deselect();
BoostNori 0:d68d5418c985 231 max_2.select_2();
BoostNori 0:d68d5418c985 232 max_3.deselect_3();
BoostNori 0:d68d5418c985 233 max_4.deselect_4();
BoostNori 0:d68d5418c985 234
BoostNori 0:d68d5418c985 235 //平均化処理
BoostNori 0:d68d5418c985 236 sum_2 = 0;
BoostNori 0:d68d5418c985 237 ave_2 = 0;
BoostNori 0:d68d5418c985 238 j = 0;
BoostNori 0:d68d5418c985 239 for( j = 0; j < r; j++)
BoostNori 0:d68d5418c985 240 {
BoostNori 0:d68d5418c985 241 float temp_2 = max_2.read_temp_2();
BoostNori 0:d68d5418c985 242 sum_2 += temp_2;
BoostNori 0:d68d5418c985 243 }
BoostNori 0:d68d5418c985 244
BoostNori 0:d68d5418c985 245 ave_2 = sum_2 / r;
BoostNori 0:d68d5418c985 246 printf("\n\rT: %f",ave_2 );
BoostNori 0:d68d5418c985 247
BoostNori 0:d68d5418c985 248
BoostNori 0:d68d5418c985 249
BoostNori 0:d68d5418c985 250 max.deselect();
BoostNori 0:d68d5418c985 251 max_2.deselect_2();
BoostNori 0:d68d5418c985 252 max_3.select_3();
BoostNori 0:d68d5418c985 253 max_4.deselect_4();
BoostNori 0:d68d5418c985 254
BoostNori 0:d68d5418c985 255 //平均化処理
BoostNori 0:d68d5418c985 256 sum_3 = 0;
BoostNori 0:d68d5418c985 257 ave_3 = 0;
BoostNori 0:d68d5418c985 258 k = 0;
BoostNori 0:d68d5418c985 259 for( k = 0; k < r; k++)
BoostNori 0:d68d5418c985 260 {
BoostNori 0:d68d5418c985 261 float temp_3 = max_3.read_temp_3();
BoostNori 0:d68d5418c985 262 sum_3 += temp_3;
BoostNori 0:d68d5418c985 263 }
BoostNori 0:d68d5418c985 264
BoostNori 0:d68d5418c985 265 ave_3 = sum_3 / r;
BoostNori 0:d68d5418c985 266 printf("\n\rT: %f",ave_3 );
BoostNori 0:d68d5418c985 267
BoostNori 0:d68d5418c985 268
BoostNori 0:d68d5418c985 269
BoostNori 0:d68d5418c985 270 max.deselect();
BoostNori 0:d68d5418c985 271 max_2.deselect_2();
BoostNori 0:d68d5418c985 272 max_3.deselect_3();
BoostNori 0:d68d5418c985 273 max_4.select_4();
BoostNori 0:d68d5418c985 274
BoostNori 0:d68d5418c985 275 //平均化処理
BoostNori 0:d68d5418c985 276 sum_4 = 0;
BoostNori 0:d68d5418c985 277 ave_4 = 0;
BoostNori 0:d68d5418c985 278 l = 0;
BoostNori 0:d68d5418c985 279 for( l = 0; l < r; l++)
BoostNori 0:d68d5418c985 280 {
BoostNori 0:d68d5418c985 281 float temp_4 = max_4.read_temp_4();
BoostNori 0:d68d5418c985 282 sum_4 += temp_4;
BoostNori 0:d68d5418c985 283 }
BoostNori 0:d68d5418c985 284
BoostNori 0:d68d5418c985 285 ave_4 = sum_4 / r;
BoostNori 0:d68d5418c985 286 printf("\n\rT: %f",ave_4 );
BoostNori 0:d68d5418c985 287
BoostNori 0:d68d5418c985 288 //conversion to degrees C - from sensor output voltage per LM61 data sheet
BoostNori 0:d68d5418c985 289 tempC = ((LM61*3.3)-0.600)*100.0;
BoostNori 0:d68d5418c985 290
BoostNori 0:d68d5418c985 291 printf("\nC: %5.2F \n\n\n\r", tempC);
BoostNori 0:d68d5418c985 292
BoostNori 0:d68d5418c985 293 /*FILE *fp = */fopen("/sd/mydir/test_cooling.csv", "a");
BoostNori 0:d68d5418c985 294 if(fp == NULL)
BoostNori 0:d68d5418c985 295 { error("Could not open file for write\n");
BoostNori 0:d68d5418c985 296 }
BoostNori 0:d68d5418c985 297
BoostNori 0:d68d5418c985 298 fprintf(fp, "%f,%f,%f,%f,%f,%f\n",(double)start_c/CLOCKS_PER_SEC, ave, ave_2, ave_3,ave_4, tempC);
BoostNori 0:d68d5418c985 299 fclose(fp);
BoostNori 0:d68d5418c985 300 wait(w_c);
BoostNori 0:d68d5418c985 301 }//while_c
BoostNori 0:d68d5418c985 302
BoostNori 0:d68d5418c985 303 }//if_c
BoostNori 0:d68d5418c985 304
BoostNori 0:d68d5418c985 305
BoostNori 0:d68d5418c985 306 if( swi_1 == 1 && swi_2 == 1 ) // スイッチを倒さない時(真ん中の時)
BoostNori 0:d68d5418c985 307 {
BoostNori 0:d68d5418c985 308 led();
BoostNori 0:d68d5418c985 309 printf("\n\n\nsotp\n\n\n");
BoostNori 0:d68d5418c985 310 }
BoostNori 0:d68d5418c985 311
BoostNori 0:d68d5418c985 312 } //main()
BoostNori 0:d68d5418c985 313