wind logger
Dependencies: SDFileSystem TextLCD mbed
Fork of windmeter4receive by
main.cpp
- Committer:
- data37
- Date:
- 2014-08-08
- Revision:
- 1:4810436d9e48
- Parent:
- 0:36c080f46ab1
File content as of revision 1:4810436d9e48:
#include "mbed.h" #include "TextLCD.h" #include "PowerControl/PowerControl.h" #include "PowerControl/EthernetPowerControl.h" #include "SDFileSystem.h" // wind data receiver (not SDcard logger) DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); SDFileSystem sd(p5, p6, p7, p8, "sd"); TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7 Serial pc(USBTX, USBRX); Serial xbee(p13,p14); #define PI 3.1415926535 int main() { PHY_PowerDown(); myled1=1; myled2=0; myled3=0; myled4=0; pc.baud(9600); xbee.baud(9600); //wind data value int i=0; int j=0; int h=0; int k=0; char wind_data[256]; float windvel_5min_ave=0.0,windvel_5sec_ave=0.0; float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0; char winddeg_5min_ave_c[4],winddeg_5sec_ave_c[4]; float winddeg,windvel; float windvel_5sec[6],windvel_5min[301]; float winddeg_5sec[6],winddeg_5min[301]; for(i=0; i<=5; i++){windvel_5sec[i]=0.0; winddeg_5sec[i]=0.0;} for(i=0; i<=300; i++){windvel_5min[i]=0.0; winddeg_5min[i]=0.0;} char ms,check; //LCD startup lcd.cls(); lcd.locate(0,0); lcd.printf("-Windmeter LCD!-"); lcd.locate(0,1); lcd.printf("-----Ready!-----"); wait(2); lcd.cls(); lcd.locate(0,0); lcd.printf("------Wait------"); lcd.locate(0,1); lcd.printf("----no data!----"); char idir[14] = "/sd/"; char time_c[7],date_c[9]; //sprintf(date_c,"%4d%2d%2d",y_date,m_date,d_date); //sprintf(time_c,"%2d%2d%2d",h_time,m_time,s_time); char filename[15] = ""; strcat(filename,date_c); strcat(filename,time_c); char dir[100] = ""; strcat(idir,date_c); mkdir(idir, 0777); strcat(dir,idir); strcat(dir,"/"); strcat(dir,filename); strcat(dir,".csv"); FILE *fp = fopen(dir, "w"); if(fp == NULL) { error("Could not open file for write\r\n"); myled3 = 1; } //fprintf(fp, "Year,Month,Day,hh:mm:ss,wind_velocity[m/s],wind_velocity_5sec[m/s],wind_velocity_5min[m/s],wind_direction[deg],wind_direction_5sec[deg],wind_direction_5min[deg],Atmospheric Pressure[Pa],Temperature[degC]\n"); fprintf(fp, "Year,Month,Day,hh:mm:ss,wind_velocity[m/s],wind_direction[deg],wind_velocity_5sec[m/s],wind_direction_5sec[deg],wind_velocity_5min[m/s],wind_direction_5min[deg]\n"); fclose(fp); //------------------------------------------- main while loop while(1){ //先頭の文字判定 myled1=0; while(xbee.getc()!='Q'){} myled1=1; //文字列終わり(改行)まで文字列格納 i=0; while( (wind_data[i]=xbee.getc()) != '\r'){ i++; if(i==256){ //lcd.locate(0,1); //lcd.printf("Data read Error"); i=255; break; } } myled1 = 0; wind_data[i]='\0'; if(i<=256){ if( sscanf(wind_data, ",%f,%f,%c,%f",&winddeg,&windvel,&ms,&check) >= 1){ if( check == 0 ){ windvel_5sec[j] = windvel; winddeg_5sec[j] = winddeg; windvel_5min[k] = windvel; winddeg_5min[k] = winddeg; j++; k++; if(j==5){j=1;} if(k==300){k=1;} for(i=1; i<=5; i++){windvel_5sec_ave +=windvel_5sec[i];} for(i=1; i<=5; i++){winddeg_5sec_ave +=winddeg_5sec[i];} windvel_5sec_ave /= 5.0; winddeg_5sec_ave /= 5.0; for(i=1; i<=300; i++){windvel_5min_ave +=windvel_5min[i];} for(i=1; i<=300; i++){winddeg_5min_ave +=winddeg_5min[i];} windvel_5min_ave /= 300.0; winddeg_5min_ave /= 300.0; if(winddeg_5sec_ave>348.75 || winddeg_5sec_ave<=11.25){strcpy(winddeg_5sec_ave_c,"N ");} if(winddeg_5sec_ave>11.25 && winddeg_5sec_ave<=33.75){strcpy(winddeg_5sec_ave_c,"NNE");} if(winddeg_5sec_ave>33.75 && winddeg_5sec_ave<=56.25){strcpy(winddeg_5sec_ave_c,"NE ");} if(winddeg_5sec_ave>56.25 && winddeg_5sec_ave<=78.75){strcpy(winddeg_5sec_ave_c,"ENE");} if(winddeg_5sec_ave>78.75 && winddeg_5sec_ave<=101.25){strcpy(winddeg_5sec_ave_c,"E ");} if(winddeg_5sec_ave>101.25 && winddeg_5sec_ave<=123.75){strcpy(winddeg_5sec_ave_c,"ESE");} if(winddeg_5sec_ave>123.75 && winddeg_5sec_ave<=146.25){strcpy(winddeg_5sec_ave_c,"SE ");} if(winddeg_5sec_ave>146.25 && winddeg_5sec_ave<=168.75){strcpy(winddeg_5sec_ave_c,"SSE");} if(winddeg_5sec_ave>168.75 && winddeg_5sec_ave<=191.25){strcpy(winddeg_5sec_ave_c,"S ");} if(winddeg_5sec_ave>191.25 && winddeg_5sec_ave<=213.75){strcpy(winddeg_5sec_ave_c,"SSW");} if(winddeg_5sec_ave>213.75 && winddeg_5sec_ave<=236.25){strcpy(winddeg_5sec_ave_c,"SW ");} if(winddeg_5sec_ave>236.25 && winddeg_5sec_ave<=258.75){strcpy(winddeg_5sec_ave_c,"WSW");} if(winddeg_5sec_ave>258.75 && winddeg_5sec_ave<=281.25){strcpy(winddeg_5sec_ave_c,"W ");} if(winddeg_5sec_ave>281.25 && winddeg_5sec_ave<=303.75){strcpy(winddeg_5sec_ave_c,"WNW");} if(winddeg_5sec_ave>303.75 && winddeg_5sec_ave<=326.25){strcpy(winddeg_5sec_ave_c,"NW ");} if(winddeg_5sec_ave>326.25 && winddeg_5sec_ave<=348.75){strcpy(winddeg_5sec_ave_c,"NNW");} if(winddeg_5min_ave>348.75 || winddeg_5min_ave<=11.25){strcpy(winddeg_5min_ave_c,"N ");} if(winddeg_5min_ave>11.25 && winddeg_5min_ave<=33.75){strcpy(winddeg_5min_ave_c,"NNE");} if(winddeg_5min_ave>33.75 && winddeg_5min_ave<=56.25){strcpy(winddeg_5min_ave_c,"NE ");} if(winddeg_5min_ave>56.25 && winddeg_5min_ave<=78.75){strcpy(winddeg_5min_ave_c,"ENE");} if(winddeg_5min_ave>78.75 && winddeg_5min_ave<=101.25){strcpy(winddeg_5min_ave_c,"E ");} if(winddeg_5min_ave>101.25 && winddeg_5min_ave<=123.75){strcpy(winddeg_5min_ave_c,"ESE");} if(winddeg_5min_ave>123.75 && winddeg_5min_ave<=146.25){strcpy(winddeg_5min_ave_c,"SE ");} if(winddeg_5min_ave>146.25 && winddeg_5min_ave<=168.75){strcpy(winddeg_5min_ave_c,"SSE");} if(winddeg_5min_ave>168.75 && winddeg_5min_ave<=191.25){strcpy(winddeg_5min_ave_c,"S ");} if(winddeg_5min_ave>191.25 && winddeg_5min_ave<=213.75){strcpy(winddeg_5min_ave_c,"SSW");} if(winddeg_5min_ave>213.75 && winddeg_5min_ave<=236.25){strcpy(winddeg_5min_ave_c,"SW ");} if(winddeg_5min_ave>236.25 && winddeg_5min_ave<=258.75){strcpy(winddeg_5min_ave_c,"WSW");} if(winddeg_5min_ave>258.75 && winddeg_5min_ave<=281.25){strcpy(winddeg_5min_ave_c,"W ");} if(winddeg_5min_ave>281.25 && winddeg_5min_ave<=303.75){strcpy(winddeg_5min_ave_c,"WNW");} if(winddeg_5min_ave>303.75 && winddeg_5min_ave<=326.25){strcpy(winddeg_5min_ave_c,"NW ");} if(winddeg_5min_ave>326.25 && winddeg_5min_ave<=348.75){strcpy(winddeg_5min_ave_c,"NNW");} if(h>=9) {h=0;} else {h++;} lcd.cls(); lcd.locate(0,0); lcd.printf("5s:%5.2fm/s %s",windvel_5sec_ave,winddeg_5sec_ave_c); lcd.locate(0,1); lcd.printf("5m:%5.2fm/s %s%d",windvel_5min_ave,winddeg_5min_ave_c,h); }//end if check else { lcd.cls(); lcd.locate(0,0); lcd.printf("-Windmeter LCD!-"); lcd.locate(0,1); lcd.printf("Data read Error"); } } //end if sscanf } //end if i<=256 strcpy(winddeg_5sec_ave_c," "); strcpy(winddeg_5min_ave_c," "); for(i=0; i<=256; i++) wind_data[i] = 0; }//end while(1) //---------------------------------------main while loop end /* while(1) { myled1 = 1; wait(0.2); myled1 = 0; wait(0.2); } */ }