for bob

Dependencies:   mbed-STM32F103C8T6_new

Committer:
hankzhang
Date:
Tue May 19 11:55:57 2020 +0000
Revision:
11:9b630cb10423
Parent:
10:1dbe0c851c2e
Child:
12:1a79d1635720
power on initialization

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