wind logger

Dependencies:   SDFileSystem TextLCD mbed

Fork of windmeter4receive by Jumpei Oguro

Committer:
data37
Date:
Fri Aug 08 08:41:02 2014 +0000
Revision:
0:36c080f46ab1
Child:
1:4810436d9e48
tsrp 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 char wind_data[256];
data37 0:36c080f46ab1 32 float windvel_5min_ave,windvel_5sec_ave;
data37 0:36c080f46ab1 33 float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0;
data37 0:36c080f46ab1 34 char winddeg_5min_ave_c[4],winddeg_5sec_ave_c[4];
data37 0:36c080f46ab1 35 //strcpy(winddeg_5sec_ave_c," ");
data37 0:36c080f46ab1 36 //strcpy(winddeg_5min_ave_c," ");
data37 0:36c080f46ab1 37 //float year,month,day;
data37 0:36c080f46ab1 38 //char time[8];
data37 0:36c080f46ab1 39 //float pre,temp;
data37 0:36c080f46ab1 40 int i=0;
data37 0:36c080f46ab1 41 int j=0;
data37 0:36c080f46ab1 42 int h=0;
data37 0:36c080f46ab1 43 char k[2];
data37 0:36c080f46ab1 44
data37 0:36c080f46ab1 45 //Value
data37 0:36c080f46ab1 46 long dt = 1000000; //1 Hz (1000000 us, 1000 ms)
data37 0:36c080f46ab1 47 //float time = 0.0;
data37 0:36c080f46ab1 48 Timer ti;
data37 0:36c080f46ab1 49 long tminus = 0;
data37 0:36c080f46ab1 50
data37 0:36c080f46ab1 51
data37 0:36c080f46ab1 52 //LCD startup
data37 0:36c080f46ab1 53 lcd.cls();
data37 0:36c080f46ab1 54
data37 0:36c080f46ab1 55 lcd.locate(0,0);
data37 0:36c080f46ab1 56 lcd.printf("-Windmeter LCD!-");
data37 0:36c080f46ab1 57
data37 0:36c080f46ab1 58 lcd.locate(0,1);
data37 0:36c080f46ab1 59 lcd.printf("-----Ready!-----");
data37 0:36c080f46ab1 60 wait(2);
data37 0:36c080f46ab1 61 //uint8_t buf[128];
data37 0:36c080f46ab1 62 lcd.cls();
data37 0:36c080f46ab1 63 lcd.locate(0,0);
data37 0:36c080f46ab1 64 lcd.printf("------Wait------");
data37 0:36c080f46ab1 65 lcd.locate(0,1);
data37 0:36c080f46ab1 66 lcd.printf("----no data!----");
data37 0:36c080f46ab1 67 ti.reset();
data37 0:36c080f46ab1 68
data37 0:36c080f46ab1 69 //wind parameter set
data37 0:36c080f46ab1 70 char wind_data[256];
data37 0:36c080f46ab1 71 //char winddeg_c[4];
data37 0:36c080f46ab1 72 char winddeg_5sec_ave_c[4],winddeg_5min_ave_c[4];
data37 0:36c080f46ab1 73 float winddeg,windvel;
data37 0:36c080f46ab1 74 float windvel_5sec[6],windvel_5min[301];
data37 0:36c080f46ab1 75 float winddeg_5sec[6],winddeg_5min[301];
data37 0:36c080f46ab1 76 float windvel_5sec_ave=0.0,windvel_5min_ave=0.0;
data37 0:36c080f46ab1 77 float winddeg_5sec_ave=0.0,winddeg_5min_ave=0.0;
data37 0:36c080f46ab1 78 for(i=0; i<=5; i++){windvel_5sec[i]=0.0; winddeg_5sec[i]=0.0;}
data37 0:36c080f46ab1 79 for(i=0; i<=300; i++){windvel_5min[i]=0.0; winddeg_5min[i]=0.0;}
data37 0:36c080f46ab1 80
data37 0:36c080f46ab1 81 char idir[14] = "/sd/";
data37 0:36c080f46ab1 82 char time_c[7],date_c[9];
data37 0:36c080f46ab1 83
data37 0:36c080f46ab1 84 sprintf(date_c,"%4d%2d%2d",y_date,m_date,d_date);
data37 0:36c080f46ab1 85 sprintf(time_c,"%2d%2d%2d",h_time,m_time,s_time);
data37 0:36c080f46ab1 86
data37 0:36c080f46ab1 87 char filename[15] = "";
data37 0:36c080f46ab1 88 strcat(filename,date_c);
data37 0:36c080f46ab1 89 strcat(filename,time_c);
data37 0:36c080f46ab1 90
data37 0:36c080f46ab1 91 char dir[100] = "";
data37 0:36c080f46ab1 92 strcat(idir,date_c);
data37 0:36c080f46ab1 93 mkdir(idir, 0777);
data37 0:36c080f46ab1 94
data37 0:36c080f46ab1 95 strcat(dir,idir);
data37 0:36c080f46ab1 96 strcat(dir,"/");
data37 0:36c080f46ab1 97 strcat(dir,filename);
data37 0:36c080f46ab1 98 strcat(dir,".csv");
data37 0:36c080f46ab1 99
data37 0:36c080f46ab1 100 FILE *fp = fopen(dir, "w");
data37 0:36c080f46ab1 101 if(fp == NULL) {
data37 0:36c080f46ab1 102 error("Could not open file for write\r\n");
data37 0:36c080f46ab1 103 myled3 = 1;
data37 0:36c080f46ab1 104 }
data37 0:36c080f46ab1 105 //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 106 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 107
data37 0:36c080f46ab1 108 fclose(fp);
data37 0:36c080f46ab1 109
data37 0:36c080f46ab1 110 while(1){
data37 0:36c080f46ab1 111 ti.start();
data37 0:36c080f46ab1 112 myled1=0;
data37 0:36c080f46ab1 113 i=0;
data37 0:36c080f46ab1 114 while(xbee.getc()!='Q'){
data37 0:36c080f46ab1 115 lcd.locate(0,16);
data37 0:36c080f46ab1 116 lcd.printf("i");
data37 0:36c080f46ab1 117 }
data37 0:36c080f46ab1 118 myled1 = 1;
data37 0:36c080f46ab1 119 i=0;
data37 0:36c080f46ab1 120 while( (wind_data[i]=xbee.getc()) != '\r'){
data37 0:36c080f46ab1 121 i++;
data37 0:36c080f46ab1 122 if(i==256){
data37 0:36c080f46ab1 123 //lcd.locate(0,1);
data37 0:36c080f46ab1 124 //lcd.printf("Data read Error");
data37 0:36c080f46ab1 125 i=255;
data37 0:36c080f46ab1 126 break;
data37 0:36c080f46ab1 127 }
data37 0:36c080f46ab1 128 }
data37 0:36c080f46ab1 129 myled1 = 0;
data37 0:36c080f46ab1 130 wind_data[i]='\0';
data37 0:36c080f46ab1 131 if(i<=256){
data37 0:36c080f46ab1 132 //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)
data37 0:36c080f46ab1 133 //if( sscanf(wind_data, "WAPT,%f,%f,%f,%f,%s",&windvel_5sec_ave,&winddeg_5sec_ave,&windvel_5min_ave,&winddeg_5min_ave,&k) >= 1)
data37 0:36c080f46ab1 134 if( sscanf(wind_data, ",%f,%f,%c,%f",&winddeg,&windvel,&ms,&check) >= 1){
data37 0:36c080f46ab1 135 if( check == 0 ){
data37 0:36c080f46ab1 136 windvel_5sec[j] = windvel;
data37 0:36c080f46ab1 137 winddeg_5sec[j] = winddeg;
data37 0:36c080f46ab1 138 windvel_5min[k] = windvel;
data37 0:36c080f46ab1 139 winddeg_5min[k] = winddeg;
data37 0:36c080f46ab1 140
data37 0:36c080f46ab1 141 j++;
data37 0:36c080f46ab1 142 k++;
data37 0:36c080f46ab1 143
data37 0:36c080f46ab1 144 if(j==5){j=1;}
data37 0:36c080f46ab1 145 if(k==300){k=1;}
data37 0:36c080f46ab1 146
data37 0:36c080f46ab1 147 for(i=1; i<=5; i++){windvel_5sec_ave +=windvel_5sec[i];}
data37 0:36c080f46ab1 148 for(i=1; i<=5; i++){winddeg_5sec_ave +=winddeg_5sec[i];}
data37 0:36c080f46ab1 149 windvel_5sec_ave /= 5.0;
data37 0:36c080f46ab1 150 winddeg_5sec_ave /= 5.0;
data37 0:36c080f46ab1 151 for(i=1; i<=300; i++){windvel_5min_ave +=windvel_5min[i];}
data37 0:36c080f46ab1 152 for(i=1; i<=300; i++){winddeg_5min_ave +=winddeg_5min[i];}
data37 0:36c080f46ab1 153 windvel_5min_ave /= 300.0;
data37 0:36c080f46ab1 154 winddeg_5min_ave /= 300.0;
data37 0:36c080f46ab1 155 if(winddeg_5sec_ave>348.75 || winddeg_5sec_ave<=11.25){strcpy(winddeg_5sec_ave_c,"N ");}
data37 0:36c080f46ab1 156 if(winddeg_5sec_ave>11.25 && winddeg_5sec_ave<=33.75){strcpy(winddeg_5sec_ave_c,"NNE");}
data37 0:36c080f46ab1 157 if(winddeg_5sec_ave>33.75 && winddeg_5sec_ave<=56.25){strcpy(winddeg_5sec_ave_c,"NE ");}
data37 0:36c080f46ab1 158 if(winddeg_5sec_ave>56.25 && winddeg_5sec_ave<=78.75){strcpy(winddeg_5sec_ave_c,"ENE");}
data37 0:36c080f46ab1 159 if(winddeg_5sec_ave>78.75 && winddeg_5sec_ave<=101.25){strcpy(winddeg_5sec_ave_c,"E ");}
data37 0:36c080f46ab1 160 if(winddeg_5sec_ave>101.25 && winddeg_5sec_ave<=123.75){strcpy(winddeg_5sec_ave_c,"ESE");}
data37 0:36c080f46ab1 161 if(winddeg_5sec_ave>123.75 && winddeg_5sec_ave<=146.25){strcpy(winddeg_5sec_ave_c,"SE ");}
data37 0:36c080f46ab1 162 if(winddeg_5sec_ave>146.25 && winddeg_5sec_ave<=168.75){strcpy(winddeg_5sec_ave_c,"SSE");}
data37 0:36c080f46ab1 163 if(winddeg_5sec_ave>168.75 && winddeg_5sec_ave<=191.25){strcpy(winddeg_5sec_ave_c,"S ");}
data37 0:36c080f46ab1 164 if(winddeg_5sec_ave>191.25 && winddeg_5sec_ave<=213.75){strcpy(winddeg_5sec_ave_c,"SSW");}
data37 0:36c080f46ab1 165 if(winddeg_5sec_ave>213.75 && winddeg_5sec_ave<=236.25){strcpy(winddeg_5sec_ave_c,"SW ");}
data37 0:36c080f46ab1 166 if(winddeg_5sec_ave>236.25 && winddeg_5sec_ave<=258.75){strcpy(winddeg_5sec_ave_c,"WSW");}
data37 0:36c080f46ab1 167 if(winddeg_5sec_ave>258.75 && winddeg_5sec_ave<=281.25){strcpy(winddeg_5sec_ave_c,"W ");}
data37 0:36c080f46ab1 168 if(winddeg_5sec_ave>281.25 && winddeg_5sec_ave<=303.75){strcpy(winddeg_5sec_ave_c,"WNW");}
data37 0:36c080f46ab1 169 if(winddeg_5sec_ave>303.75 && winddeg_5sec_ave<=326.25){strcpy(winddeg_5sec_ave_c,"NW ");}
data37 0:36c080f46ab1 170 if(winddeg_5sec_ave>326.25 && winddeg_5sec_ave<=348.75){strcpy(winddeg_5sec_ave_c,"NNW");}
data37 0:36c080f46ab1 171
data37 0:36c080f46ab1 172 if(winddeg_5min_ave>348.75 || winddeg_5min_ave<=11.25){strcpy(winddeg_5min_ave_c,"N ");}
data37 0:36c080f46ab1 173 if(winddeg_5min_ave>11.25 && winddeg_5min_ave<=33.75){strcpy(winddeg_5min_ave_c,"NNE");}
data37 0:36c080f46ab1 174 if(winddeg_5min_ave>33.75 && winddeg_5min_ave<=56.25){strcpy(winddeg_5min_ave_c,"NE ");}
data37 0:36c080f46ab1 175 if(winddeg_5min_ave>56.25 && winddeg_5min_ave<=78.75){strcpy(winddeg_5min_ave_c,"ENE");}
data37 0:36c080f46ab1 176 if(winddeg_5min_ave>78.75 && winddeg_5min_ave<=101.25){strcpy(winddeg_5min_ave_c,"E ");}
data37 0:36c080f46ab1 177 if(winddeg_5min_ave>101.25 && winddeg_5min_ave<=123.75){strcpy(winddeg_5min_ave_c,"ESE");}
data37 0:36c080f46ab1 178 if(winddeg_5min_ave>123.75 && winddeg_5min_ave<=146.25){strcpy(winddeg_5min_ave_c,"SE ");}
data37 0:36c080f46ab1 179 if(winddeg_5min_ave>146.25 && winddeg_5min_ave<=168.75){strcpy(winddeg_5min_ave_c,"SSE");}
data37 0:36c080f46ab1 180 if(winddeg_5min_ave>168.75 && winddeg_5min_ave<=191.25){strcpy(winddeg_5min_ave_c,"S ");}
data37 0:36c080f46ab1 181 if(winddeg_5min_ave>191.25 && winddeg_5min_ave<=213.75){strcpy(winddeg_5min_ave_c,"SSW");}
data37 0:36c080f46ab1 182 if(winddeg_5min_ave>213.75 && winddeg_5min_ave<=236.25){strcpy(winddeg_5min_ave_c,"SW ");}
data37 0:36c080f46ab1 183 if(winddeg_5min_ave>236.25 && winddeg_5min_ave<=258.75){strcpy(winddeg_5min_ave_c,"WSW");}
data37 0:36c080f46ab1 184 if(winddeg_5min_ave>258.75 && winddeg_5min_ave<=281.25){strcpy(winddeg_5min_ave_c,"W ");}
data37 0:36c080f46ab1 185 if(winddeg_5min_ave>281.25 && winddeg_5min_ave<=303.75){strcpy(winddeg_5min_ave_c,"WNW");}
data37 0:36c080f46ab1 186 if(winddeg_5min_ave>303.75 && winddeg_5min_ave<=326.25){strcpy(winddeg_5min_ave_c,"NW ");}
data37 0:36c080f46ab1 187 if(winddeg_5min_ave>326.25 && winddeg_5min_ave<=348.75){strcpy(winddeg_5min_ave_c,"NNW");}
data37 0:36c080f46ab1 188
data37 0:36c080f46ab1 189 if(h>=9) {h=0;}
data37 0:36c080f46ab1 190 else {h++;}
data37 0:36c080f46ab1 191 lcd.cls();
data37 0:36c080f46ab1 192 lcd.locate(0,0);
data37 0:36c080f46ab1 193 lcd.printf("5s:%5.2fm/s %s",windvel_5sec_ave,winddeg_5sec_ave_c);
data37 0:36c080f46ab1 194 lcd.locate(0,1);
data37 0:36c080f46ab1 195 lcd.printf("5m:%5.2fm/s %s%d",windvel_5min_ave,winddeg_5min_ave_c,h);
data37 0:36c080f46ab1 196 //lcd.locate(0,1);
data37 0:36c080f46ab1 197 //lcd.printf("%6.2f hPa %4.2f ",Press[0]/100.0,Press[1]);
data37 0:36c080f46ab1 198 }
data37 0:36c080f46ab1 199 else
data37 0:36c080f46ab1 200 {
data37 0:36c080f46ab1 201 lcd.cls();
data37 0:36c080f46ab1 202 lcd.locate(0,0);
data37 0:36c080f46ab1 203 lcd.printf("-Windmeter LCD!-");
data37 0:36c080f46ab1 204 lcd.locate(0,1);
data37 0:36c080f46ab1 205 lcd.printf("Data read Error");
data37 0:36c080f46ab1 206 }
data37 0:36c080f46ab1 207 }
data37 0:36c080f46ab1 208 strcpy(winddeg_5sec_ave_c," ");
data37 0:36c080f46ab1 209 strcpy(winddeg_5min_ave_c," ");
data37 0:36c080f46ab1 210 for(i=0; i<=256; i++) wind_data[i] = 0;
data37 0:36c080f46ab1 211 }
data37 0:36c080f46ab1 212
data37 0:36c080f46ab1 213 while(1) {
data37 0:36c080f46ab1 214 myled1 = 1;
data37 0:36c080f46ab1 215 wait(0.2);
data37 0:36c080f46ab1 216 myled1 = 0;
data37 0:36c080f46ab1 217 wait(0.2);
data37 0:36c080f46ab1 218 }
data37 0:36c080f46ab1 219 }