void get_gps_data() { // gps buffer char* gps_buff = (char*)malloc(sizeof(char)*100); // scan for data from the gps scanf("%s",gps_buff); #ifdef LOG_GPS snprintf(log_str, 100, "\r\nGetting GPS Data: %s\r\n",gps_buff); write_log(); #endif // now try to parst the gps string if(parse_GPS(gps_buff)) { #ifdef LOG_GPS snprintf(log_str, 100, "Lat - %d\tLon - %d\tTime - %02d:%02d:%02d\r\n", (int)(gps->lat*1000000), (int)(gps->lon*1000000), gps->hour,gps->minute,gps->second); write_log(); #endif // turn on 'Good GPS LED' cc3_led_set_state (1, true); } else { #ifdef LOG_GPS snprintf(log_str, 100, "INVALID\r\n"); write_log(); #endif // turn off 'Good GPS LED' cc3_led_set_state (1, false); } free(gps_buff); }
int main(void) { DDRF = 0; char GPS[100]; char dylos[10]; char GPS_line = 0; char dylos_line = 0; char sd_buff[150]; char buffer[30]; int GPS_data[15]; int dylos_data[2]; int C3H8, CH4, CO, H2S, F; char new_GPS_data = 0; char new_dylos_data = 0; FRESULT fr; int ppm2[151]; ppm2[0] = 10478; ppm2[1] = 9706; ppm2[2] = 9015; ppm2[3] = 8394; ppm2[4] = 7834; ppm2[5] = 7327; ppm2[6] = 6868; ppm2[7] = 6449; ppm2[8] = 6068; ppm2[9] = 5718; ppm2[10] = 5398; ppm2[11] = 5103; ppm2[12] = 4831; ppm2[13] = 4581; ppm2[14] = 4349; ppm2[15] = 4133; ppm2[16] = 3934; ppm2[17] = 3748; ppm2[18] = 3575; ppm2[19] = 3413; ppm2[20] = 3262; ppm2[21] = 3121; ppm2[22] = 2988; ppm2[23] = 2864; ppm2[24] = 2747; ppm2[25] = 2637; ppm2[26] = 2533; ppm2[27] = 2435; ppm2[28] = 2343; ppm2[29] = 2256; ppm2[30] = 2173; ppm2[31] = 2095; ppm2[32] = 2021; ppm2[33] = 1951; ppm2[34] = 1884; ppm2[35] = 1821; ppm2[36] = 1760; ppm2[37] = 1703; ppm2[38] = 1648; ppm2[39] = 1596; ppm2[40] = 1546; ppm2[41] = 1499; ppm2[42] = 1454; ppm2[43] = 1410; ppm2[44] = 1369; ppm2[45] = 1329; ppm2[46] = 1291; ppm2[47] = 1254; ppm2[48] = 1220; ppm2[49] = 1186; ppm2[50] = 1154; ppm2[51] = 1123; ppm2[52] = 1093; ppm2[53] = 1065; ppm2[54] = 1037; ppm2[55] = 1011; ppm2[56] = 985; ppm2[57] = 961; ppm2[58] = 937; ppm2[59] = 914; ppm2[60] = 892; ppm2[61] = 871; ppm2[62] = 851; ppm2[63] = 831; ppm2[64] = 812; ppm2[65] = 793; ppm2[66] = 775; ppm2[67] = 758; ppm2[68] = 741; ppm2[69] = 725; ppm2[70] = 710; ppm2[71] = 694; ppm2[72] = 680; ppm2[73] = 667; ppm2[74] = 652; ppm2[75] = 638; ppm2[76] = 625; ppm2[77] = 613; ppm2[78] = 601; ppm2[79] = 589; ppm2[80] = 577; ppm2[81] = 566; ppm2[82] = 555; ppm2[83] = 545; ppm2[84] = 534; ppm2[85] = 524; ppm2[86] = 515; ppm2[87] = 505; ppm2[88] = 496; ppm2[89] = 487; ppm2[90] = 478; ppm2[91] = 470; ppm2[92] = 461; ppm2[93] = 453; ppm2[94] = 446; ppm2[95] = 438; ppm2[96] = 430; ppm2[97] = 423; ppm2[98] = 416; ppm2[99] = 409; ppm2[100] = 402; ppm2[101] = 396; ppm2[102] = 389; ppm2[103] = 383; ppm2[104] = 377; ppm2[105] = 371; ppm2[106] = 365; ppm2[107] = 359; ppm2[108] = 354; ppm2[109] = 348; ppm2[110] = 343; ppm2[111] = 338; ppm2[112] = 333; ppm2[113] = 328; ppm2[114] = 323; ppm2[115] = 318; ppm2[116] = 313; ppm2[117] = 309; ppm2[118] = 304; ppm2[119] = 300; ppm2[120] = 296; ppm2[121] = 292; ppm2[122] = 287; ppm2[123] = 283; ppm2[124] = 279; ppm2[125] = 276; ppm2[126] = 272; ppm2[127] = 268; ppm2[128] = 265; ppm2[129] = 261; ppm2[130] = 257; ppm2[131] = 254; ppm2[132] = 251; ppm2[133] = 247; ppm2[134] = 244; ppm2[135] = 241; ppm2[136] = 238; ppm2[137] = 235; ppm2[138] = 232; ppm2[139] = 229; ppm2[140] = 226; ppm2[141] = 223; ppm2[142] = 220; ppm2[143] = 218; ppm2[144] = 215; ppm2[145] = 212; ppm2[146] = 210; ppm2[147] = 207; ppm2[148] = 205; ppm2[149] = 202; ppm2[150] = 200; int ppm5[151]; ppm5[0] = 9867; ppm5[1] = 9291; ppm5[2] = 8760; ppm5[3] = 8271; ppm5[4] = 7819; ppm5[5] = 7400; ppm5[6] = 7012; ppm5[7] = 6652; ppm5[8] = 6317; ppm5[9] = 6005; ppm5[10] = 5714; ppm5[11] = 5443; ppm5[12] = 5189; ppm5[13] = 4951; ppm5[14] = 4728; ppm5[15] = 4518; ppm5[16] = 4322; ppm5[17] = 4137; ppm5[18] = 3963; ppm5[19] = 3799; ppm5[20] = 3644; ppm5[21] = 3498; ppm5[22] = 3360; ppm5[23] = 3229; ppm5[24] = 3106; ppm5[25] = 2988; ppm5[26] = 2772; ppm5[27] = 2672; ppm5[28] = 2577; ppm5[29] = 2486; ppm5[30] = 2400; ppm5[31] = 2318; ppm5[32] = 2240; ppm5[33] = 2165; ppm5[34] = 2094; ppm5[35] = 2026; ppm5[36] = 1961; ppm5[37] = 1899; ppm5[38] = 1839; ppm5[39] = 1783; ppm5[40] = 1728; ppm5[41] = 1676; ppm5[42] = 1626; ppm5[43] = 1578; ppm5[44] = 1532; ppm5[45] = 1488; ppm5[46] = 1446; ppm5[47] = 1405; ppm5[48] = 1366; ppm5[49] = 1328; ppm5[50] = 1292; ppm5[51] = 1257; ppm5[52] = 1223; ppm5[53] = 1191; ppm5[54] = 1160; ppm5[55] = 1130; ppm5[56] = 1101; ppm5[57] = 1073; ppm5[58] = 1046; ppm5[59] = 1020; ppm5[60] = 995; ppm5[61] = 971; ppm5[62] = 947; ppm5[63] = 924; ppm5[64] = 903; ppm5[65] = 881; ppm5[66] = 861; ppm5[67] = 841; ppm5[68] = 822; ppm5[69] = 803; ppm5[70] = 785; ppm5[71] = 768; ppm5[72] = 751; ppm5[73] = 734; ppm5[74] = 718; ppm5[75] = 703; ppm5[76] = 688; ppm5[77] = 673; ppm5[78] = 659; ppm5[79] = 645; ppm5[80] = 632; ppm5[81] = 619; ppm5[82] = 606; ppm5[83] = 594; ppm5[84] = 582; ppm5[85] = 571; ppm5[86] = 559; ppm5[87] = 549; ppm5[88] = 538; ppm5[89] = 528; ppm5[90] = 517; ppm5[91] = 508; ppm5[92] = 498; ppm5[93] = 489; ppm5[94] = 480; ppm5[95] = 471; ppm5[96] = 462; ppm5[97] = 454; ppm5[98] = 446; ppm5[99] = 438; ppm5[100] = 430; ppm5[101] = 422; ppm5[102] = 415; ppm5[103] = 408; ppm5[104] = 401; ppm5[105] = 394; ppm5[106] = 387; ppm5[107] = 380; ppm5[108] = 374; ppm5[109] = 368; ppm5[110] = 362; ppm5[111] = 356; ppm5[112] = 350; ppm5[113] = 344; ppm5[114] = 339; ppm5[115] = 333; ppm5[116] = 328; ppm5[117] = 323; ppm5[118] = 317; ppm5[119] = 312; ppm5[120] = 308; ppm5[121] = 303; ppm5[122] = 298; ppm5[123] = 294; ppm5[124] = 289; ppm5[125] = 285; ppm5[126] = 280; ppm5[127] = 276; ppm5[128] = 272; ppm5[129] = 268; ppm5[130] = 264; ppm5[131] = 260; ppm5[132] = 256; ppm5[133] = 253; ppm5[134] = 249; ppm5[135] = 246; ppm5[136] = 242; ppm5[137] = 239; ppm5[138] = 235; ppm5[139] = 232; ppm5[140] = 229; ppm5[141] = 226; ppm5[142] = 222; ppm5[143] = 219; ppm5[144] = 216; ppm5[145] = 214; ppm5[146] = 211; ppm5[147] = 208; ppm5[148] = 205; ppm5[149] = 202; ppm5[150] = 200; int ppm7[151]; ppm7[0] = 4112; ppm7[1] = 3495; ppm7[2] = 3017; ppm7[3] = 2638; ppm7[4] = 2332; ppm7[5] = 2080; ppm7[6] = 1870; ppm7[7] = 1692; ppm7[8] = 1541; ppm7[9] = 1411; ppm7[10] = 1298; ppm7[11] = 1199; ppm7[12] = 1112; ppm7[13] = 1035; ppm7[14] = 967; ppm7[15] = 905; ppm7[16] = 850; ppm7[17] = 800; ppm7[18] = 755; ppm7[19] = 714; ppm7[20] = 676; ppm7[21] = 641; ppm7[22] = 610; ppm7[23] = 581; ppm7[24] = 554; ppm7[25] = 529; ppm7[26] = 506; ppm7[27] = 484; ppm7[28] = 464; ppm7[29] = 445; ppm7[30] = 428; ppm7[31] = 412; ppm7[32] = 396; ppm7[33] = 382; ppm7[34] = 368; ppm7[35] = 355; ppm7[36] = 343; ppm7[37] = 332; ppm7[38] = 321; ppm7[39] = 311; ppm7[40] = 301; ppm7[41] = 292; ppm7[42] = 283; ppm7[43] = 275; ppm7[44] = 267; ppm7[45] = 259; ppm7[46] = 252; ppm7[47] = 245; ppm7[48] = 238; ppm7[49] = 232; ppm7[50] = 226; ppm7[51] = 220; ppm7[52] = 215; ppm7[53] = 209; ppm7[54] = 204; ppm7[55] = 199; ppm7[56] = 195; ppm7[57] = 190; ppm7[58] = 186; ppm7[59] = 181; ppm7[60] = 177; ppm7[61] = 174; ppm7[62] = 170; ppm7[63] = 166; ppm7[64] = 163; ppm7[65] = 159; ppm7[66] = 156; ppm7[67] = 153; ppm7[68] = 150; ppm7[69] = 147; ppm7[70] = 144; ppm7[71] = 141; ppm7[72] = 139; ppm7[73] = 136; ppm7[74] = 133; ppm7[75] = 131; ppm7[76] = 129; ppm7[77] = 126; ppm7[78] = 124; ppm7[79] = 122; ppm7[80] = 120; ppm7[81] = 118; ppm7[82] = 116; ppm7[83] = 114; ppm7[84] = 112; ppm7[85] = 110; ppm7[86] = 108; ppm7[87] = 107; ppm7[88] = 105; ppm7[89] = 103; ppm7[90] = 102; ppm7[91] = 100; ppm7[92] = 99; ppm7[93] = 97; ppm7[94] = 96; ppm7[95] = 94; ppm7[96] = 93; ppm7[97] = 91; ppm7[98] = 90; ppm7[99] = 89; ppm7[100] = 88; ppm7[101] = 86; ppm7[102] = 85; ppm7[103] = 84; ppm7[104] = 83; ppm7[105] = 82; ppm7[106] = 81; ppm7[107] = 80; ppm7[108] = 79; ppm7[109] = 78; ppm7[110] = 77; ppm7[111] = 76; ppm7[112] = 75; ppm7[113] = 74; ppm7[114] = 73; ppm7[115] = 72; ppm7[116] = 71; ppm7[117] = 70; ppm7[118] = 69; ppm7[119] = 68; ppm7[120] = 68; ppm7[121] = 67; ppm7[122] = 66; ppm7[123] = 65; ppm7[124] = 64; ppm7[125] = 64; ppm7[126] = 63; ppm7[127] = 62; ppm7[128] = 62; ppm7[129] = 61; ppm7[130] = 60; ppm7[131] = 60; ppm7[132] = 59; ppm7[133] = 58; ppm7[134] = 58; ppm7[135] = 57; ppm7[136] = 56; ppm7[137] = 56; ppm7[138] = 55; ppm7[139] = 55; ppm7[140] = 54; ppm7[141] = 54; ppm7[142] = 53; ppm7[143] = 52; ppm7[144] = 52; ppm7[145] = 51; ppm7[146] = 51; ppm7[147] = 50; ppm7[148] = 50; ppm7[149] = 49; ppm7[150] = 49; int ppm136[161]; ppm136[0] = 199; ppm136[1] = 194; ppm136[2] = 188; ppm136[3] = 183; ppm136[4] = 178; ppm136[5] = 173; ppm136[6] = 168; ppm136[7] = 163; ppm136[8] = 159; ppm136[9] = 154; ppm136[10] = 150; ppm136[11] = 146; ppm136[12] = 142; ppm136[13] = 139; ppm136[14] = 135; ppm136[15] = 131; ppm136[16] = 128; ppm136[17] = 125; ppm136[18] = 122; ppm136[19] = 119; ppm136[20] = 116; ppm136[21] = 113; ppm136[22] = 110; ppm136[23] = 107; ppm136[24] = 105; ppm136[25] = 102; ppm136[26] = 100; ppm136[27] = 97; ppm136[28] = 95; ppm136[29] = 93; ppm136[30] = 91; ppm136[31] = 89; ppm136[32] = 86; ppm136[33] = 84; ppm136[34] = 83; ppm136[35] = 81; ppm136[36] = 79; ppm136[37] = 77; ppm136[38] = 75; ppm136[39] = 74; ppm136[40] = 72; ppm136[41] = 71; ppm136[42] = 69; ppm136[43] = 68; ppm136[44] = 66; ppm136[45] = 65; ppm136[46] = 63; ppm136[47] = 62; ppm136[48] = 61; ppm136[49] = 59; ppm136[50] = 58; ppm136[51] = 57; ppm136[52] = 56; ppm136[53] = 55; ppm136[54] = 54; ppm136[55] = 53; ppm136[56] = 52; ppm136[57] = 50; ppm136[58] = 49; ppm136[59] = 49; ppm136[60] = 48; ppm136[61] = 47; ppm136[62] = 46; ppm136[63] = 45; ppm136[64] = 44; ppm136[65] = 43; ppm136[66] = 42; ppm136[67] = 42; ppm136[68] = 41; ppm136[69] = 40; ppm136[70] = 39; ppm136[71] = 39; ppm136[72] = 38; ppm136[73] = 37; ppm136[74] = 37; ppm136[75] = 36; ppm136[76] = 35; ppm136[77] = 35; ppm136[78] = 34; ppm136[79] = 33; ppm136[80] = 33; ppm136[81] = 32; ppm136[82] = 32; ppm136[83] = 31; ppm136[84] = 31; ppm136[85] = 30; ppm136[86] = 30; ppm136[87] = 29; ppm136[88] = 29; ppm136[89] = 28; ppm136[90] = 28; ppm136[91] = 27; ppm136[92] = 27; ppm136[93] = 26; ppm136[94] = 26; ppm136[95] = 25; ppm136[96] = 25; ppm136[97] = 25; ppm136[98] = 24; ppm136[99] = 24; ppm136[100] = 23; ppm136[101] = 23; ppm136[102] = 23; ppm136[103] = 22; ppm136[104] = 22; ppm136[105] = 22; ppm136[106] = 21; ppm136[107] = 21; ppm136[108] = 21; ppm136[109] = 20; ppm136[110] = 20; ppm136[111] = 20; ppm136[112] = 19; ppm136[113] = 19; ppm136[114] = 19; ppm136[115] = 19; ppm136[116] = 18; ppm136[117] = 18; ppm136[118] = 18; ppm136[119] = 17; ppm136[120] = 17; ppm136[121] = 17; ppm136[122] = 17; ppm136[123] = 16; ppm136[124] = 16; ppm136[125] = 16; ppm136[126] = 16; ppm136[127] = 16; ppm136[128] = 15; ppm136[129] = 15; ppm136[130] = 15; ppm136[131] = 15; ppm136[132] = 14; ppm136[133] = 14; ppm136[134] = 14; ppm136[135] = 14; ppm136[136] = 14; ppm136[137] = 14; ppm136[138] = 13; ppm136[139] = 13; ppm136[140] = 13; ppm136[141] = 13; ppm136[142] = 13; ppm136[143] = 12; ppm136[144] = 12; ppm136[145] = 12; ppm136[146] = 12; ppm136[147] = 12; ppm136[148] = 12; ppm136[149] = 12; ppm136[150] = 11; ppm136[151] = 11; ppm136[152] = 11; ppm136[153] = 11; ppm136[154] = 11; ppm136[155] = 11; ppm136[156] = 11; ppm136[157] = 10; ppm136[158] = 10; ppm136[159] = 10; ppm136[160] = 10; TCNT1 = 57723; TCCR1B = (1<<CS12) | (1<<CS10); TIMSK1 = (1<<TOIE1); usart_init(0); usart_init(1); usart_init(2); usart_init(3); init_GPS(); F = 0; int f_num = 0; char tick = 10; char sd_valid = 0; f_mount(&FatFs, "", 0); /* Give a work area to the default drive */ sei(); while (1) { if(sd_valid == 0) { sprintf(fil_nm, "data%d.txt",f_num); if((fr = f_open(&Fil, fil_nm, FA_WRITE | FA_CREATE_NEW)) && f_num < 9999) f_num++; else sd_valid = 1; } if(rec_dylos_flag == 1) { rec_dylos_flag = 0; new_dylos_data = 1; tick = 0; if(rec_dylos[strlen(rec_dylos) - 1] == '\n') { dylos_line = 1; strncpy(dylos, rec_dylos, strlen(rec_dylos)); strclr(rec_dylos); } } if(rec_GPS_flag == 1) { rec_GPS_flag = 0; new_GPS_data = 1; if(rec_GPS[strlen(rec_GPS) - 1] == '\n') { GPS_line = 1; strncpy(GPS, rec_GPS, strlen(rec_GPS)); strclr(rec_GPS); } } if(dylos_line == 1) { parse_dylos(dylos, dylos_data); dylos_line = 0; } if(GPS_line == 1) { parse_GPS(GPS, GPS_data); GPS_line = 0; } if(ov_flag == 1) { ov_flag = 0; tick++; if(new_GPS_data == 1) { if(GPS_data[9] == 1) { sprintf(sd_buff, "Date: %.2d/%.2d/%.2d\nTime: %.2d:%.2d:%.2d\nLatitude: %d %d.%d\nLongitude: %d %d.%d\nAltitude %d.%d\n", GPS_data[12], GPS_data[13], GPS_data[14], GPS_data[0], GPS_data[1], GPS_data[2], GPS_data[3], GPS_data[4], GPS_data[5], GPS_data[6], GPS_data[7], GPS_data[8], GPS_data[10], GPS_data[11]); sprintf(buffer,"%.2d:%.2d:%.2d,%d,%d.%d,%d,%d.%d,%d.%d,",GPS_data[0], GPS_data[1], GPS_data[2], GPS_data[3], GPS_data[4], GPS_data[5], GPS_data[6], GPS_data[7], GPS_data[8], GPS_data[10], GPS_data[11]); } else { sprintf(sd_buff, "Time: %.2d:%.2d:%.2d\nNO GPS DATA AVAILABLE\n", GPS_data[0], GPS_data[1], GPS_data[2]); sprintf(buffer,"%.2d:%.2d:%.2d,0,0.0,0,0.0,0.0,", GPS_data[0], GPS_data[1], GPS_data[2]); } sd_write(sd_buff, &Fil, fil_nm, sd_valid); usart_send(3, buffer); new_GPS_data = 0; } else usart_send(3,"00:00:00,0,0.0,0,0.0,0.0,"); if(new_dylos_data == 1 || tick < 8) { sprintf(sd_buff, "Small: %d\nLarge: %d\n", dylos_data[0], dylos_data[1]); sprintf(buffer, "%d,%d,", dylos_data[0], dylos_data[1]); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); new_dylos_data = 0; } else usart_send(3,"0,0,"); F = read_temp(); sprintf(sd_buff, "Temperature %dF\n", F); sprintf(buffer, "%d,", F); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); C3H8 = read_MQ2(); if(C3H8 < -1) { usart_send(3, "-1,"); sd_write("C3H8: ERROR - MQ2 reading out of range\n", &Fil, fil_nm, sd_valid); } else if(C3H8 == -1) { sprintf(sd_buff, "C3H8: %d ppm \n",0); usart_send(3, "0,"); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } else { sprintf(sd_buff, "C3H8: %d ppm \n",ppm2[C3H8]); sprintf(buffer, "%d,", ppm2[C3H8]); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } CH4 = read_MQ5(); if(CH4 < -1) { usart_send(3, "-1,"); sd_write("CH4 : ERROR - MQ5 reading out of range\n", &Fil, fil_nm, sd_valid); } else if(CH4 == -1) { sprintf(sd_buff, "CH4 : %d ppm \n",0); usart_send(3, "0,"); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } else { sprintf(sd_buff, "CH4 : %d ppm \n",ppm5[CH4]); sprintf(buffer, "%d,", ppm5[CH4]); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } CO = read_MQ7(); if(CO < -1) { usart_send(3, "-1,"); sd_write("CO : ERROR - MQ7 reading out of range\n", &Fil, fil_nm, sd_valid); } else if(CO == -1) { sprintf(sd_buff, "CO : %d ppm \n",0); usart_send(3, "0,"); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } else { sprintf(sd_buff, "CO : %d ppm \n",ppm7[CO]); sprintf(buffer, "%d,", ppm7[CO]); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } H2S = read_MQ136(); if(H2S < -1) { usart_send(3, "-1\n"); sd_write("H2S : ERROR - MQ136 reading out of range\n\n", &Fil, fil_nm, sd_valid); } else if(H2S == -1) { sprintf(sd_buff, "H2S : %d ppm \n\n",0); usart_send(3, "0\n"); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } else { sprintf(sd_buff, "H2S : %d ppm \n\n",ppm136[H2S]); sprintf(buffer, "%d\n", ppm136[H2S]); usart_send(3, buffer); sd_write(sd_buff, &Fil, fil_nm, sd_valid); } } } return 0; }