Nurbol Nurdaulet / Mbed 2 deprecated state_machine_modes29_11_11

Dependencies:   mbed WattBob_TextLCD globals

Committer:
Nurbol
Date:
Wed Nov 30 00:53:17 2011 +0000
Revision:
0:af612d827a23
Child:
1:fc3a5c5100d2

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nurbol 0:af612d827a23 1 //
Nurbol 0:af612d827a23 2 // COM_test : program to communicate via a COM port to a PC/laptop
Nurbol 0:af612d827a23 3 // ========
Nurbol 0:af612d827a23 4 //
Nurbol 0:af612d827a23 5 // Description
Nurbol 0:af612d827a23 6 // Program to receive ASCII format commands through a virtual COM port and
Nurbol 0:af612d827a23 7 // after executing the command return some data (optional, depending on
Nurbol 0:af612d827a23 8 // the command) and a status value.
Nurbol 0:af612d827a23 9 // The program understands two possible commands :
Nurbol 0:af612d827a23 10 // "s i j" : move servo 'i (0 to 5) to postion 'j' (0 to 90)
Nurbol 0:af612d827a23 11 // "r" : read the 'i' parameter of the last "s" command
Nurbol 0:af612d827a23 12 //
Nurbol 0:af612d827a23 13 // Version : 1.0
Nurbol 0:af612d827a23 14 // Author : Jim Herd
Nurbol 0:af612d827a23 15 // Date : 5th Oct 2011
Nurbol 0:af612d827a23 16 //
Nurbol 0:af612d827a23 17 #include "mbed.h"
Nurbol 0:af612d827a23 18 #include "MCP23017.h"
Nurbol 0:af612d827a23 19 #include "WattBob_TextLCD.h"
Nurbol 0:af612d827a23 20 #include "cmd_io.h"
Nurbol 0:af612d827a23 21 #include "globals.h"
Nurbol 0:af612d827a23 22
Nurbol 0:af612d827a23 23
Nurbol 0:af612d827a23 24
Nurbol 0:af612d827a23 25 //******************************************************************************
Nurbol 0:af612d827a23 26 //declare ticker
Nurbol 0:af612d827a23 27 //
Nurbol 0:af612d827a23 28 Ticker timer1p;
Nurbol 0:af612d827a23 29 Ticker timer2p;
Nurbol 0:af612d827a23 30 Ticker timercounter1p;
Nurbol 0:af612d827a23 31 Ticker timercounter2p;
Nurbol 0:af612d827a23 32 Ticker timerstatemachine;
Nurbol 0:af612d827a23 33
Nurbol 0:af612d827a23 34 //******************************************************************************
Nurbol 0:af612d827a23 35 //declare Pin
Nurbol 0:af612d827a23 36 //
Nurbol 0:af612d827a23 37 AnalogIn sensor1(p15);
Nurbol 0:af612d827a23 38 AnalogIn sensor2(p16);
Nurbol 0:af612d827a23 39 DigitalOut valueLED1(p23);
Nurbol 0:af612d827a23 40 DigitalOut valueLED2(p25);
Nurbol 0:af612d827a23 41
Nurbol 0:af612d827a23 42
Nurbol 0:af612d827a23 43 DigitalOut led1(LED1);
Nurbol 0:af612d827a23 44 DigitalOut led2(LED2);
Nurbol 0:af612d827a23 45 DigitalOut led3(LED3);
Nurbol 0:af612d827a23 46 DigitalOut led4(LED4);
Nurbol 0:af612d827a23 47
Nurbol 0:af612d827a23 48 DigitalOut clk(p24);
Nurbol 0:af612d827a23 49
Nurbol 0:af612d827a23 50 DigitalIn counter1p(p5);
Nurbol 0:af612d827a23 51 DigitalIn counter2p(p6);
Nurbol 0:af612d827a23 52 DigitalIn SW1p(p11);
Nurbol 0:af612d827a23 53 DigitalIn SW2p(p12);
Nurbol 0:af612d827a23 54
Nurbol 0:af612d827a23 55 //******************************************************************************
Nurbol 0:af612d827a23 56 //declare variable
Nurbol 0:af612d827a23 57 //
Nurbol 0:af612d827a23 58 bool Position1_1p;
Nurbol 0:af612d827a23 59 bool Position2_1p;
Nurbol 0:af612d827a23 60 bool Position1_2p;
Nurbol 0:af612d827a23 61 bool Position2_2p;
Nurbol 0:af612d827a23 62 bool Motor;
Nurbol 0:af612d827a23 63
Nurbol 0:af612d827a23 64 bool bSort_Mode; //to use in the code to define the mode
Nurbol 0:af612d827a23 65 bool bMaint_Mode;//to use in the code to define the mode
Nurbol 0:af612d827a23 66
Nurbol 0:af612d827a23 67 int state;
Nurbol 0:af612d827a23 68
Nurbol 0:af612d827a23 69
Nurbol 0:af612d827a23 70
Nurbol 0:af612d827a23 71 //******************************************************************************
Nurbol 0:af612d827a23 72 // declare functions
Nurbol 0:af612d827a23 73 //
Nurbol 0:af612d827a23 74 void sensor1p (void);
Nurbol 0:af612d827a23 75 void sensor2p (void);
Nurbol 0:af612d827a23 76 void counter1 (void);
Nurbol 0:af612d827a23 77 void counter2 (void);
Nurbol 0:af612d827a23 78 void state_machine (void);
Nurbol 0:af612d827a23 79 //
Nurbol 0:af612d827a23 80 //
Nurbol 0:af612d827a23 81 // 2. five servo outputs
Nurbol 0:af612d827a23 82 //
Nurbol 0:af612d827a23 83
Nurbol 0:af612d827a23 84 PwmOut servo_0(p26);
Nurbol 0:af612d827a23 85 //PwmOut servo_1(p25);
Nurbol 0:af612d827a23 86 //PwmOut servo_2(p24);
Nurbol 0:af612d827a23 87 //PwmOut servo_3(p23);
Nurbol 0:af612d827a23 88 PwmOut servo_4(p22);
Nurbol 0:af612d827a23 89 PwmOut servo_5(p21);
Nurbol 0:af612d827a23 90
Nurbol 0:af612d827a23 91 //
Nurbol 0:af612d827a23 92 // 3. objects necessary to use the 2*16 character MBED display
Nurbol 0:af612d827a23 93 //
Nurbol 0:af612d827a23 94 MCP23017 *par_port;
Nurbol 0:af612d827a23 95 WattBob_TextLCD *lcd;
Nurbol 0:af612d827a23 96 //
Nurbol 0:af612d827a23 97 // 4. Virtual COM port over USB link to laptop/PC
Nurbol 0:af612d827a23 98 //
Nurbol 0:af612d827a23 99 Serial pc(USBTX, USBRX);
Nurbol 0:af612d827a23 100
Nurbol 0:af612d827a23 101 //******************************************************************************
Nurbol 0:af612d827a23 102 // Defined GLOBAL variables and structures
Nurbol 0:af612d827a23 103 //
Nurbol 0:af612d827a23 104 CMD_STRUCT ext_cmd; // structure to hold command data
Nurbol 0:af612d827a23 105 STAT_STRUCT ext_stat; // structure to hold status reply
Nurbol 0:af612d827a23 106
Nurbol 0:af612d827a23 107
Nurbol 0:af612d827a23 108 //CMD_STRUCT commandcounter2;
Nurbol 0:af612d827a23 109
Nurbol 0:af612d827a23 110 uint32_t last_servo; // store for last servo number
Nurbol 0:af612d827a23 111
Nurbol 0:af612d827a23 112 //************************************************************************
Nurbol 0:af612d827a23 113 //************************************************************************
Nurbol 0:af612d827a23 114 // init_sys : initialise the system
Nurbol 0:af612d827a23 115 // ========
Nurbol 0:af612d827a23 116 //
Nurbol 0:af612d827a23 117 // 1. Configure 2*16 character display
Nurbol 0:af612d827a23 118 // 2. Print "COM test" string
Nurbol 0:af612d827a23 119 // 3. initialise relevant global variables
Nurbol 0:af612d827a23 120 // 4. set COM port baud rate to 19200 bits per second
Nurbol 0:af612d827a23 121 //
Nurbol 0:af612d827a23 122 void init_sys(void) {
Nurbol 0:af612d827a23 123
Nurbol 0:af612d827a23 124 par_port = new MCP23017(p9, p10, 0x40);
Nurbol 0:af612d827a23 125 lcd = new WattBob_TextLCD(par_port);
Nurbol 0:af612d827a23 126
Nurbol 0:af612d827a23 127 par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
Nurbol 0:af612d827a23 128 lcd->cls();
Nurbol 0:af612d827a23 129 lcd->locate(0,0);
Nurbol 0:af612d827a23 130 lcd->printf("W3C");
Nurbol 0:af612d827a23 131
Nurbol 0:af612d827a23 132 servo_0.period(0.020); // servo requires a 20ms period, common for all 5 servo objects
Nurbol 0:af612d827a23 133 last_servo = SERVO_UNKNOWN;
Nurbol 0:af612d827a23 134 pc.baud(19200);
Nurbol 0:af612d827a23 135
Nurbol 0:af612d827a23 136 servo_0.pulsewidth_us(1000 + (0 * 1000) / 90);
Nurbol 0:af612d827a23 137 servo_5.pulsewidth_us(1000 + (0 * 1000) / 90);
Nurbol 0:af612d827a23 138
Nurbol 0:af612d827a23 139 Position1_1p = 1;
Nurbol 0:af612d827a23 140 Position2_1p = 0;
Nurbol 0:af612d827a23 141 Position1_2p = 1;
Nurbol 0:af612d827a23 142 Position2_2p = 0;
Nurbol 0:af612d827a23 143
Nurbol 0:af612d827a23 144 state = 0;
Nurbol 0:af612d827a23 145
Nurbol 0:af612d827a23 146 return;
Nurbol 0:af612d827a23 147 } // end init_sys
Nurbol 0:af612d827a23 148
Nurbol 0:af612d827a23 149 //************************************************************************
Nurbol 0:af612d827a23 150 // process_cmd : decode and execute command
Nurbol 0:af612d827a23 151 // ===========
Nurbol 0:af612d827a23 152 uint32_t process_cmd(CMD_STRUCT *command)
Nurbol 0:af612d827a23 153 {
Nurbol 0:af612d827a23 154 int32_t pulse_width;
Nurbol 0:af612d827a23 155
Nurbol 0:af612d827a23 156 switch (command->cmd_code) {
Nurbol 0:af612d827a23 157 //
Nurbol 0:af612d827a23 158 // move a servo
Nurbol 0:af612d827a23 159 //
Nurbol 0:af612d827a23 160 case SERVO_CMD :
Nurbol 0:af612d827a23 161 command->nos_data = 0; // no data to be returned
Nurbol 0:af612d827a23 162 //
Nurbol 0:af612d827a23 163 // check that parameters are OK
Nurbol 0:af612d827a23 164 //
Nurbol 0:af612d827a23 165 if (command->nos_params != 2) { // check for 2 parameters
Nurbol 0:af612d827a23 166 command->result_status = CMD_BAD_NUMBER_OF_PARAMETERS;
Nurbol 0:af612d827a23 167 break;
Nurbol 0:af612d827a23 168 }
Nurbol 0:af612d827a23 169 if (command->param[0] > MAX_SERVO_NUMBER ) { // check servo number
Nurbol 0:af612d827a23 170 command->result_status = CMD_BAD_SERVO_NUMBER;
Nurbol 0:af612d827a23 171 break;
Nurbol 0:af612d827a23 172 }
Nurbol 0:af612d827a23 173 if ((command->param[1] < MIN_SERVO_ANGLE) ||
Nurbol 0:af612d827a23 174 (command->param[1] > MAX_SERVO_ANGLE) ) {
Nurbol 0:af612d827a23 175 command->result_status = CMD_BAD_SERVO_VALUE;
Nurbol 0:af612d827a23 176 break;
Nurbol 0:af612d827a23 177 }
Nurbol 0:af612d827a23 178 if ((command->param[0] == 4) && (command->param[1] == 0)) {
Nurbol 0:af612d827a23 179 pulse_width = 0; // convert angle to pulse width
Nurbol 0:af612d827a23 180 }
Nurbol 0:af612d827a23 181 else{
Nurbol 0:af612d827a23 182 pulse_width = 1000 + (command->param[1] * 1000) / 90; // convert angle to pulse width
Nurbol 0:af612d827a23 183 }
Nurbol 0:af612d827a23 184
Nurbol 0:af612d827a23 185
Nurbol 0:af612d827a23 186
Nurbol 0:af612d827a23 187 //
Nurbol 0:af612d827a23 188 // implement servo move to all 5 servos
Nurbol 0:af612d827a23 189 //
Nurbol 0:af612d827a23 190 switch (command->param[0]) {
Nurbol 0:af612d827a23 191 case 0 : servo_0.pulsewidth_us(pulse_width); break;
Nurbol 0:af612d827a23 192 case 4 : servo_4.pulsewidth_us(pulse_width); break;
Nurbol 0:af612d827a23 193 case 5 : servo_5.pulsewidth_us(pulse_width); break;
Nurbol 0:af612d827a23 194
Nurbol 0:af612d827a23 195 }
Nurbol 0:af612d827a23 196 last_servo = command->param[0];
Nurbol 0:af612d827a23 197 break;
Nurbol 0:af612d827a23 198 //
Nurbol 0:af612d827a23 199 // return last servo number
Nurbol 0:af612d827a23 200 //
Nurbol 0:af612d827a23 201 case READ_CMD :
Nurbol 0:af612d827a23 202
Nurbol 0:af612d827a23 203 if((bSort_Mode == 0)&&(bMaint_Mode == 1)){
Nurbol 0:af612d827a23 204 command->nos_data = 2;// no data to be returned
Nurbol 0:af612d827a23 205 command->result_data[0] = valueLED1;
Nurbol 0:af612d827a23 206 command->result_data[1] = valueLED2;
Nurbol 0:af612d827a23 207 }
Nurbol 0:af612d827a23 208 else if((bSort_Mode == 1)&&(bMaint_Mode == 0)){
Nurbol 0:af612d827a23 209 command->nos_data = 7;// no data to be returned
Nurbol 0:af612d827a23 210 command->result_data[0] = valueLED1;// counter1p;
Nurbol 0:af612d827a23 211 command->result_data[1] = valueLED2;// counter2p;
Nurbol 0:af612d827a23 212 command->result_data[2] = Motor;
Nurbol 0:af612d827a23 213 command->result_data[3] = Position1_1p;
Nurbol 0:af612d827a23 214 command->result_data[4] = Position2_1p;
Nurbol 0:af612d827a23 215 command->result_data[5] = Position1_2p;
Nurbol 0:af612d827a23 216 command->result_data[6] = Position2_2p;
Nurbol 0:af612d827a23 217 send_data(&ext_cmd);
Nurbol 0:af612d827a23 218 }
Nurbol 0:af612d827a23 219 break;
Nurbol 0:af612d827a23 220
Nurbol 0:af612d827a23 221 //
Nurbol 0:af612d827a23 222 // Mode value
Nurbol 0:af612d827a23 223 //
Nurbol 0:af612d827a23 224 case MAINT_MODE :
Nurbol 0:af612d827a23 225 bSort_Mode = 0;
Nurbol 0:af612d827a23 226 bMaint_Mode = 1;
Nurbol 0:af612d827a23 227 servo_4.pulsewidth_us(0);
Nurbol 0:af612d827a23 228 servo_0.pulsewidth_us(0);
Nurbol 0:af612d827a23 229 servo_5.pulsewidth_us(0);
Nurbol 0:af612d827a23 230 lcd->cls();
Nurbol 0:af612d827a23 231 lcd->locate(0,0);
Nurbol 0:af612d827a23 232 lcd->printf("W3C");
Nurbol 0:af612d827a23 233 lcd->locate(1,0);
Nurbol 0:af612d827a23 234 lcd->printf("maintenance mode");
Nurbol 0:af612d827a23 235 break;
Nurbol 0:af612d827a23 236
Nurbol 0:af612d827a23 237
Nurbol 0:af612d827a23 238 case SORT_MODE :
Nurbol 0:af612d827a23 239 bSort_Mode = 1;
Nurbol 0:af612d827a23 240 bMaint_Mode = 0;
Nurbol 0:af612d827a23 241 lcd->cls();
Nurbol 0:af612d827a23 242 lcd->locate(0,0);
Nurbol 0:af612d827a23 243 lcd->printf("W3C");
Nurbol 0:af612d827a23 244 lcd->locate(1,0);
Nurbol 0:af612d827a23 245 lcd->printf("sort mode");
Nurbol 0:af612d827a23 246 break;
Nurbol 0:af612d827a23 247
Nurbol 0:af612d827a23 248 //
Nurbol 0:af612d827a23 249 // Urgency mode
Nurbol 0:af612d827a23 250 //
Nurbol 0:af612d827a23 251 case URGENCY :
Nurbol 0:af612d827a23 252 servo_4.pulsewidth_us(0);
Nurbol 0:af612d827a23 253 servo_0.pulsewidth_us(0);
Nurbol 0:af612d827a23 254 servo_5.pulsewidth_us(0);
Nurbol 0:af612d827a23 255 lcd->cls();
Nurbol 0:af612d827a23 256 lcd->locate(0,0);
Nurbol 0:af612d827a23 257 lcd->printf("W3C");
Nurbol 0:af612d827a23 258 lcd->locate(1,0);
Nurbol 0:af612d827a23 259 lcd->printf("urgency mode");
Nurbol 0:af612d827a23 260 break;
Nurbol 0:af612d827a23 261
Nurbol 0:af612d827a23 262 //
Nurbol 0:af612d827a23 263 // catch any problems
Nurbol 0:af612d827a23 264 //
Nurbol 0:af612d827a23 265 default:
Nurbol 0:af612d827a23 266 command->nos_data = 0; // no data to be returned
Nurbol 0:af612d827a23 267 command->result_status = CMD_BAD_SERVO_VALUE;
Nurbol 0:af612d827a23 268 break;
Nurbol 0:af612d827a23 269 }
Nurbol 0:af612d827a23 270 return OK;
Nurbol 0:af612d827a23 271 }
Nurbol 0:af612d827a23 272
Nurbol 0:af612d827a23 273 //************************************************************************
Nurbol 0:af612d827a23 274
Nurbol 0:af612d827a23 275 //function to send value on the FPGA when 1p is detected
Nurbol 0:af612d827a23 276 void sensor1p (void){
Nurbol 0:af612d827a23 277 clk = !clk;
Nurbol 0:af612d827a23 278 wait(0.01);
Nurbol 0:af612d827a23 279 sensor1.read();
Nurbol 0:af612d827a23 280 if(sensor1 > 0.8) {
Nurbol 0:af612d827a23 281 led1 = 1;
Nurbol 0:af612d827a23 282 if((bSort_Mode == 1)&&(bMaint_Mode == 0)){
Nurbol 0:af612d827a23 283 valueLED1 = 1;
Nurbol 0:af612d827a23 284 }
Nurbol 0:af612d827a23 285 }
Nurbol 0:af612d827a23 286 else if(sensor1 < 0.8){
Nurbol 0:af612d827a23 287 led1 = 0;
Nurbol 0:af612d827a23 288 if((bSort_Mode == 1)&&(bMaint_Mode == 0)){
Nurbol 0:af612d827a23 289 valueLED1 = 0;
Nurbol 0:af612d827a23 290 }
Nurbol 0:af612d827a23 291 }
Nurbol 0:af612d827a23 292 }
Nurbol 0:af612d827a23 293
Nurbol 0:af612d827a23 294 //function to send value on the FPGA when 2p is detected
Nurbol 0:af612d827a23 295 void sensor2p (){
Nurbol 0:af612d827a23 296 sensor2.read();
Nurbol 0:af612d827a23 297 if(sensor2 > 0.8) {
Nurbol 0:af612d827a23 298 led2 = 1;
Nurbol 0:af612d827a23 299 valueLED2 = 1;
Nurbol 0:af612d827a23 300 }
Nurbol 0:af612d827a23 301 else if(sensor2 < 0.8){
Nurbol 0:af612d827a23 302 led2 = 0;
Nurbol 0:af612d827a23 303 valueLED2 = 0;
Nurbol 0:af612d827a23 304 }
Nurbol 0:af612d827a23 305 }
Nurbol 0:af612d827a23 306
Nurbol 0:af612d827a23 307
Nurbol 0:af612d827a23 308 //function for the state machine to move servos between 2 positions
Nurbol 0:af612d827a23 309 void state_machine (){
Nurbol 0:af612d827a23 310 if((bSort_Mode == 1)&&(bMaint_Mode == 0)){
Nurbol 0:af612d827a23 311 switch(state)
Nurbol 0:af612d827a23 312 {
Nurbol 0:af612d827a23 313 case 0: // initial state
Nurbol 0:af612d827a23 314 servo_4.pulsewidth_us(1000 + (25 * 1000) / 90); // motor is run
Nurbol 0:af612d827a23 315 servo_0.pulsewidth_us(1000 + (0 * 1000) / 90); // servo 1p go to position 1
Nurbol 0:af612d827a23 316 servo_5.pulsewidth_us(1000 + (0 * 1000) / 90); // servo 2p go to position 1
Nurbol 0:af612d827a23 317 Position1_1p = 1;
Nurbol 0:af612d827a23 318 Position2_1p = 0;
Nurbol 0:af612d827a23 319 Position1_2p = 1;
Nurbol 0:af612d827a23 320 Position2_2p = 0;
Nurbol 0:af612d827a23 321 Motor = 1;
Nurbol 0:af612d827a23 322 led3 = 0;
Nurbol 0:af612d827a23 323 led4 = 0;
Nurbol 0:af612d827a23 324 counter1p.read();
Nurbol 0:af612d827a23 325 counter2p.read();
Nurbol 0:af612d827a23 326 if(SW1p == 0){
Nurbol 0:af612d827a23 327 if(counter1p > 0.5){
Nurbol 0:af612d827a23 328 state = 1;
Nurbol 0:af612d827a23 329 }
Nurbol 0:af612d827a23 330 }
Nurbol 0:af612d827a23 331 if(SW2p == 0){
Nurbol 0:af612d827a23 332 if(counter2p > 0.5){
Nurbol 0:af612d827a23 333 state = 4;
Nurbol 0:af612d827a23 334 }
Nurbol 0:af612d827a23 335 }
Nurbol 0:af612d827a23 336 break;
Nurbol 0:af612d827a23 337 case 1: // state 1 if counter1p = 1
Nurbol 0:af612d827a23 338 servo_4.pulsewidth_us(0); // motor stop
Nurbol 0:af612d827a23 339 servo_0.pulsewidth_us(1000 + (200 * 1000) / 90); // servo 1p go to position 2
Nurbol 0:af612d827a23 340 wait(1);
Nurbol 0:af612d827a23 341 Position1_1p = 0;
Nurbol 0:af612d827a23 342 Position2_1p = 1;
Nurbol 0:af612d827a23 343 Motor = 0;
Nurbol 0:af612d827a23 344 if((Position2_1p == 1)&&(counter1p < 0.5)){
Nurbol 0:af612d827a23 345 state = 2;
Nurbol 0:af612d827a23 346 }
Nurbol 0:af612d827a23 347 break;
Nurbol 0:af612d827a23 348 case 2: // state 2 if servo 1p is in position 2
Nurbol 0:af612d827a23 349 servo_4.pulsewidth_us(1000 + (25 * 1000) / 90); // motor is run
Nurbol 0:af612d827a23 350 Motor = 1;
Nurbol 0:af612d827a23 351 counter1p.read();
Nurbol 0:af612d827a23 352 if(counter1p > 0.5){
Nurbol 0:af612d827a23 353 state = 3;
Nurbol 0:af612d827a23 354 }
Nurbol 0:af612d827a23 355 break;
Nurbol 0:af612d827a23 356 case 3: // state 3 if counter 1p = 1
Nurbol 0:af612d827a23 357 servo_4.pulsewidth_us(0); // motor stop
Nurbol 0:af612d827a23 358 Motor = 0;
Nurbol 0:af612d827a23 359 led3 = 1;
Nurbol 0:af612d827a23 360 if(SW1p == 1){ // wait SW 1p to go to the initial state
Nurbol 0:af612d827a23 361 state = 0;
Nurbol 0:af612d827a23 362 }
Nurbol 0:af612d827a23 363 break;
Nurbol 0:af612d827a23 364 case 4: // state 4 if counter 2p = 1
Nurbol 0:af612d827a23 365 servo_4.pulsewidth_us(0); // motor stop
Nurbol 0:af612d827a23 366 servo_5.pulsewidth_us(1000 + (200 * 1000) / 90); // servo 2p go to position 2
Nurbol 0:af612d827a23 367 wait(1);
Nurbol 0:af612d827a23 368 Position1_2p = 0;
Nurbol 0:af612d827a23 369 Position2_2p = 1;
Nurbol 0:af612d827a23 370 Motor = 0;
Nurbol 0:af612d827a23 371 if((Position2_2p == 1)&&(counter2p < 0.5)){
Nurbol 0:af612d827a23 372 state = 5;
Nurbol 0:af612d827a23 373 }
Nurbol 0:af612d827a23 374 break;
Nurbol 0:af612d827a23 375 case 5: // state 5 if servo 2p is in position 2
Nurbol 0:af612d827a23 376 servo_4.pulsewidth_us(1000 + (25 * 1000) / 90); // motor run
Nurbol 0:af612d827a23 377 Motor = 1;
Nurbol 0:af612d827a23 378 counter2p.read();
Nurbol 0:af612d827a23 379 if(counter2p > 0.5){
Nurbol 0:af612d827a23 380 state = 6;
Nurbol 0:af612d827a23 381 }
Nurbol 0:af612d827a23 382 break;
Nurbol 0:af612d827a23 383 case 6: // state 6 if counter 2p = 1
Nurbol 0:af612d827a23 384 servo_4.pulsewidth_us(0); // motor stop
Nurbol 0:af612d827a23 385 Motor = 0;
Nurbol 0:af612d827a23 386 led4 = 1;
Nurbol 0:af612d827a23 387 if(SW2p == 1){ // wait SW 2p to go to the initial state
Nurbol 0:af612d827a23 388 state = 0;
Nurbol 0:af612d827a23 389 }
Nurbol 0:af612d827a23 390 break;
Nurbol 0:af612d827a23 391 }
Nurbol 0:af612d827a23 392 }
Nurbol 0:af612d827a23 393 }
Nurbol 0:af612d827a23 394
Nurbol 0:af612d827a23 395
Nurbol 0:af612d827a23 396 //************************************************************************
Nurbol 0:af612d827a23 397 //
Nurbol 0:af612d827a23 398 int main() {
Nurbol 0:af612d827a23 399
Nurbol 0:af612d827a23 400 valueLED1=0;
Nurbol 0:af612d827a23 401 valueLED2=0;
Nurbol 0:af612d827a23 402 clk=0;
Nurbol 0:af612d827a23 403 init_sys();
Nurbol 0:af612d827a23 404
Nurbol 0:af612d827a23 405 FOREVER {
Nurbol 0:af612d827a23 406
Nurbol 0:af612d827a23 407 timer2p.attach(&sensor2p, 0.1); //function sensor2p is reading all the 0.1 ms
Nurbol 0:af612d827a23 408 timer1p.attach(&sensor1p, 0.1); //function sensor1p is reading all the 0.1 ms
Nurbol 0:af612d827a23 409
Nurbol 0:af612d827a23 410
Nurbol 0:af612d827a23 411 counter1p.read();
Nurbol 0:af612d827a23 412 counter2p.read();
Nurbol 0:af612d827a23 413
Nurbol 0:af612d827a23 414 timerstatemachine.attach(&state_machine, 0.1);
Nurbol 0:af612d827a23 415
Nurbol 0:af612d827a23 416
Nurbol 0:af612d827a23 417
Nurbol 0:af612d827a23 418 clk = !clk;
Nurbol 0:af612d827a23 419 wait(0.01);
Nurbol 0:af612d827a23 420
Nurbol 0:af612d827a23 421 get_cmd(&ext_cmd);
Nurbol 0:af612d827a23 422 //
Nurbol 0:af612d827a23 423 // Check status of read command activity and return an error status if there was a problem
Nurbol 0:af612d827a23 424 // If there is a problem, then return status code only and wait for next command.
Nurbol 0:af612d827a23 425 //
Nurbol 0:af612d827a23 426 if (ext_cmd.result_status != OK){
Nurbol 0:af612d827a23 427 send_status(ext_cmd.result_status);
Nurbol 0:af612d827a23 428 continue;
Nurbol 0:af612d827a23 429 }
Nurbol 0:af612d827a23 430 //
Nurbol 0:af612d827a23 431 // Parse command and return an error staus if there is a problem
Nurbol 0:af612d827a23 432 // If there is a problem, then return status code only and wait for next command.
Nurbol 0:af612d827a23 433 //
Nurbol 0:af612d827a23 434 parse_cmd(&ext_cmd);
Nurbol 0:af612d827a23 435 // lcd->locate(1,0); lcd->printf(ext_cmd.cmd_str);
Nurbol 0:af612d827a23 436 if ((ext_cmd.result_status != OK) && (ext_cmd.cmd_code != TEXT_CMD)){
Nurbol 0:af612d827a23 437 lcd->cls(); lcd->locate(0,0); lcd->printf("W3C"); lcd->locate(1,0); lcd->printf("parse : error");
Nurbol 0:af612d827a23 438 send_status(ext_cmd.result_status);
Nurbol 0:af612d827a23 439 continue;
Nurbol 0:af612d827a23 440 }
Nurbol 0:af612d827a23 441 //
Nurbol 0:af612d827a23 442 // Execute command and return an error staus if there is a problem
Nurbol 0:af612d827a23 443 //
Nurbol 0:af612d827a23 444 process_cmd(&ext_cmd);
Nurbol 0:af612d827a23 445 reply_to_cmd(&ext_cmd);
Nurbol 0:af612d827a23 446
Nurbol 0:af612d827a23 447
Nurbol 0:af612d827a23 448
Nurbol 0:af612d827a23 449
Nurbol 0:af612d827a23 450 }
Nurbol 0:af612d827a23 451
Nurbol 0:af612d827a23 452 }
Nurbol 0:af612d827a23 453
Nurbol 0:af612d827a23 454
Nurbol 0:af612d827a23 455
Nurbol 0:af612d827a23 456
Nurbol 0:af612d827a23 457
Nurbol 0:af612d827a23 458
Nurbol 0:af612d827a23 459
Nurbol 0:af612d827a23 460
Nurbol 0:af612d827a23 461