![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
wind logger
Dependencies: SDFileSystem TextLCD mbed
Fork of windmeter4receive by
Diff: main.cpp
- Revision:
- 0:36c080f46ab1
- Child:
- 1:4810436d9e48
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Aug 08 08:41:02 2014 +0000 @@ -0,0 +1,219 @@ +#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 + char wind_data[256]; + float windvel_5min_ave,windvel_5sec_ave; + float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0; + char winddeg_5min_ave_c[4],winddeg_5sec_ave_c[4]; + //strcpy(winddeg_5sec_ave_c," "); + //strcpy(winddeg_5min_ave_c," "); + //float year,month,day; + //char time[8]; + //float pre,temp; + int i=0; + int j=0; + int h=0; + char k[2]; + + //Value + long dt = 1000000; //1 Hz (1000000 us, 1000 ms) + //float time = 0.0; + Timer ti; + long tminus = 0; + + + //LCD startup + lcd.cls(); + + lcd.locate(0,0); + lcd.printf("-Windmeter LCD!-"); + + lcd.locate(0,1); + lcd.printf("-----Ready!-----"); + wait(2); + //uint8_t buf[128]; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("------Wait------"); + lcd.locate(0,1); + lcd.printf("----no data!----"); + ti.reset(); + + //wind parameter set + char wind_data[256]; + //char winddeg_c[4]; + char winddeg_5sec_ave_c[4],winddeg_5min_ave_c[4]; + float winddeg,windvel; + float windvel_5sec[6],windvel_5min[301]; + float winddeg_5sec[6],winddeg_5min[301]; + float windvel_5sec_ave=0.0,windvel_5min_ave=0.0; + float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0; + 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 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); + + while(1){ + ti.start(); + myled1=0; + i=0; + while(xbee.getc()!='Q'){ + lcd.locate(0,16); + lcd.printf("i"); + } + 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, "WAPT,%f,%f,%c,%f",&year,&month,&day,&time,&windvel_5sec_ave,&winddeg_5sec_ave_c,&windvel_5min_ave,&winddeg_5min_ave_c,&pre,&temp) >= 1) + //if( sscanf(wind_data, "WAPT,%f,%f,%f,%f,%s",&windvel_5sec_ave,&winddeg_5sec_ave,&windvel_5min_ave,&winddeg_5min_ave,&k) >= 1) + 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); + //lcd.locate(0,1); + //lcd.printf("%6.2f hPa %4.2f ",Press[0]/100.0,Press[1]); + } + else + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf("-Windmeter LCD!-"); + lcd.locate(0,1); + lcd.printf("Data read Error"); + } + } + strcpy(winddeg_5sec_ave_c," "); + strcpy(winddeg_5min_ave_c," "); + for(i=0; i<=256; i++) wind_data[i] = 0; + } + + while(1) { + myled1 = 1; + wait(0.2); + myled1 = 0; + wait(0.2); + } +} \ No newline at end of file