wind logger

Dependencies:   SDFileSystem TextLCD mbed

Fork of windmeter4receive by Jumpei Oguro

Committer:
data37
Date:
Fri Aug 08 10:25:27 2014 +0000
Revision:
1:4810436d9e48
Parent:
0:36c080f46ab1
wind logger

Who changed what in which revision?

UserRevisionLine numberNew contents of line
data37 0:36c080f46ab1 1 #include "mbed.h"
data37 0:36c080f46ab1 2 #include "TextLCD.h"
data37 0:36c080f46ab1 3 #include "PowerControl/PowerControl.h"
data37 0:36c080f46ab1 4 #include "PowerControl/EthernetPowerControl.h"
data37 0:36c080f46ab1 5 #include "SDFileSystem.h"
data37 0:36c080f46ab1 6 // wind data receiver (not SDcard logger)
data37 0:36c080f46ab1 7 DigitalOut myled1(LED1);
data37 0:36c080f46ab1 8 DigitalOut myled2(LED2);
data37 0:36c080f46ab1 9 DigitalOut myled3(LED3);
data37 0:36c080f46ab1 10 DigitalOut myled4(LED4);
data37 0:36c080f46ab1 11 SDFileSystem sd(p5, p6, p7, p8, "sd");
data37 0:36c080f46ab1 12 TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7
data37 0:36c080f46ab1 13
data37 0:36c080f46ab1 14 Serial pc(USBTX, USBRX);
data37 0:36c080f46ab1 15 Serial xbee(p13,p14);
data37 0:36c080f46ab1 16
data37 0:36c080f46ab1 17 #define PI 3.1415926535
data37 0:36c080f46ab1 18
data37 0:36c080f46ab1 19 int main() {
data37 0:36c080f46ab1 20 PHY_PowerDown();
data37 0:36c080f46ab1 21 myled1=1;
data37 0:36c080f46ab1 22 myled2=0;
data37 0:36c080f46ab1 23 myled3=0;
data37 0:36c080f46ab1 24 myled4=0;
data37 0:36c080f46ab1 25
data37 0:36c080f46ab1 26 pc.baud(9600);
data37 0:36c080f46ab1 27 xbee.baud(9600);
data37 0:36c080f46ab1 28
data37 0:36c080f46ab1 29
data37 0:36c080f46ab1 30 //wind data value
data37 0:36c080f46ab1 31 int i=0;
data37 0:36c080f46ab1 32 int j=0;
data37 0:36c080f46ab1 33 int h=0;
data37 1:4810436d9e48 34 int k=0;
data37 0:36c080f46ab1 35
data37 1:4810436d9e48 36 char wind_data[256];
data37 1:4810436d9e48 37 float windvel_5min_ave=0.0,windvel_5sec_ave=0.0;
data37 1:4810436d9e48 38 float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0;
data37 1:4810436d9e48 39 char winddeg_5min_ave_c[4],winddeg_5sec_ave_c[4];
data37 1:4810436d9e48 40 float winddeg,windvel;
data37 1:4810436d9e48 41 float windvel_5sec[6],windvel_5min[301];
data37 1:4810436d9e48 42 float winddeg_5sec[6],winddeg_5min[301];
data37 1:4810436d9e48 43 for(i=0; i<=5; i++){windvel_5sec[i]=0.0; winddeg_5sec[i]=0.0;}
data37 1:4810436d9e48 44 for(i=0; i<=300; i++){windvel_5min[i]=0.0; winddeg_5min[i]=0.0;}
data37 1:4810436d9e48 45 char ms,check;
data37 1:4810436d9e48 46
data37 0:36c080f46ab1 47 //LCD startup
data37 0:36c080f46ab1 48 lcd.cls();
data37 0:36c080f46ab1 49
data37 0:36c080f46ab1 50 lcd.locate(0,0);
data37 0:36c080f46ab1 51 lcd.printf("-Windmeter LCD!-");
data37 0:36c080f46ab1 52
data37 0:36c080f46ab1 53 lcd.locate(0,1);
data37 0:36c080f46ab1 54 lcd.printf("-----Ready!-----");
data37 0:36c080f46ab1 55 wait(2);
data37 1:4810436d9e48 56
data37 0:36c080f46ab1 57 lcd.cls();
data37 0:36c080f46ab1 58 lcd.locate(0,0);
data37 0:36c080f46ab1 59 lcd.printf("------Wait------");
data37 0:36c080f46ab1 60 lcd.locate(0,1);
data37 0:36c080f46ab1 61 lcd.printf("----no data!----");
data37 0:36c080f46ab1 62
data37 0:36c080f46ab1 63 char idir[14] = "/sd/";
data37 0:36c080f46ab1 64 char time_c[7],date_c[9];
data37 0:36c080f46ab1 65
data37 1:4810436d9e48 66 //sprintf(date_c,"%4d%2d%2d",y_date,m_date,d_date);
data37 1:4810436d9e48 67 //sprintf(time_c,"%2d%2d%2d",h_time,m_time,s_time);
data37 0:36c080f46ab1 68
data37 0:36c080f46ab1 69 char filename[15] = "";
data37 0:36c080f46ab1 70 strcat(filename,date_c);
data37 0:36c080f46ab1 71 strcat(filename,time_c);
data37 0:36c080f46ab1 72
data37 0:36c080f46ab1 73 char dir[100] = "";
data37 0:36c080f46ab1 74 strcat(idir,date_c);
data37 0:36c080f46ab1 75 mkdir(idir, 0777);
data37 0:36c080f46ab1 76
data37 0:36c080f46ab1 77 strcat(dir,idir);
data37 0:36c080f46ab1 78 strcat(dir,"/");
data37 0:36c080f46ab1 79 strcat(dir,filename);
data37 0:36c080f46ab1 80 strcat(dir,".csv");
data37 0:36c080f46ab1 81
data37 0:36c080f46ab1 82 FILE *fp = fopen(dir, "w");
data37 0:36c080f46ab1 83 if(fp == NULL) {
data37 0:36c080f46ab1 84 error("Could not open file for write\r\n");
data37 0:36c080f46ab1 85 myled3 = 1;
data37 0:36c080f46ab1 86 }
data37 0:36c080f46ab1 87 //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");
data37 0:36c080f46ab1 88 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");
data37 0:36c080f46ab1 89
data37 0:36c080f46ab1 90 fclose(fp);
data37 1:4810436d9e48 91 //------------------------------------------- main while loop
data37 0:36c080f46ab1 92 while(1){
data37 1:4810436d9e48 93 //先頭の文字判定
data37 0:36c080f46ab1 94 myled1=0;
data37 1:4810436d9e48 95 while(xbee.getc()!='Q'){}
data37 1:4810436d9e48 96 myled1=1;
data37 1:4810436d9e48 97
data37 1:4810436d9e48 98 //文字列終わり(改行)まで文字列格納
data37 0:36c080f46ab1 99 i=0;
data37 0:36c080f46ab1 100 while( (wind_data[i]=xbee.getc()) != '\r'){
data37 0:36c080f46ab1 101 i++;
data37 0:36c080f46ab1 102 if(i==256){
data37 0:36c080f46ab1 103 //lcd.locate(0,1);
data37 0:36c080f46ab1 104 //lcd.printf("Data read Error");
data37 0:36c080f46ab1 105 i=255;
data37 0:36c080f46ab1 106 break;
data37 0:36c080f46ab1 107 }
data37 0:36c080f46ab1 108 }
data37 1:4810436d9e48 109
data37 0:36c080f46ab1 110 myled1 = 0;
data37 0:36c080f46ab1 111 wind_data[i]='\0';
data37 0:36c080f46ab1 112 if(i<=256){
data37 1:4810436d9e48 113 if( sscanf(wind_data, ",%f,%f,%c,%f",&winddeg,&windvel,&ms,&check) >= 1){
data37 1:4810436d9e48 114 if( check == 0 ){
data37 0:36c080f46ab1 115 windvel_5sec[j] = windvel;
data37 0:36c080f46ab1 116 winddeg_5sec[j] = winddeg;
data37 0:36c080f46ab1 117 windvel_5min[k] = windvel;
data37 0:36c080f46ab1 118 winddeg_5min[k] = winddeg;
data37 0:36c080f46ab1 119
data37 1:4810436d9e48 120 j++;
data37 1:4810436d9e48 121 k++;
data37 1:4810436d9e48 122 if(j==5){j=1;}
data37 1:4810436d9e48 123 if(k==300){k=1;}
data37 0:36c080f46ab1 124
data37 0:36c080f46ab1 125 for(i=1; i<=5; i++){windvel_5sec_ave +=windvel_5sec[i];}
data37 1:4810436d9e48 126 for(i=1; i<=5; i++){winddeg_5sec_ave +=winddeg_5sec[i];}
data37 1:4810436d9e48 127 windvel_5sec_ave /= 5.0;
data37 1:4810436d9e48 128 winddeg_5sec_ave /= 5.0;
data37 1:4810436d9e48 129 for(i=1; i<=300; i++){windvel_5min_ave +=windvel_5min[i];}
data37 1:4810436d9e48 130 for(i=1; i<=300; i++){winddeg_5min_ave +=winddeg_5min[i];}
data37 1:4810436d9e48 131 windvel_5min_ave /= 300.0;
data37 1:4810436d9e48 132 winddeg_5min_ave /= 300.0;
data37 1:4810436d9e48 133 if(winddeg_5sec_ave>348.75 || winddeg_5sec_ave<=11.25){strcpy(winddeg_5sec_ave_c,"N ");}
data37 1:4810436d9e48 134 if(winddeg_5sec_ave>11.25 && winddeg_5sec_ave<=33.75){strcpy(winddeg_5sec_ave_c,"NNE");}
data37 1:4810436d9e48 135 if(winddeg_5sec_ave>33.75 && winddeg_5sec_ave<=56.25){strcpy(winddeg_5sec_ave_c,"NE ");}
data37 1:4810436d9e48 136 if(winddeg_5sec_ave>56.25 && winddeg_5sec_ave<=78.75){strcpy(winddeg_5sec_ave_c,"ENE");}
data37 1:4810436d9e48 137 if(winddeg_5sec_ave>78.75 && winddeg_5sec_ave<=101.25){strcpy(winddeg_5sec_ave_c,"E ");}
data37 1:4810436d9e48 138 if(winddeg_5sec_ave>101.25 && winddeg_5sec_ave<=123.75){strcpy(winddeg_5sec_ave_c,"ESE");}
data37 1:4810436d9e48 139 if(winddeg_5sec_ave>123.75 && winddeg_5sec_ave<=146.25){strcpy(winddeg_5sec_ave_c,"SE ");}
data37 1:4810436d9e48 140 if(winddeg_5sec_ave>146.25 && winddeg_5sec_ave<=168.75){strcpy(winddeg_5sec_ave_c,"SSE");}
data37 1:4810436d9e48 141 if(winddeg_5sec_ave>168.75 && winddeg_5sec_ave<=191.25){strcpy(winddeg_5sec_ave_c,"S ");}
data37 1:4810436d9e48 142 if(winddeg_5sec_ave>191.25 && winddeg_5sec_ave<=213.75){strcpy(winddeg_5sec_ave_c,"SSW");}
data37 1:4810436d9e48 143 if(winddeg_5sec_ave>213.75 && winddeg_5sec_ave<=236.25){strcpy(winddeg_5sec_ave_c,"SW ");}
data37 1:4810436d9e48 144 if(winddeg_5sec_ave>236.25 && winddeg_5sec_ave<=258.75){strcpy(winddeg_5sec_ave_c,"WSW");}
data37 1:4810436d9e48 145 if(winddeg_5sec_ave>258.75 && winddeg_5sec_ave<=281.25){strcpy(winddeg_5sec_ave_c,"W ");}
data37 1:4810436d9e48 146 if(winddeg_5sec_ave>281.25 && winddeg_5sec_ave<=303.75){strcpy(winddeg_5sec_ave_c,"WNW");}
data37 1:4810436d9e48 147 if(winddeg_5sec_ave>303.75 && winddeg_5sec_ave<=326.25){strcpy(winddeg_5sec_ave_c,"NW ");}
data37 1:4810436d9e48 148 if(winddeg_5sec_ave>326.25 && winddeg_5sec_ave<=348.75){strcpy(winddeg_5sec_ave_c,"NNW");}
data37 1:4810436d9e48 149
data37 1:4810436d9e48 150 if(winddeg_5min_ave>348.75 || winddeg_5min_ave<=11.25){strcpy(winddeg_5min_ave_c,"N ");}
data37 1:4810436d9e48 151 if(winddeg_5min_ave>11.25 && winddeg_5min_ave<=33.75){strcpy(winddeg_5min_ave_c,"NNE");}
data37 1:4810436d9e48 152 if(winddeg_5min_ave>33.75 && winddeg_5min_ave<=56.25){strcpy(winddeg_5min_ave_c,"NE ");}
data37 1:4810436d9e48 153 if(winddeg_5min_ave>56.25 && winddeg_5min_ave<=78.75){strcpy(winddeg_5min_ave_c,"ENE");}
data37 1:4810436d9e48 154 if(winddeg_5min_ave>78.75 && winddeg_5min_ave<=101.25){strcpy(winddeg_5min_ave_c,"E ");}
data37 1:4810436d9e48 155 if(winddeg_5min_ave>101.25 && winddeg_5min_ave<=123.75){strcpy(winddeg_5min_ave_c,"ESE");}
data37 1:4810436d9e48 156 if(winddeg_5min_ave>123.75 && winddeg_5min_ave<=146.25){strcpy(winddeg_5min_ave_c,"SE ");}
data37 1:4810436d9e48 157 if(winddeg_5min_ave>146.25 && winddeg_5min_ave<=168.75){strcpy(winddeg_5min_ave_c,"SSE");}
data37 1:4810436d9e48 158 if(winddeg_5min_ave>168.75 && winddeg_5min_ave<=191.25){strcpy(winddeg_5min_ave_c,"S ");}
data37 1:4810436d9e48 159 if(winddeg_5min_ave>191.25 && winddeg_5min_ave<=213.75){strcpy(winddeg_5min_ave_c,"SSW");}
data37 1:4810436d9e48 160 if(winddeg_5min_ave>213.75 && winddeg_5min_ave<=236.25){strcpy(winddeg_5min_ave_c,"SW ");}
data37 1:4810436d9e48 161 if(winddeg_5min_ave>236.25 && winddeg_5min_ave<=258.75){strcpy(winddeg_5min_ave_c,"WSW");}
data37 1:4810436d9e48 162 if(winddeg_5min_ave>258.75 && winddeg_5min_ave<=281.25){strcpy(winddeg_5min_ave_c,"W ");}
data37 1:4810436d9e48 163 if(winddeg_5min_ave>281.25 && winddeg_5min_ave<=303.75){strcpy(winddeg_5min_ave_c,"WNW");}
data37 1:4810436d9e48 164 if(winddeg_5min_ave>303.75 && winddeg_5min_ave<=326.25){strcpy(winddeg_5min_ave_c,"NW ");}
data37 1:4810436d9e48 165 if(winddeg_5min_ave>326.25 && winddeg_5min_ave<=348.75){strcpy(winddeg_5min_ave_c,"NNW");}
data37 0:36c080f46ab1 166
data37 1:4810436d9e48 167 if(h>=9) {h=0;}
data37 1:4810436d9e48 168 else {h++;}
data37 1:4810436d9e48 169
data37 1:4810436d9e48 170 lcd.cls();
data37 1:4810436d9e48 171 lcd.locate(0,0);
data37 1:4810436d9e48 172 lcd.printf("5s:%5.2fm/s %s",windvel_5sec_ave,winddeg_5sec_ave_c);
data37 1:4810436d9e48 173 lcd.locate(0,1);
data37 1:4810436d9e48 174 lcd.printf("5m:%5.2fm/s %s%d",windvel_5min_ave,winddeg_5min_ave_c,h);
data37 1:4810436d9e48 175 }//end if check
data37 0:36c080f46ab1 176 else
data37 0:36c080f46ab1 177 {
data37 0:36c080f46ab1 178 lcd.cls();
data37 0:36c080f46ab1 179 lcd.locate(0,0);
data37 0:36c080f46ab1 180 lcd.printf("-Windmeter LCD!-");
data37 0:36c080f46ab1 181 lcd.locate(0,1);
data37 0:36c080f46ab1 182 lcd.printf("Data read Error");
data37 0:36c080f46ab1 183 }
data37 1:4810436d9e48 184 } //end if sscanf
data37 1:4810436d9e48 185 } //end if i<=256
data37 0:36c080f46ab1 186 strcpy(winddeg_5sec_ave_c," ");
data37 0:36c080f46ab1 187 strcpy(winddeg_5min_ave_c," ");
data37 0:36c080f46ab1 188 for(i=0; i<=256; i++) wind_data[i] = 0;
data37 1:4810436d9e48 189 }//end while(1)
data37 1:4810436d9e48 190 //---------------------------------------main while loop end
data37 1:4810436d9e48 191 /*
data37 0:36c080f46ab1 192 while(1) {
data37 0:36c080f46ab1 193 myled1 = 1;
data37 0:36c080f46ab1 194 wait(0.2);
data37 0:36c080f46ab1 195 myled1 = 0;
data37 0:36c080f46ab1 196 wait(0.2);
data37 0:36c080f46ab1 197 }
data37 1:4810436d9e48 198 */
data37 0:36c080f46ab1 199 }