for bob

Dependencies:   mbed-STM32F103C8T6_new

Committer:
hankzhang
Date:
Fri Jul 31 10:36:13 2020 +0000
Revision:
13:6fac0b6a946f
Parent:
12:1a79d1635720
Child:
14:6aebe60d1989
working one before

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