wind logger
Dependencies: SDFileSystem TextLCD mbed
Fork of windmeter4receive by
main.cpp@1:4810436d9e48, 2014-08-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |