dd

Dependencies:   BufferedSerial FastAnalogIn FastPWM mbed SHT75

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers commandt.cpp Source File

commandt.cpp

00001 /*
00002  * commandt.cpp
00003  *
00004  *  Created on: 2016. 2. 19.
00005  *      Author: sbh9428
00006  */
00007 
00008 #include "commandt.h"
00009 
00010 command_t::command_t() {
00011     // TODO Auto-generated constructor stub
00012 
00013 }
00014 
00015 command_t::command_t(BufferedSerial* _pc, control_t* _control)
00016 {
00017     time=0;
00018     count=0;
00019     control=_control;
00020     pc=_pc; 
00021     pc->baud(115200);
00022 }
00023 
00024 command_t::~command_t() {
00025     // TODO Auto-generated destructor stub
00026 }
00027 
00028 void command_t::clear_data()
00029 {
00030     for(int i=0;i<10;i++)
00031     {
00032         data[i]=0;  
00033     }   
00034 }
00035 void command_t::parse()
00036 {
00037     switch(data[0])
00038     {
00039         case 's':
00040             switch(data[1])
00041             {
00042                 case 'm':
00043                     control->set_mode(data[2]-'0');
00044                     printf("set mode %d\n", data[2]-'0');
00045                 break;
00046                 case 'r':
00047                     control->control_PWM(asci_to_bin(data+2));
00048                     control->set_PWM_value(asci_to_bin(data+2));
00049                     printf("set PWM duty ratio %f1.5\n", asci_to_bin(data+2));
00050                 break;
00051                 case 't':
00052                     control->set_target_temp(asci_to_bin(data+2));
00053                     printf("set target temp %f\n", asci_to_bin(data+2));
00054                 break;  
00055                 case 'p':
00056                     control->set_P_value(asci_to_bin(data+2));
00057                     printf("set P value %f\n", asci_to_bin(data+2));
00058                 break;  
00059                 case 'i':
00060                     control->set_I_value(asci_to_bin(data+2));
00061                     printf("set I value %f\n", asci_to_bin(data+2));
00062                 break;  
00063                 case 'd':
00064                     control->set_D_value(asci_to_bin(data+2));
00065                     printf("set D value %f\n", asci_to_bin(data+2));
00066                 break;  
00067                 case 'e':
00068                     control->set_period((int)asci_to_bin(data+2));
00069                     printf("set period %d\n", (int)asci_to_bin(data+2));
00070                 break;
00071                 case 'h':
00072                     control->highTemp=asci_to_bin(data+2);
00073                     printf("set high temp %2.2f\n", asci_to_bin(data+2));
00074                 break;
00075                 case 'l':
00076                     control->lowTemp=asci_to_bin(data+2);
00077                     printf("set low temp %2.2f\n", asci_to_bin(data+2));
00078                 break;
00079                 case 'a':
00080                     control->highTempTime=(int)asci_to_bin(data+2);
00081                     printf("set high temp time%d\n", (int)asci_to_bin(data+2));
00082                 break;
00083                 case 'b':
00084                     control->lowTempTime=(int)asci_to_bin(data+2);
00085                     printf("set low temp %d\n", (int)asci_to_bin(data+2));
00086                 break;
00087                 case 'o':
00088                     control->periodNumber=(int)asci_to_bin(data+2);
00089                     printf("set period repeat number %d \n", (int)asci_to_bin(data+2));
00090                     break;
00091                 default:
00092                 pc->printf("command error");
00093             }
00094         break;
00095         case 'g':
00096             switch(data[1])
00097             {
00098                 case 'm':
00099                     printf("mode is %d\n", control->get_mode());
00100                 break;
00101                 case 'r':
00102                     printf("duty ratio is %f\n", control->get_PWM_value());
00103                 break;
00104                 case 't':
00105                     printf("target temp is %f\n", control->get_target_temp());
00106                 break;
00107                 case 'p':   
00108                     printf("P value is %f\n", control->get_P_value());
00109                 break;
00110                 case 'i':
00111                     printf("I value is %f\n", control->get_I_value());
00112                 break;
00113                 case 'd':
00114                     printf("D value is %f\n", control->get_P_value());
00115                 break;
00116                 case 'e':
00117                     printf("Period is %d\n", control->get_period());
00118                     break;
00119                 case 'a':
00120                     control->print_table();
00121                     break;
00122                 default:
00123                 pc->printf("command error");
00124             }
00125         
00126         break;  
00127         dafault:
00128         pc->printf("command error");
00129     }
00130     pc->printf("\n");
00131     count=0;
00132 }
00133 
00134 void command_t::get_data()
00135 {
00136     data [count]=pc->getc();
00137 
00138     if(data [count]=='f')
00139     parse();
00140     else
00141     count++;
00142 
00143     if(count>9)
00144     {
00145         count=0;
00146          pc->printf("command error\n");
00147      }
00148 }
00149 
00150 void command_t::refreshPWM()
00151 {
00152     time=time+3;
00153     control->refresh_PWM();
00154 }
00155 
00156 double command_t::asci_to_bin(int *start)
00157 {
00158     double _data=0;
00159     int current=0;
00160 
00161     double nth=1; //�ڸ���
00162     int mode=0;
00163     int sign=1;
00164     
00165     if(*start=='-')
00166     {
00167         current++;  
00168         sign=-1;
00169     }
00170     while(*(start+current)!='f'&&*(start+current)!='.')
00171     {
00172         _data*=10;
00173         _data+=*(start+current)-'0';
00174 
00175         current++;
00176     }
00177     if(*(start+current)=='.')
00178     {
00179         current++;
00180         while(*(start+current)!='f')
00181         {
00182             nth/=10;
00183             _data+=nth*(*(start+current)-'0');
00184             current++;
00185         }   
00186     }
00187     return sign*_data;
00188 }