wind logger

Dependencies:   SDFileSystem TextLCD mbed

Fork of windmeter4receive by Jumpei Oguro

main.cpp

Committer:
data37
Date:
2014-08-08
Revision:
0:36c080f46ab1
Child:
1:4810436d9e48

File content as of revision 0:36c080f46ab1:

#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);
    }
}