111
Dependencies: BufferedSerial FastPWM mbed
commandt.cpp@0:f3108add3d98, 2016-04-12 (annotated)
- Committer:
- sbh9428
- Date:
- Tue Apr 12 06:52:10 2016 +0000
- Revision:
- 0:f3108add3d98
11
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sbh9428 | 0:f3108add3d98 | 1 | /* |
sbh9428 | 0:f3108add3d98 | 2 | * commandt.cpp |
sbh9428 | 0:f3108add3d98 | 3 | * |
sbh9428 | 0:f3108add3d98 | 4 | * Created on: 2016. 2. 19. |
sbh9428 | 0:f3108add3d98 | 5 | * Author: sbh9428 |
sbh9428 | 0:f3108add3d98 | 6 | */ |
sbh9428 | 0:f3108add3d98 | 7 | |
sbh9428 | 0:f3108add3d98 | 8 | #include "commandt.h" |
sbh9428 | 0:f3108add3d98 | 9 | |
sbh9428 | 0:f3108add3d98 | 10 | command_t::command_t() { |
sbh9428 | 0:f3108add3d98 | 11 | // TODO Auto-generated constructor stub |
sbh9428 | 0:f3108add3d98 | 12 | |
sbh9428 | 0:f3108add3d98 | 13 | } |
sbh9428 | 0:f3108add3d98 | 14 | |
sbh9428 | 0:f3108add3d98 | 15 | command_t::command_t(BufferedSerial* _pc, control_t* _control) |
sbh9428 | 0:f3108add3d98 | 16 | { |
sbh9428 | 0:f3108add3d98 | 17 | time=0; |
sbh9428 | 0:f3108add3d98 | 18 | count=0; |
sbh9428 | 0:f3108add3d98 | 19 | control=_control; |
sbh9428 | 0:f3108add3d98 | 20 | pc=_pc; |
sbh9428 | 0:f3108add3d98 | 21 | } |
sbh9428 | 0:f3108add3d98 | 22 | |
sbh9428 | 0:f3108add3d98 | 23 | command_t::~command_t() { |
sbh9428 | 0:f3108add3d98 | 24 | // TODO Auto-generated destructor stub |
sbh9428 | 0:f3108add3d98 | 25 | } |
sbh9428 | 0:f3108add3d98 | 26 | |
sbh9428 | 0:f3108add3d98 | 27 | void command_t::clear_data() |
sbh9428 | 0:f3108add3d98 | 28 | { |
sbh9428 | 0:f3108add3d98 | 29 | for(int i=0;i<10;i++) |
sbh9428 | 0:f3108add3d98 | 30 | { |
sbh9428 | 0:f3108add3d98 | 31 | data[i]=0; |
sbh9428 | 0:f3108add3d98 | 32 | } |
sbh9428 | 0:f3108add3d98 | 33 | } |
sbh9428 | 0:f3108add3d98 | 34 | void command_t::parse() |
sbh9428 | 0:f3108add3d98 | 35 | { |
sbh9428 | 0:f3108add3d98 | 36 | switch(data[0]) |
sbh9428 | 0:f3108add3d98 | 37 | { |
sbh9428 | 0:f3108add3d98 | 38 | case 's': |
sbh9428 | 0:f3108add3d98 | 39 | switch(data[1]) |
sbh9428 | 0:f3108add3d98 | 40 | { |
sbh9428 | 0:f3108add3d98 | 41 | case 'm': |
sbh9428 | 0:f3108add3d98 | 42 | control->setMode(data[2]-'0'); |
sbh9428 | 0:f3108add3d98 | 43 | printf("set mode %d\n", data[2]-'0'); |
sbh9428 | 0:f3108add3d98 | 44 | break; |
sbh9428 | 0:f3108add3d98 | 45 | case 'p': |
sbh9428 | 0:f3108add3d98 | 46 | control->setP(asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 47 | printf("set P %f1.5\n", asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 48 | break; |
sbh9428 | 0:f3108add3d98 | 49 | case 'i': |
sbh9428 | 0:f3108add3d98 | 50 | control->setI(asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 51 | printf("set I %f\n", asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 52 | break; |
sbh9428 | 0:f3108add3d98 | 53 | case 'd': |
sbh9428 | 0:f3108add3d98 | 54 | control->setD(asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 55 | printf("set D %f\n", asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 56 | break; |
sbh9428 | 0:f3108add3d98 | 57 | case 'o': |
sbh9428 | 0:f3108add3d98 | 58 | control->setPower(asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 59 | printf("set I value %f\n", asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 60 | break; |
sbh9428 | 0:f3108add3d98 | 61 | case 'a': |
sbh9428 | 0:f3108add3d98 | 62 | control->setRatio(asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 63 | printf("set Ratio %f\n", asci_to_bin(data+2)); |
sbh9428 | 0:f3108add3d98 | 64 | break; |
sbh9428 | 0:f3108add3d98 | 65 | } |
sbh9428 | 0:f3108add3d98 | 66 | break; |
sbh9428 | 0:f3108add3d98 | 67 | case 'g': |
sbh9428 | 0:f3108add3d98 | 68 | switch(data[1]) |
sbh9428 | 0:f3108add3d98 | 69 | { |
sbh9428 | 0:f3108add3d98 | 70 | case 'm': |
sbh9428 | 0:f3108add3d98 | 71 | printf("mode is %d\n", control->getMode()); |
sbh9428 | 0:f3108add3d98 | 72 | break; |
sbh9428 | 0:f3108add3d98 | 73 | case 'p': |
sbh9428 | 0:f3108add3d98 | 74 | printf("P is %f\n", control->getP()); |
sbh9428 | 0:f3108add3d98 | 75 | break; |
sbh9428 | 0:f3108add3d98 | 76 | case 'i': |
sbh9428 | 0:f3108add3d98 | 77 | printf("I is %f\n", control->getI()); |
sbh9428 | 0:f3108add3d98 | 78 | break; |
sbh9428 | 0:f3108add3d98 | 79 | case 'd': |
sbh9428 | 0:f3108add3d98 | 80 | printf("D is %f\n", control->getD()); |
sbh9428 | 0:f3108add3d98 | 81 | break; |
sbh9428 | 0:f3108add3d98 | 82 | case 'o': |
sbh9428 | 0:f3108add3d98 | 83 | printf("power is %f\n", control->getPower()); |
sbh9428 | 0:f3108add3d98 | 84 | break; |
sbh9428 | 0:f3108add3d98 | 85 | case 'a': |
sbh9428 | 0:f3108add3d98 | 86 | printf("ratio is %f\n", control->getRatio()); |
sbh9428 | 0:f3108add3d98 | 87 | break; |
sbh9428 | 0:f3108add3d98 | 88 | } |
sbh9428 | 0:f3108add3d98 | 89 | |
sbh9428 | 0:f3108add3d98 | 90 | break; |
sbh9428 | 0:f3108add3d98 | 91 | dafault: |
sbh9428 | 0:f3108add3d98 | 92 | pc->printf("command error"); |
sbh9428 | 0:f3108add3d98 | 93 | } |
sbh9428 | 0:f3108add3d98 | 94 | pc->printf("\n"); |
sbh9428 | 0:f3108add3d98 | 95 | count=0; |
sbh9428 | 0:f3108add3d98 | 96 | } |
sbh9428 | 0:f3108add3d98 | 97 | |
sbh9428 | 0:f3108add3d98 | 98 | void command_t::get_data() |
sbh9428 | 0:f3108add3d98 | 99 | { |
sbh9428 | 0:f3108add3d98 | 100 | data [count]=pc->getc(); |
sbh9428 | 0:f3108add3d98 | 101 | |
sbh9428 | 0:f3108add3d98 | 102 | if(data [count]=='f') |
sbh9428 | 0:f3108add3d98 | 103 | parse(); |
sbh9428 | 0:f3108add3d98 | 104 | else |
sbh9428 | 0:f3108add3d98 | 105 | count++; |
sbh9428 | 0:f3108add3d98 | 106 | |
sbh9428 | 0:f3108add3d98 | 107 | if(count>9) |
sbh9428 | 0:f3108add3d98 | 108 | { |
sbh9428 | 0:f3108add3d98 | 109 | count=0; |
sbh9428 | 0:f3108add3d98 | 110 | pc->printf("command error\n"); |
sbh9428 | 0:f3108add3d98 | 111 | } |
sbh9428 | 0:f3108add3d98 | 112 | } |
sbh9428 | 0:f3108add3d98 | 113 | |
sbh9428 | 0:f3108add3d98 | 114 | double command_t::asci_to_bin(int *start) |
sbh9428 | 0:f3108add3d98 | 115 | { |
sbh9428 | 0:f3108add3d98 | 116 | double _data=0; |
sbh9428 | 0:f3108add3d98 | 117 | int current=0; |
sbh9428 | 0:f3108add3d98 | 118 | |
sbh9428 | 0:f3108add3d98 | 119 | double nth=1; //�ڸ��� |
sbh9428 | 0:f3108add3d98 | 120 | int mode=0; |
sbh9428 | 0:f3108add3d98 | 121 | int sign=1; |
sbh9428 | 0:f3108add3d98 | 122 | |
sbh9428 | 0:f3108add3d98 | 123 | if(*start=='-') |
sbh9428 | 0:f3108add3d98 | 124 | { |
sbh9428 | 0:f3108add3d98 | 125 | current++; |
sbh9428 | 0:f3108add3d98 | 126 | sign=-1; |
sbh9428 | 0:f3108add3d98 | 127 | } |
sbh9428 | 0:f3108add3d98 | 128 | while(*(start+current)!='f'&&*(start+current)!='.') |
sbh9428 | 0:f3108add3d98 | 129 | { |
sbh9428 | 0:f3108add3d98 | 130 | _data*=10; |
sbh9428 | 0:f3108add3d98 | 131 | _data+=*(start+current)-'0'; |
sbh9428 | 0:f3108add3d98 | 132 | |
sbh9428 | 0:f3108add3d98 | 133 | current++; |
sbh9428 | 0:f3108add3d98 | 134 | } |
sbh9428 | 0:f3108add3d98 | 135 | if(*(start+current)=='.') |
sbh9428 | 0:f3108add3d98 | 136 | { |
sbh9428 | 0:f3108add3d98 | 137 | current++; |
sbh9428 | 0:f3108add3d98 | 138 | while(*(start+current)!='f') |
sbh9428 | 0:f3108add3d98 | 139 | { |
sbh9428 | 0:f3108add3d98 | 140 | nth/=10; |
sbh9428 | 0:f3108add3d98 | 141 | _data+=nth*(*(start+current)-'0'); |
sbh9428 | 0:f3108add3d98 | 142 | current++; |
sbh9428 | 0:f3108add3d98 | 143 | } |
sbh9428 | 0:f3108add3d98 | 144 | } |
sbh9428 | 0:f3108add3d98 | 145 | return sign*_data; |
sbh9428 | 0:f3108add3d98 | 146 | } |