for bob

Dependencies:   mbed-STM32F103C8T6_new

Committer:
bbw
Date:
Fri May 15 13:25:56 2020 +0000
Revision:
8:611fef4d4b5d
Parent:
7:155d5b6a416f
Child:
9:98b398a0e357
backup for check

Who changed what in which revision?

UserRevisionLine numberNew contents of line
techneo 0:217105958c2d 1 #include "mbed.h"
bbw 1:0fe432e5dfc4 2 #include "stm32f103c8t6.h"
hankzhang 3:30d61fa10b98 3 #include "string.h"
hankzhang 3:30d61fa10b98 4 #include "main.h"
hankzhang 4:864bb8bde75c 5 #include "stdio.h"
hankzhang 4:864bb8bde75c 6 #include "stdlib.h"
bbw 1:0fe432e5dfc4 7
bbw 6:a9cc2c424cf9 8 DigitalOut MOTOA1(PB_4);
bbw 6:a9cc2c424cf9 9 DigitalOut MOTOB1(PB_5);
bbw 6:a9cc2c424cf9 10
bbw 6:a9cc2c424cf9 11 DigitalOut MOTOA2(PB_8);
bbw 6:a9cc2c424cf9 12 DigitalOut MOTOB2(PB_9);
bbw 6:a9cc2c424cf9 13
bbw 6:a9cc2c424cf9 14 AnalogIn SensorCurrent(PA_0);
bbw 6:a9cc2c424cf9 15
bbw 6:a9cc2c424cf9 16 void motor1_move(uint8_t dir);
bbw 6:a9cc2c424cf9 17 void motor2_move(uint8_t dir);
bbw 6:a9cc2c424cf9 18
bbw 6:a9cc2c424cf9 19 void system_init();
bbw 6:a9cc2c424cf9 20
bbw 8:611fef4d4b5d 21 uint8_t sensor_cnt,cal_cnt, cal_cnt2, cur_cnt, tar_cnt, pre_sensor_cnt;
bbw 6:a9cc2c424cf9 22 //uint8_t dir;
bbw 6:a9cc2c424cf9 23 float sense_value;
bbw 6:a9cc2c424cf9 24 uint8_t ov_flag, init_flag, motor1_ready_flag, motor2_ready_flag, sensor_flag, ready_flag;
bbw 6:a9cc2c424cf9 25 uint8_t open_flag,close_flag;
bbw 6:a9cc2c424cf9 26 float m_val = 0;
bbw 6:a9cc2c424cf9 27
hankzhang 7:155d5b6a416f 28 #define MAX_LENGTH_STEPS 55
hankzhang 7:155d5b6a416f 29 #define MIN_LENGTH_STEPS 10
hankzhang 7:155d5b6a416f 30 #define MOVING_UP 1
hankzhang 7:155d5b6a416f 31 #define MOVING_DOWN 2
hankzhang 7:155d5b6a416f 32 #define MOVING_FORWARD 1
hankzhang 7:155d5b6a416f 33 #define MOVING_BACKWARD 2
hankzhang 7:155d5b6a416f 34 #define STOP 0
bbw 6:a9cc2c424cf9 35
hankzhang 7:155d5b6a416f 36 //---------------------------------------------------
hankzhang 2:f48b0967b6cc 37 DigitalOut led1(PC_13);
techneo 0:217105958c2d 38
hankzhang 3:30d61fa10b98 39 //Serial pc(PB_10,PB_11);
hankzhang 3:30d61fa10b98 40
bbw 8:611fef4d4b5d 41 //UARTSerial *_serial;
bbw 1:0fe432e5dfc4 42
hankzhang 3:30d61fa10b98 43 UARTSerial debug_uart(PB_10, PB_11, 115200);
hankzhang 3:30d61fa10b98 44 UARTSerial wifi_uart(PA_2, PA_3, 115200);
hankzhang 3:30d61fa10b98 45
bbw 8:611fef4d4b5d 46 //Serial debug_uart(PB_10, PB_11, 115200);
bbw 8:611fef4d4b5d 47 //Serial wifi_uart(PA_2, PA_3, 115200);
bbw 8:611fef4d4b5d 48
bbw 8:611fef4d4b5d 49 InterruptIn DebugKey(PA_12);
bbw 8:611fef4d4b5d 50 volatile bool button1_pressed = false; // Used in the main loop
bbw 8:611fef4d4b5d 51 volatile bool button1_enabled = true; // Used for debouncing
bbw 8:611fef4d4b5d 52 Timeout button1_timeout; // Used for debouncing
bbw 8:611fef4d4b5d 53
bbw 8:611fef4d4b5d 54 // Enables button when bouncing is over
bbw 8:611fef4d4b5d 55 void button1_enabled_cb(void)
bbw 8:611fef4d4b5d 56 {
bbw 8:611fef4d4b5d 57 button1_enabled = true;
bbw 8:611fef4d4b5d 58 }
bbw 8:611fef4d4b5d 59
bbw 8:611fef4d4b5d 60 // ISR handling button pressed event
bbw 8:611fef4d4b5d 61 void button1_onpressed_cb(void)
bbw 8:611fef4d4b5d 62 {
bbw 8:611fef4d4b5d 63 if (button1_enabled) { // Disabled while the button is bouncing
bbw 8:611fef4d4b5d 64 button1_enabled = false;
bbw 8:611fef4d4b5d 65 button1_pressed = true; // To be read by the main loop
bbw 8:611fef4d4b5d 66 button1_timeout.attach(callback(button1_enabled_cb), 0.3); // Debounce time 300 ms
bbw 8:611fef4d4b5d 67 }
bbw 8:611fef4d4b5d 68 }
bbw 8:611fef4d4b5d 69
bbw 8:611fef4d4b5d 70
hankzhang 4:864bb8bde75c 71 //Serial wifi_uart(PA_2, PA_3, 115200);
hankzhang 4:864bb8bde75c 72 //Serial debug_uart(PB_10, PB_11, 115200);
hankzhang 4:864bb8bde75c 73
hankzhang 4:864bb8bde75c 74 char rxBuf[32];
hankzhang 4:864bb8bde75c 75 char wifi_rxBuf[32]; //receive msg from xiaomi cloud
hankzhang 4:864bb8bde75c 76 short g_isCloud = 0; //flag for connected xiaomi cloud
hankzhang 4:864bb8bde75c 77
hankzhang 4:864bb8bde75c 78 //char set_property[] = {"down set_properties "}
hankzhang 4:864bb8bde75c 79 //char get_property[] = {"down get_properties "}
hankzhang 3:30d61fa10b98 80 int i = 0;
hankzhang 7:155d5b6a416f 81 //---------------------------------------------------
hankzhang 3:30d61fa10b98 82
hankzhang 3:30d61fa10b98 83 ATCmdParser *_parser;
hankzhang 7:155d5b6a416f 84 void sensor_capture_cb(void){
bbw 8:611fef4d4b5d 85 sensor_cnt++;
bbw 8:611fef4d4b5d 86 if(open_flag){
hankzhang 7:155d5b6a416f 87 cur_cnt++;
bbw 8:611fef4d4b5d 88 }
bbw 8:611fef4d4b5d 89 if(close_flag){
bbw 8:611fef4d4b5d 90 if(cur_cnt>0){
bbw 8:611fef4d4b5d 91 cur_cnt--;
bbw 8:611fef4d4b5d 92 }
bbw 8:611fef4d4b5d 93 }
hankzhang 7:155d5b6a416f 94 }
hankzhang 7:155d5b6a416f 95
hankzhang 7:155d5b6a416f 96 void Power_thread(){/*detect current*/
bbw 8:611fef4d4b5d 97 char len[50];
bbw 8:611fef4d4b5d 98 char i = 0;
hankzhang 7:155d5b6a416f 99 while(true){
bbw 8:611fef4d4b5d 100 Thread::wait(200); /*unit millisec*/
hankzhang 7:155d5b6a416f 101 sense_value = SensorCurrent.read();
hankzhang 7:155d5b6a416f 102 if((sense_value>0.5)&&sensor_flag){
bbw 8:611fef4d4b5d 103 sprintf(len, "Power_thread: sense_value = %0.4f > 0.5 \r\n", sense_value);
bbw 8:611fef4d4b5d 104 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 105 i++;
bbw 8:611fef4d4b5d 106 if(i>1){
bbw 8:611fef4d4b5d 107 ov_flag = 1;
bbw 8:611fef4d4b5d 108 }
bbw 8:611fef4d4b5d 109 }else{
bbw 8:611fef4d4b5d 110 i = 0;
bbw 8:611fef4d4b5d 111 }
bbw 8:611fef4d4b5d 112
hankzhang 7:155d5b6a416f 113 }
hankzhang 7:155d5b6a416f 114 }
hankzhang 7:155d5b6a416f 115
bbw 8:611fef4d4b5d 116 void Motor1_thread(){
bbw 8:611fef4d4b5d 117 char len[50];
bbw 8:611fef4d4b5d 118 while(true){
bbw 8:611fef4d4b5d 119 Thread::wait(300); /*unit millisec*/
bbw 8:611fef4d4b5d 120 if(!init_flag){
bbw 8:611fef4d4b5d 121 while(1){
bbw 8:611fef4d4b5d 122 if(motor2_ready_flag){break;}else{
bbw 8:611fef4d4b5d 123 wait(1);
bbw 8:611fef4d4b5d 124 debug_uart.write("Motor1_thread: -------------------------------\r\n",48);
bbw 8:611fef4d4b5d 125 }
bbw 8:611fef4d4b5d 126 }
bbw 8:611fef4d4b5d 127 motor2_ready_flag = 0;
bbw 8:611fef4d4b5d 128 sensor_cnt = 0;
bbw 8:611fef4d4b5d 129 motor1_move(MOVING_FORWARD);
bbw 8:611fef4d4b5d 130 wait(1);
bbw 8:611fef4d4b5d 131 sensor_flag = 1; /*enable current monitoring*/
bbw 8:611fef4d4b5d 132 while(!ov_flag){
bbw 8:611fef4d4b5d 133 debug_uart.write("Motor1_thread: waiting for ov_flag = 1 \r\n",41);
bbw 8:611fef4d4b5d 134 wait(1);
bbw 8:611fef4d4b5d 135 }
bbw 8:611fef4d4b5d 136 motor1_move(STOP);
bbw 8:611fef4d4b5d 137 ov_flag = 0;
bbw 8:611fef4d4b5d 138 motor2_ready_flag = 0;
bbw 8:611fef4d4b5d 139 cal_cnt = sensor_cnt;
bbw 8:611fef4d4b5d 140 sprintf(len, "Motor1_thread: primary calibrated cnt is %d \r\n", cal_cnt);
bbw 8:611fef4d4b5d 141 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 142 wait(1);
bbw 8:611fef4d4b5d 143 motor1_ready_flag = 1;
bbw 8:611fef4d4b5d 144 while(1){
bbw 8:611fef4d4b5d 145 if(motor2_ready_flag){break;}else{
bbw 8:611fef4d4b5d 146 wait(1);
bbw 8:611fef4d4b5d 147 debug_uart.write("Motor1_thread: -------------------------------\r\n",48);
hankzhang 7:155d5b6a416f 148 }
bbw 8:611fef4d4b5d 149 }
bbw 8:611fef4d4b5d 150 motor2_ready_flag = 0;
bbw 8:611fef4d4b5d 151 sensor_cnt = 0;
bbw 8:611fef4d4b5d 152 motor1_move(MOVING_BACKWARD);
bbw 8:611fef4d4b5d 153 while(!ov_flag){
bbw 8:611fef4d4b5d 154 debug_uart.write("Motor1_thread: waiting for ov_flag = 1 \r\n",41);
bbw 8:611fef4d4b5d 155 wait(1);
bbw 8:611fef4d4b5d 156 }
bbw 8:611fef4d4b5d 157 motor1_move(STOP);
bbw 8:611fef4d4b5d 158 cal_cnt2 = sensor_cnt;
bbw 8:611fef4d4b5d 159 sensor_cnt = 0;
bbw 8:611fef4d4b5d 160 cal_cnt = (cal_cnt2+cal_cnt)/2;
bbw 8:611fef4d4b5d 161 sprintf(len, "Motor1_thread: final calibrated cnt is %d \r\n", cal_cnt);
bbw 8:611fef4d4b5d 162 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 163 wait(1);
bbw 8:611fef4d4b5d 164 motor1_ready_flag = 1;
bbw 8:611fef4d4b5d 165 while(!init_flag){debug_uart.write("Motor1_thread: -------------------------------\r\n",48);wait(1);}
bbw 8:611fef4d4b5d 166 }else{
bbw 8:611fef4d4b5d 167 debug_uart.write("Motor1_thread: calibration done, wait for motor2 action.\r\n", 58);
bbw 8:611fef4d4b5d 168 while(1){
bbw 8:611fef4d4b5d 169 if(motor2_ready_flag){break;}else{
bbw 8:611fef4d4b5d 170 wait(1);
bbw 8:611fef4d4b5d 171 debug_uart.write("Motor1_thread: -------------------------------\r\n",48);
bbw 8:611fef4d4b5d 172 }
bbw 8:611fef4d4b5d 173 }
bbw 8:611fef4d4b5d 174 motor2_ready_flag = 0;
bbw 8:611fef4d4b5d 175 if(open_flag){
bbw 8:611fef4d4b5d 176 motor1_move(MOVING_FORWARD);
bbw 8:611fef4d4b5d 177 while(1){
bbw 8:611fef4d4b5d 178 sprintf(len, "Motor1_thread: cur_cnt is %d \r\n", cur_cnt);
bbw 8:611fef4d4b5d 179 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 180 sprintf(len, "Motor1_thread: tar_cnt is %d \r\n", tar_cnt);
bbw 8:611fef4d4b5d 181 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 182 debug_uart.write("Motor1_thread: **************************** \r\n", 46);
bbw 8:611fef4d4b5d 183 wait(1);
bbw 8:611fef4d4b5d 184 if(cur_cnt>=tar_cnt){
bbw 8:611fef4d4b5d 185 break;
bbw 8:611fef4d4b5d 186 }
bbw 8:611fef4d4b5d 187 if(ov_flag){
bbw 8:611fef4d4b5d 188 break;
bbw 8:611fef4d4b5d 189 }
bbw 8:611fef4d4b5d 190 }
bbw 8:611fef4d4b5d 191 }
bbw 8:611fef4d4b5d 192 if(close_flag){
bbw 8:611fef4d4b5d 193 motor1_move(MOVING_BACKWARD);
bbw 8:611fef4d4b5d 194 while(1){
bbw 8:611fef4d4b5d 195 sprintf(len, "Motor1_thread: cur_cnt is %d \r\n", cur_cnt);
bbw 8:611fef4d4b5d 196 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 197 sprintf(len, "Motor1_thread: tar_cnt is %d \r\n", tar_cnt);
bbw 8:611fef4d4b5d 198 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 199 debug_uart.write("Motor1_thread: **************************** \r\n", 46);
bbw 8:611fef4d4b5d 200 wait(1);
bbw 8:611fef4d4b5d 201 if(cur_cnt<=tar_cnt){
bbw 8:611fef4d4b5d 202 break;
bbw 8:611fef4d4b5d 203 }
bbw 8:611fef4d4b5d 204 if(ov_flag){
bbw 8:611fef4d4b5d 205 break;
bbw 8:611fef4d4b5d 206 }
bbw 8:611fef4d4b5d 207 }
bbw 8:611fef4d4b5d 208 }
bbw 8:611fef4d4b5d 209 motor1_move(STOP);
bbw 8:611fef4d4b5d 210 if(!ov_flag){
bbw 8:611fef4d4b5d 211 cur_cnt = tar_cnt;
bbw 8:611fef4d4b5d 212 }else{
bbw 8:611fef4d4b5d 213 if(open_flag){cur_cnt = 90;}
bbw 8:611fef4d4b5d 214 if(close_flag){cur_cnt = 0;}
bbw 8:611fef4d4b5d 215 }
bbw 8:611fef4d4b5d 216 ov_flag = 0;
bbw 8:611fef4d4b5d 217 motor1_ready_flag = 1;
bbw 8:611fef4d4b5d 218 }
bbw 8:611fef4d4b5d 219 }
hankzhang 7:155d5b6a416f 220 }
hankzhang 7:155d5b6a416f 221
bbw 8:611fef4d4b5d 222 void Motor2_thread(){
bbw 8:611fef4d4b5d 223 uint8_t sta1,sta2;
bbw 8:611fef4d4b5d 224 uint8_t i;
bbw 8:611fef4d4b5d 225 DigitalIn Stopper1(PA_13);
bbw 8:611fef4d4b5d 226 DigitalIn Stopper2(PA_15);
bbw 8:611fef4d4b5d 227 char len[50];
bbw 8:611fef4d4b5d 228 while(true){
bbw 8:611fef4d4b5d 229 Thread::wait(300); /*unit millisec*/
bbw 8:611fef4d4b5d 230 if(!init_flag){
bbw 8:611fef4d4b5d 231 wait(1);
bbw 8:611fef4d4b5d 232 debug_uart.write("Motor2_thread: motor2 move up\r\n", 31);
bbw 8:611fef4d4b5d 233 motor2_move(MOVING_UP);
bbw 8:611fef4d4b5d 234 while(Stopper1){;}
bbw 8:611fef4d4b5d 235 motor2_move(STOP);
bbw 8:611fef4d4b5d 236 debug_uart.write("Motor2_thread: Up stopper triggered \r\n",38);
bbw 8:611fef4d4b5d 237 motor2_ready_flag = 1;
bbw 8:611fef4d4b5d 238 wait(1);
bbw 8:611fef4d4b5d 239 while(1){
bbw 8:611fef4d4b5d 240 if(motor1_ready_flag){break;}else{
bbw 8:611fef4d4b5d 241 wait(1);debug_uart.write("Motor2_thread: --------------------------------- \r\n",51);
bbw 8:611fef4d4b5d 242 }
bbw 8:611fef4d4b5d 243 }
bbw 8:611fef4d4b5d 244 motor1_ready_flag = 0;
bbw 8:611fef4d4b5d 245 motor2_move(MOVING_DOWN);
bbw 8:611fef4d4b5d 246 while(Stopper2){;}
bbw 8:611fef4d4b5d 247 motor2_move(STOP);
bbw 8:611fef4d4b5d 248 debug_uart.write("Motor2_thread: Down stopper triggered \r\n", 40);
bbw 8:611fef4d4b5d 249 motor2_ready_flag = 1;
bbw 8:611fef4d4b5d 250 while(1){
bbw 8:611fef4d4b5d 251 if(motor1_ready_flag){break;}else{
bbw 8:611fef4d4b5d 252 wait(1);debug_uart.write("Motor2_thread: --------------------------------- \r\n",51);
hankzhang 7:155d5b6a416f 253 }
bbw 8:611fef4d4b5d 254 }
bbw 8:611fef4d4b5d 255 motor1_ready_flag = 0;
bbw 8:611fef4d4b5d 256 debug_uart.write("Motor2_thread: motor2 move to center\r\n",38);
bbw 8:611fef4d4b5d 257 ov_flag = 0;
bbw 8:611fef4d4b5d 258 ready_flag = 1;
bbw 8:611fef4d4b5d 259 motor2_move(MOVING_UP);
bbw 8:611fef4d4b5d 260 wait(1.6);
bbw 8:611fef4d4b5d 261 motor2_move(STOP);
bbw 8:611fef4d4b5d 262 ready_flag = 0;
bbw 8:611fef4d4b5d 263 debug_uart.write("Motor2_thread: motor2 thread done\r\n",35);
bbw 8:611fef4d4b5d 264 sprintf(len, "Main_thread: mean current is =%2.4f \r\n", m_val);
bbw 8:611fef4d4b5d 265 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 266 cur_cnt = 0;
bbw 8:611fef4d4b5d 267 init_flag = 1;
bbw 8:611fef4d4b5d 268 }else{
bbw 8:611fef4d4b5d 269 debug_uart.write("Motor2_thread: calibration done.wait for open/close flag\r\n", 58);
bbw 8:611fef4d4b5d 270 while(1){
bbw 8:611fef4d4b5d 271 if(open_flag){break;}
bbw 8:611fef4d4b5d 272 if(close_flag){break;}
bbw 8:611fef4d4b5d 273 wait(1);
bbw 8:611fef4d4b5d 274 debug_uart.write("Motor2_thread: ------------command?------------- \r\n", 51);
bbw 8:611fef4d4b5d 275 }
bbw 8:611fef4d4b5d 276 if(open_flag){
bbw 8:611fef4d4b5d 277 debug_uart.write("Motor2_thread: --------------open--------------- \r\n", 51);
bbw 8:611fef4d4b5d 278 motor2_move(MOVING_UP);
bbw 8:611fef4d4b5d 279 while(Stopper1){;}
bbw 8:611fef4d4b5d 280 motor2_move(STOP);
bbw 8:611fef4d4b5d 281 motor2_ready_flag = 1;
bbw 8:611fef4d4b5d 282 }
bbw 8:611fef4d4b5d 283 if(close_flag){
bbw 8:611fef4d4b5d 284 debug_uart.write("Motor2_thread: -------------close-------------- \r\n", 50);
bbw 8:611fef4d4b5d 285 motor2_move(MOVING_DOWN);
bbw 8:611fef4d4b5d 286 while(1){
bbw 8:611fef4d4b5d 287 if(!Stopper2){i++;};
bbw 8:611fef4d4b5d 288 if(i>20){break;}
bbw 8:611fef4d4b5d 289 }
bbw 8:611fef4d4b5d 290 i = 0;
bbw 8:611fef4d4b5d 291 motor2_move(STOP);
bbw 8:611fef4d4b5d 292 motor2_ready_flag = 1;
bbw 8:611fef4d4b5d 293 }
bbw 8:611fef4d4b5d 294 while(1){
bbw 8:611fef4d4b5d 295 if(motor1_ready_flag){break;}else{
bbw 8:611fef4d4b5d 296 wait(1);
bbw 8:611fef4d4b5d 297 debug_uart.write("Motor2_thread: --------------------------------- \r\n", 51);
bbw 8:611fef4d4b5d 298 }
bbw 8:611fef4d4b5d 299 }
bbw 8:611fef4d4b5d 300 motor1_ready_flag = 0;
bbw 8:611fef4d4b5d 301 debug_uart.write("Motor2_thread: motor2 move to center\r\n", 38);
bbw 8:611fef4d4b5d 302 wait(1);
bbw 8:611fef4d4b5d 303 ready_flag = 1;
bbw 8:611fef4d4b5d 304 if(open_flag){
bbw 8:611fef4d4b5d 305 motor2_move(MOVING_DOWN);
bbw 8:611fef4d4b5d 306 }
bbw 8:611fef4d4b5d 307 if(close_flag){
bbw 8:611fef4d4b5d 308 motor2_move(MOVING_UP);
bbw 8:611fef4d4b5d 309 }
bbw 8:611fef4d4b5d 310 wait(1.6);
bbw 8:611fef4d4b5d 311 motor2_move(STOP);
bbw 8:611fef4d4b5d 312 ready_flag = 0;
bbw 8:611fef4d4b5d 313 debug_uart.write("Motor2_thread: motor2 thread done\r\n", 35);
bbw 8:611fef4d4b5d 314 pre_sensor_cnt = sensor_cnt;
bbw 8:611fef4d4b5d 315 open_flag = 0;
bbw 8:611fef4d4b5d 316 close_flag = 0;
hankzhang 7:155d5b6a416f 317 }
bbw 8:611fef4d4b5d 318 }
hankzhang 7:155d5b6a416f 319 }
hankzhang 7:155d5b6a416f 320
hankzhang 7:155d5b6a416f 321
hankzhang 4:864bb8bde75c 322
hankzhang 4:864bb8bde75c 323 void led1_thread() {
hankzhang 4:864bb8bde75c 324 int length;
hankzhang 4:864bb8bde75c 325 char len[20];
hankzhang 4:864bb8bde75c 326 char l;
hankzhang 4:864bb8bde75c 327 int position = 0;
hankzhang 4:864bb8bde75c 328 int error = 0;
hankzhang 4:864bb8bde75c 329
hankzhang 4:864bb8bde75c 330 while (true)
hankzhang 4:864bb8bde75c 331 {
bbw 8:611fef4d4b5d 332 wifi_uart.write("get_down\r\n", 10);
hankzhang 4:864bb8bde75c 333 if(wifi_uart.readable())
hankzhang 4:864bb8bde75c 334 {
hankzhang 4:864bb8bde75c 335 length = wifi_uart.read(wifi_rxBuf, sizeof(wifi_rxBuf));
hankzhang 4:864bb8bde75c 336 if(!(strncmp(wifi_rxBuf,"down none",9)))
hankzhang 4:864bb8bde75c 337 {
hankzhang 4:864bb8bde75c 338 //if return "down none"
bbw 8:611fef4d4b5d 339 debug_uart.write("--- none\r\n",10);
hankzhang 4:864bb8bde75c 340 }
hankzhang 4:864bb8bde75c 341 else if(!(strncmp(wifi_rxBuf,"down set_properties ",20)))
hankzhang 4:864bb8bde75c 342 {
hankzhang 4:864bb8bde75c 343 //if return "down set_properties"
bbw 8:611fef4d4b5d 344 debug_uart.write("--- set:\r\n", 10);
hankzhang 4:864bb8bde75c 345 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 346
hankzhang 4:864bb8bde75c 347 //set properties
hankzhang 4:864bb8bde75c 348 if(wifi_rxBuf[22] == '7')
hankzhang 4:864bb8bde75c 349 {
bbw 8:611fef4d4b5d 350 //set target-position
bbw 8:611fef4d4b5d 351 position = atoi(&wifi_rxBuf[24]);
bbw 8:611fef4d4b5d 352 sprintf(len, "position:%d\r\n", position);
bbw 8:611fef4d4b5d 353 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 354 /*add by bob*/
bbw 8:611fef4d4b5d 355 if(position<=10){//0
bbw 8:611fef4d4b5d 356 tar_cnt = 0;
bbw 8:611fef4d4b5d 357 }else if(position<=30){//25%
bbw 8:611fef4d4b5d 358 tar_cnt = 30;
bbw 8:611fef4d4b5d 359 }else if(position<=60){//50%
bbw 8:611fef4d4b5d 360 tar_cnt = 50;
bbw 8:611fef4d4b5d 361 }else if(position<=85){//75%
bbw 8:611fef4d4b5d 362 tar_cnt = 70;
bbw 8:611fef4d4b5d 363 }else{//100%
bbw 8:611fef4d4b5d 364 tar_cnt = 90;
bbw 8:611fef4d4b5d 365 }
bbw 8:611fef4d4b5d 366 if(tar_cnt>cur_cnt){
bbw 8:611fef4d4b5d 367 open_flag = 1;
bbw 8:611fef4d4b5d 368 debug_uart.write("open flag = 1\r\n", 15);
bbw 8:611fef4d4b5d 369 }
bbw 8:611fef4d4b5d 370 if(tar_cnt<cur_cnt){
bbw 8:611fef4d4b5d 371 close_flag = 1;
bbw 8:611fef4d4b5d 372 debug_uart.write("close flag = 1\r\n", 16);
bbw 8:611fef4d4b5d 373 }
bbw 8:611fef4d4b5d 374 }
hankzhang 4:864bb8bde75c 375 //report result to cloud
bbw 8:611fef4d4b5d 376 //wifi_uart.write("result 2 7 0\r\n", 14);
bbw 8:611fef4d4b5d 377 #if 0
hankzhang 4:864bb8bde75c 378 if(wifi_uart.readable())
hankzhang 4:864bb8bde75c 379 {
bbw 8:611fef4d4b5d 380 //length = wifi_uart.read(wifi_rxBuf, sizeof(wifi_rxBuf));
bbw 8:611fef4d4b5d 381 //debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 382 }
bbw 8:611fef4d4b5d 383 #endif
hankzhang 4:864bb8bde75c 384 }
hankzhang 4:864bb8bde75c 385 else if(!(strncmp(wifi_rxBuf,"down get_properties ",20)))
hankzhang 4:864bb8bde75c 386 {
hankzhang 4:864bb8bde75c 387 //if return "down get_properties"
bbw 8:611fef4d4b5d 388 debug_uart.write("--- get:\r\n", 10);
hankzhang 4:864bb8bde75c 389 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 390
hankzhang 4:864bb8bde75c 391 //report result to cloud
hankzhang 4:864bb8bde75c 392 }
hankzhang 4:864bb8bde75c 393 else if(!(strncmp(wifi_rxBuf,"down MIIO_net_change ",21)))
hankzhang 4:864bb8bde75c 394 {
hankzhang 4:864bb8bde75c 395 //if return "down MIIO_net_change"
hankzhang 4:864bb8bde75c 396 debug_uart.write(wifi_rxBuf, length);
bbw 8:611fef4d4b5d 397 debug_uart.write("--- net:\r\n",10);
hankzhang 4:864bb8bde75c 398 if((!strncmp(&wifi_rxBuf[21], "offline", 7)))
hankzhang 4:864bb8bde75c 399 {
hankzhang 4:864bb8bde75c 400 //连接中
bbw 8:611fef4d4b5d 401 debug_uart.write("offline\r\n", 9);
hankzhang 4:864bb8bde75c 402 }
hankzhang 4:864bb8bde75c 403 else if((!strncmp(&wifi_rxBuf[21], "local", 5)))
hankzhang 4:864bb8bde75c 404 {
hankzhang 4:864bb8bde75c 405 //连上路由器但未连上服务器
bbw 8:611fef4d4b5d 406 debug_uart.write("local\r\n", 7);
hankzhang 4:864bb8bde75c 407 }
hankzhang 4:864bb8bde75c 408 else if((!strncmp(&wifi_rxBuf[21], "cloud", 5)))
hankzhang 4:864bb8bde75c 409 {
hankzhang 4:864bb8bde75c 410 //连上小米云服务器
bbw 8:611fef4d4b5d 411 debug_uart.write("cloud\r\n", 7);
hankzhang 4:864bb8bde75c 412 g_isCloud = 1;
hankzhang 4:864bb8bde75c 413 }
hankzhang 4:864bb8bde75c 414 }
hankzhang 4:864bb8bde75c 415 else
hankzhang 4:864bb8bde75c 416 {
hankzhang 4:864bb8bde75c 417 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 418 }
hankzhang 4:864bb8bde75c 419
hankzhang 4:864bb8bde75c 420 }
bbw 8:611fef4d4b5d 421 //thread_sleep_for(400);
bbw 8:611fef4d4b5d 422 wait_ms(400);
techneo 0:217105958c2d 423 }
techneo 0:217105958c2d 424 }
techneo 0:217105958c2d 425
bbw 1:0fe432e5dfc4 426
hankzhang 2:f48b0967b6cc 427 void led0_thread() {
hankzhang 3:30d61fa10b98 428 int length;
hankzhang 3:30d61fa10b98 429 while (1) {
hankzhang 3:30d61fa10b98 430 if(debug_uart.readable())
hankzhang 3:30d61fa10b98 431 {
hankzhang 3:30d61fa10b98 432 length = debug_uart.read(rxBuf, sizeof(rxBuf));
hankzhang 3:30d61fa10b98 433 debug_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 434 wifi_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 435 debug_uart.write("111\r",4);
hankzhang 3:30d61fa10b98 436 }
hankzhang 3:30d61fa10b98 437 if(wifi_uart.readable())
hankzhang 3:30d61fa10b98 438 {
hankzhang 3:30d61fa10b98 439 length = wifi_uart.read(rxBuf, sizeof(rxBuf));
hankzhang 3:30d61fa10b98 440 debug_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 441 debug_uart.write("222\r",4);
hankzhang 3:30d61fa10b98 442
hankzhang 3:30d61fa10b98 443 }
hankzhang 3:30d61fa10b98 444 wait(0.5);
bbw 1:0fe432e5dfc4 445 }
bbw 1:0fe432e5dfc4 446 }
hankzhang 3:30d61fa10b98 447
hankzhang 3:30d61fa10b98 448
bbw 6:a9cc2c424cf9 449 void motor1_move(uint8_t dir){/*main motor*/
bbw 6:a9cc2c424cf9 450 if(dir==1){/*forward*/
bbw 6:a9cc2c424cf9 451 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 452 MOTOB1 = 1;
bbw 6:a9cc2c424cf9 453 }else if(dir==2){/*backward*/
bbw 6:a9cc2c424cf9 454 MOTOA1 = 1;
bbw 6:a9cc2c424cf9 455 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 456 }else{ /*stop*/
bbw 6:a9cc2c424cf9 457 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 458 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 459 }
bbw 6:a9cc2c424cf9 460 }
bbw 6:a9cc2c424cf9 461
bbw 6:a9cc2c424cf9 462 void motor2_move(uint8_t dir){/*assistant motor*/
bbw 6:a9cc2c424cf9 463 if(dir==1){/*up*/
bbw 6:a9cc2c424cf9 464 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 465 MOTOB2 = 1;
bbw 6:a9cc2c424cf9 466 }else if(dir==2){/*down*/
bbw 6:a9cc2c424cf9 467 MOTOA2 = 1;
bbw 6:a9cc2c424cf9 468 MOTOB2 = 0;
bbw 6:a9cc2c424cf9 469 }else{ /*stop*/
bbw 6:a9cc2c424cf9 470 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 471 MOTOB2 = 0;
bbw 6:a9cc2c424cf9 472 }
bbw 6:a9cc2c424cf9 473 }
bbw 6:a9cc2c424cf9 474
hankzhang 7:155d5b6a416f 475 void system_init()
hankzhang 7:155d5b6a416f 476 {
hankzhang 7:155d5b6a416f 477
bbw 6:a9cc2c424cf9 478 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 479 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 480 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 481 MOTOB2 = 0;
bbw 8:611fef4d4b5d 482 init_flag = 1;
bbw 8:611fef4d4b5d 483 cur_cnt = 0;
bbw 8:611fef4d4b5d 484 cal_cnt = 68;
bbw 6:a9cc2c424cf9 485 motor1_ready_flag = 0;
bbw 6:a9cc2c424cf9 486 motor2_ready_flag = 0;
bbw 6:a9cc2c424cf9 487 sense_value = 0;
bbw 8:611fef4d4b5d 488 sensor_flag = 1;
bbw 6:a9cc2c424cf9 489 ready_flag = 0;
hankzhang 7:155d5b6a416f 490 debug_uart.write("*******************************\r\n",33);
hankzhang 7:155d5b6a416f 491 debug_uart.write("**********LAIWU TECH***********\r\n",33);
hankzhang 7:155d5b6a416f 492 debug_uart.write("*******************************\r\n",33);
hankzhang 7:155d5b6a416f 493 debug_uart.write("system init done, wait 3 seconds to start\r\n",43);
bbw 6:a9cc2c424cf9 494 wait(3);
hankzhang 7:155d5b6a416f 495 }
hankzhang 7:155d5b6a416f 496
hankzhang 7:155d5b6a416f 497 int main() {
hankzhang 7:155d5b6a416f 498 int length;
hankzhang 7:155d5b6a416f 499 led1 = 1;
bbw 8:611fef4d4b5d 500 char len[50];
hankzhang 7:155d5b6a416f 501
hankzhang 7:155d5b6a416f 502 debug_uart.write("hello world",11);
hankzhang 7:155d5b6a416f 503 WIFI_PWREN = 1;
hankzhang 7:155d5b6a416f 504 wait(3);
hankzhang 7:155d5b6a416f 505 system_init();
hankzhang 7:155d5b6a416f 506 InterruptIn Hall1(PA_14);
hankzhang 7:155d5b6a416f 507 //InterruptIn Hall2(PB_3);
hankzhang 7:155d5b6a416f 508 Hall1.fall(callback(sensor_capture_cb)); // Attach ISR to handle button press event
bbw 8:611fef4d4b5d 509 DebugKey.fall(callback(button1_onpressed_cb)); // Attach ISR to handle button press event
hankzhang 7:155d5b6a416f 510 //Hall2.fall(callback(sensor_capture_cb)); // Attach ISR to handle button press event
hankzhang 7:155d5b6a416f 511 debug_uart.write("Hall sensor init done\r\n", 23);
hankzhang 7:155d5b6a416f 512
hankzhang 7:155d5b6a416f 513
hankzhang 7:155d5b6a416f 514 //Thread thread0(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 515 Thread thread1(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 516 //Thread thread2(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 517
hankzhang 7:155d5b6a416f 518 Thread thread2(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 519 //debug_uart.printf("thread1~~~~~~~~~~~~~~~~\r\n");
hankzhang 7:155d5b6a416f 520 Thread thread3(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 521 //debug_uart.printf("thread2~~~~~~~~~~~~~~~~\r\n");
hankzhang 7:155d5b6a416f 522 Thread thread4(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 523 //debug_uart.printf("thread3~~~~~~~~~~~~~~~~\r\n");
bbw 8:611fef4d4b5d 524
hankzhang 7:155d5b6a416f 525 //thread0.start(led0_thread);
hankzhang 7:155d5b6a416f 526 thread1.start(led1_thread);
hankzhang 7:155d5b6a416f 527 thread2.start(Power_thread);
hankzhang 7:155d5b6a416f 528 thread3.start(Motor1_thread);
hankzhang 7:155d5b6a416f 529 thread4.start(Motor2_thread);
hankzhang 7:155d5b6a416f 530
bbw 8:611fef4d4b5d 531 debug_uart.write("four threads created\r\n",22);
bbw 8:611fef4d4b5d 532
hankzhang 7:155d5b6a416f 533 while(1)
hankzhang 7:155d5b6a416f 534 {
hankzhang 7:155d5b6a416f 535 if(g_isCloud)
hankzhang 7:155d5b6a416f 536 {
bbw 8:611fef4d4b5d 537 debug_uart.write("connected\r\n",11);
hankzhang 7:155d5b6a416f 538 }
hankzhang 7:155d5b6a416f 539 if(ready_flag){
hankzhang 7:155d5b6a416f 540 m_val += sense_value;
hankzhang 7:155d5b6a416f 541 if(sense_value>0.5){
hankzhang 7:155d5b6a416f 542 motor2_move(STOP);
hankzhang 7:155d5b6a416f 543 }
hankzhang 7:155d5b6a416f 544 }
bbw 8:611fef4d4b5d 545 if (button1_pressed) { // Set when button is pressed
bbw 8:611fef4d4b5d 546 button1_pressed = false;
bbw 8:611fef4d4b5d 547 debug_uart.write("restore wifi module\r\n",21);
bbw 8:611fef4d4b5d 548 wifi_uart.write("restore\r\n", 9);
bbw 8:611fef4d4b5d 549 }
bbw 8:611fef4d4b5d 550 if(!open_flag&&!close_flag){
bbw 8:611fef4d4b5d 551 if(sensor_cnt>(pre_sensor_cnt+5)){
bbw 8:611fef4d4b5d 552 if(cur_cnt<5){open_flag = 1;tar_cnt = 90;}else{
bbw 8:611fef4d4b5d 553 close_flag = 1;
bbw 8:611fef4d4b5d 554 tar_cnt = 0;
bbw 8:611fef4d4b5d 555 }
bbw 8:611fef4d4b5d 556 }
bbw 8:611fef4d4b5d 557 sprintf(len, "main_thread: sensor_cnt = %d. \r\n", sensor_cnt);
bbw 8:611fef4d4b5d 558 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 559 sprintf(len, "main_thread: pre_sensor_cnt = %d. \r\n", pre_sensor_cnt);
bbw 8:611fef4d4b5d 560 debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 561 pre_sensor_cnt = sensor_cnt;
bbw 8:611fef4d4b5d 562 }
hankzhang 7:155d5b6a416f 563 wait(3);
bbw 8:611fef4d4b5d 564
bbw 8:611fef4d4b5d 565 //sprintf(len, "main_thread: current sense value is %.4f. \r\n", sense_value);
bbw 8:611fef4d4b5d 566 //debug_uart.write(len, sizeof(len));
bbw 8:611fef4d4b5d 567
bbw 8:611fef4d4b5d 568
hankzhang 7:155d5b6a416f 569 }
hankzhang 2:f48b0967b6cc 570 }