update

Dependencies:   mbed-STM32F103C8T6_new

Committer:
hankzhang
Date:
Tue Apr 21 11:54:09 2020 +0000
Revision:
7:155d5b6a416f
Parent:
6:a9cc2c424cf9
integrate bob's commits

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 6:a9cc2c424cf9 21 uint8_t sensor_cnt,cal_cnt, cal_cnt2, cur_cnt, tar_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
hankzhang 3:30d61fa10b98 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
hankzhang 4:864bb8bde75c 46 //Serial wifi_uart(PA_2, PA_3, 115200);
hankzhang 4:864bb8bde75c 47 //Serial debug_uart(PB_10, PB_11, 115200);
hankzhang 4:864bb8bde75c 48
hankzhang 4:864bb8bde75c 49 char rxBuf[32];
hankzhang 4:864bb8bde75c 50 char wifi_rxBuf[32]; //receive msg from xiaomi cloud
hankzhang 4:864bb8bde75c 51 short g_isCloud = 0; //flag for connected xiaomi cloud
hankzhang 4:864bb8bde75c 52
hankzhang 4:864bb8bde75c 53 //char set_property[] = {"down set_properties "}
hankzhang 4:864bb8bde75c 54 //char get_property[] = {"down get_properties "}
hankzhang 3:30d61fa10b98 55 int i = 0;
hankzhang 7:155d5b6a416f 56 //---------------------------------------------------
hankzhang 3:30d61fa10b98 57
hankzhang 3:30d61fa10b98 58 ATCmdParser *_parser;
hankzhang 7:155d5b6a416f 59 void sensor_capture_cb(void){
hankzhang 7:155d5b6a416f 60 sensor_cnt++;
hankzhang 7:155d5b6a416f 61 cur_cnt++;
hankzhang 7:155d5b6a416f 62 }
hankzhang 7:155d5b6a416f 63
hankzhang 7:155d5b6a416f 64 void Power_thread(){/*detect current*/
hankzhang 7:155d5b6a416f 65 char len[50];
hankzhang 7:155d5b6a416f 66 while(true){
hankzhang 7:155d5b6a416f 67 Thread::wait(500); /*unit millisec*/
hankzhang 7:155d5b6a416f 68 sense_value = SensorCurrent.read();
hankzhang 7:155d5b6a416f 69 if((sense_value>0.5)&&sensor_flag){
hankzhang 7:155d5b6a416f 70 sprintf(len, "Power_thread: sense_value = %0.4f > 0.5 \r\n", sense_value);
hankzhang 7:155d5b6a416f 71 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 72 ov_flag = 1;
hankzhang 7:155d5b6a416f 73 }
hankzhang 7:155d5b6a416f 74 }
hankzhang 7:155d5b6a416f 75 }
hankzhang 7:155d5b6a416f 76
hankzhang 7:155d5b6a416f 77 void Motor1_thread()
hankzhang 7:155d5b6a416f 78 {
hankzhang 7:155d5b6a416f 79 /*detect current*/
hankzhang 7:155d5b6a416f 80 char len[50];
hankzhang 7:155d5b6a416f 81 while(true){
hankzhang 7:155d5b6a416f 82 Thread::wait(300); /*unit millisec*/
hankzhang 7:155d5b6a416f 83 if(!init_flag){
hankzhang 7:155d5b6a416f 84 while(1){
hankzhang 7:155d5b6a416f 85 if(motor2_ready_flag){break;}else{
hankzhang 7:155d5b6a416f 86 wait(1);
hankzhang 7:155d5b6a416f 87 debug_uart.write("Motor1_thread: -------------------------------\r\n",48);
hankzhang 7:155d5b6a416f 88 }
hankzhang 7:155d5b6a416f 89 }
hankzhang 7:155d5b6a416f 90 motor2_ready_flag = 0;
hankzhang 7:155d5b6a416f 91 sensor_cnt = 0;
hankzhang 7:155d5b6a416f 92 motor1_move(MOVING_FORWARD);
hankzhang 7:155d5b6a416f 93 wait(1);
hankzhang 7:155d5b6a416f 94 sensor_flag = 1; /*enable current monitoring*/
hankzhang 7:155d5b6a416f 95 while(!ov_flag)
hankzhang 7:155d5b6a416f 96 {
hankzhang 7:155d5b6a416f 97 debug_uart.write("Motor1_thread: waiting for ov_flag = 1 \r\n",41);
hankzhang 7:155d5b6a416f 98 wait(1);
hankzhang 7:155d5b6a416f 99 }
hankzhang 7:155d5b6a416f 100 motor1_move(STOP);
hankzhang 7:155d5b6a416f 101 //debug_uart.printf("overcurrent detected \r\n");
hankzhang 7:155d5b6a416f 102 ov_flag = 0;
hankzhang 7:155d5b6a416f 103 motor2_ready_flag = 0;
hankzhang 7:155d5b6a416f 104 cal_cnt = sensor_cnt;
hankzhang 7:155d5b6a416f 105 //debug_uart.printf("calibration done \r\n");
hankzhang 7:155d5b6a416f 106 sprintf(len, "Motor1_thread: calibrated cnt is %d \r\n", cal_cnt);
hankzhang 7:155d5b6a416f 107 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 108 wait(1);
hankzhang 7:155d5b6a416f 109 //debug_uart.printf("back to origianl position, motor1_ready_flag = 1\r\n");
hankzhang 7:155d5b6a416f 110 motor1_ready_flag = 1;
hankzhang 7:155d5b6a416f 111 while(1){
hankzhang 7:155d5b6a416f 112 if(motor2_ready_flag)
hankzhang 7:155d5b6a416f 113 {
hankzhang 7:155d5b6a416f 114 break;
hankzhang 7:155d5b6a416f 115 }
hankzhang 7:155d5b6a416f 116 else
hankzhang 7:155d5b6a416f 117 {
hankzhang 7:155d5b6a416f 118 wait(1);
hankzhang 7:155d5b6a416f 119 debug_uart.write("Motor1_thread: -------------------------------\r\n",48);
hankzhang 7:155d5b6a416f 120 }
hankzhang 7:155d5b6a416f 121 }
hankzhang 7:155d5b6a416f 122 motor2_ready_flag = 0;
hankzhang 7:155d5b6a416f 123 sensor_cnt = 0;
hankzhang 7:155d5b6a416f 124 //sensor_flag = 0;
hankzhang 7:155d5b6a416f 125 motor1_move(MOVING_BACKWARD);
hankzhang 7:155d5b6a416f 126 sprintf(len, "Motor1_thread: target position is %d\r\n", cal_cnt-10);
hankzhang 7:155d5b6a416f 127 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 128 while(1){
hankzhang 7:155d5b6a416f 129 //if((sensor_cnt>(cal_cnt-5))||ov_flag){break;}else{wait_ms(10);}
hankzhang 7:155d5b6a416f 130 if(sensor_cnt>(cal_cnt-5)){break;}else{wait_ms(10);}
hankzhang 7:155d5b6a416f 131 }
hankzhang 7:155d5b6a416f 132 motor1_move(STOP);
hankzhang 7:155d5b6a416f 133 #if 0
hankzhang 7:155d5b6a416f 134 if(ov_flag){
hankzhang 7:155d5b6a416f 135 debug_uart.write("Motor1_thread: over current happens\r\n",37);
hankzhang 7:155d5b6a416f 136 cal_cnt2 = sensor_cnt;
hankzhang 7:155d5b6a416f 137 sprintf(len, "Motor1_thread: cal_cnt2 = %d\r\n", cal_cnt2);
hankzhang 7:155d5b6a416f 138 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 139 sensor_cnt = 0;
hankzhang 7:155d5b6a416f 140 ov_flag = 0;
hankzhang 7:155d5b6a416f 141 }else{
hankzhang 7:155d5b6a416f 142 sprintf(len, "Motor1_thread: arrive position %d \r\n", sensor_cnt);
hankzhang 7:155d5b6a416f 143 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 144 }
hankzhang 7:155d5b6a416f 145 #endif
hankzhang 7:155d5b6a416f 146 sprintf(len, "Motor1_thread: arrive position %d \r\n", sensor_cnt);
hankzhang 7:155d5b6a416f 147 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 148 wait(1);
hankzhang 7:155d5b6a416f 149 motor1_ready_flag = 1;
hankzhang 7:155d5b6a416f 150 debug_uart.write("Motor1_thread: motor1 thread done\r\n", 35);
hankzhang 7:155d5b6a416f 151 }
hankzhang 7:155d5b6a416f 152 }
hankzhang 7:155d5b6a416f 153 }
hankzhang 7:155d5b6a416f 154
hankzhang 7:155d5b6a416f 155 void Motor2_thread()
hankzhang 7:155d5b6a416f 156 {
hankzhang 7:155d5b6a416f 157 /*detect current*/
hankzhang 7:155d5b6a416f 158 uint8_t sta1,sta2;
hankzhang 7:155d5b6a416f 159 DigitalIn Stopper1(PA_13);
hankzhang 7:155d5b6a416f 160 DigitalIn Stopper2(PA_15);
hankzhang 7:155d5b6a416f 161 char len[50];
hankzhang 7:155d5b6a416f 162
hankzhang 7:155d5b6a416f 163 while(true){
hankzhang 7:155d5b6a416f 164 Thread::wait(300); /*unit millisec*/
hankzhang 7:155d5b6a416f 165 if(!init_flag){
hankzhang 7:155d5b6a416f 166 wait(1);
hankzhang 7:155d5b6a416f 167 debug_uart.write("Motor2_thread: motor2 move up\r\n", 31);
hankzhang 7:155d5b6a416f 168 motor2_move(MOVING_UP);
hankzhang 7:155d5b6a416f 169 while(Stopper1){;}
hankzhang 7:155d5b6a416f 170 motor2_move(STOP);
hankzhang 7:155d5b6a416f 171 debug_uart.write("Motor2_thread: Up stopper triggered \r\n",38);
hankzhang 7:155d5b6a416f 172 motor2_ready_flag = 1;
hankzhang 7:155d5b6a416f 173 wait(1);
hankzhang 7:155d5b6a416f 174 while(1){
hankzhang 7:155d5b6a416f 175 if(motor1_ready_flag){break;}else{
hankzhang 7:155d5b6a416f 176 wait(1);debug_uart.write("Motor2_thread: --------------------------------- \r\n",51);
hankzhang 7:155d5b6a416f 177 }
hankzhang 7:155d5b6a416f 178 }
hankzhang 7:155d5b6a416f 179 motor1_ready_flag = 0;
hankzhang 7:155d5b6a416f 180 motor2_move(MOVING_DOWN);
hankzhang 7:155d5b6a416f 181 while(Stopper2){;}
hankzhang 7:155d5b6a416f 182 motor2_move(STOP);
hankzhang 7:155d5b6a416f 183 debug_uart.write("Motor2_thread: Down stopper triggered \r\n", 40);
hankzhang 7:155d5b6a416f 184 motor2_ready_flag = 1;
hankzhang 7:155d5b6a416f 185 while(1){
hankzhang 7:155d5b6a416f 186 if(motor1_ready_flag){break;}else{
hankzhang 7:155d5b6a416f 187 wait(1);debug_uart.write("Motor2_thread: --------------------------------- \r\n",51);
hankzhang 7:155d5b6a416f 188 }
hankzhang 7:155d5b6a416f 189 }
hankzhang 7:155d5b6a416f 190 debug_uart.write("Motor2_thread: motor2 move to center\r\n",38);
hankzhang 7:155d5b6a416f 191 ov_flag = 0;
hankzhang 7:155d5b6a416f 192 ready_flag = 1;
hankzhang 7:155d5b6a416f 193 motor2_move(MOVING_UP);
hankzhang 7:155d5b6a416f 194 wait(2.3);
hankzhang 7:155d5b6a416f 195 motor2_move(STOP);
hankzhang 7:155d5b6a416f 196 ready_flag = 0;
hankzhang 7:155d5b6a416f 197 debug_uart.write("Motor2_thread: motor2 thread done\r\n",35);
hankzhang 7:155d5b6a416f 198 sprintf(len, "Main_thread: mean current is =%2.4f \r\n", m_val);
hankzhang 7:155d5b6a416f 199 debug_uart.write(len, sizeof(len));
hankzhang 7:155d5b6a416f 200 init_flag = 1;
hankzhang 7:155d5b6a416f 201 }
hankzhang 7:155d5b6a416f 202 }
hankzhang 7:155d5b6a416f 203 }
hankzhang 7:155d5b6a416f 204
hankzhang 7:155d5b6a416f 205
hankzhang 4:864bb8bde75c 206
hankzhang 4:864bb8bde75c 207 void led1_thread() {
hankzhang 4:864bb8bde75c 208 int length;
hankzhang 4:864bb8bde75c 209 char len[20];
hankzhang 4:864bb8bde75c 210 char l;
hankzhang 4:864bb8bde75c 211 int position = 0;
hankzhang 4:864bb8bde75c 212 int error = 0;
hankzhang 4:864bb8bde75c 213
hankzhang 4:864bb8bde75c 214 while (true)
hankzhang 4:864bb8bde75c 215 {
hankzhang 4:864bb8bde75c 216 wifi_uart.write("get_down\r", 9);
hankzhang 4:864bb8bde75c 217 if(wifi_uart.readable())
hankzhang 4:864bb8bde75c 218 {
hankzhang 4:864bb8bde75c 219 length = wifi_uart.read(wifi_rxBuf, sizeof(wifi_rxBuf));
hankzhang 4:864bb8bde75c 220 if(!(strncmp(wifi_rxBuf,"down none",9)))
hankzhang 4:864bb8bde75c 221 {
hankzhang 4:864bb8bde75c 222 //if return "down none"
hankzhang 4:864bb8bde75c 223 debug_uart.write("--- none",8);
hankzhang 4:864bb8bde75c 224 }
hankzhang 4:864bb8bde75c 225 else if(!(strncmp(wifi_rxBuf,"down set_properties ",20)))
hankzhang 4:864bb8bde75c 226 {
hankzhang 4:864bb8bde75c 227 //if return "down set_properties"
hankzhang 4:864bb8bde75c 228 debug_uart.write("--- set:", 8);
hankzhang 4:864bb8bde75c 229 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 230
hankzhang 4:864bb8bde75c 231 //set properties
hankzhang 4:864bb8bde75c 232 if(wifi_rxBuf[22] == '7')
hankzhang 4:864bb8bde75c 233 {
hankzhang 4:864bb8bde75c 234 //set target-position
hankzhang 4:864bb8bde75c 235 position = atoi(&wifi_rxBuf[24]);
hankzhang 4:864bb8bde75c 236 sprintf(len, "position:%d", position);
hankzhang 4:864bb8bde75c 237 debug_uart.write(len, sizeof(len));
hankzhang 4:864bb8bde75c 238 }
hankzhang 4:864bb8bde75c 239
hankzhang 4:864bb8bde75c 240 //report result to cloud
hankzhang 4:864bb8bde75c 241 wifi_uart.write("result 2 7 0\r", 13);
hankzhang 4:864bb8bde75c 242 if(wifi_uart.readable())
hankzhang 4:864bb8bde75c 243 {
hankzhang 4:864bb8bde75c 244 length = wifi_uart.read(wifi_rxBuf, sizeof(wifi_rxBuf));
hankzhang 4:864bb8bde75c 245 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 246 }
hankzhang 4:864bb8bde75c 247 }
hankzhang 4:864bb8bde75c 248 else if(!(strncmp(wifi_rxBuf,"down get_properties ",20)))
hankzhang 4:864bb8bde75c 249 {
hankzhang 4:864bb8bde75c 250 //if return "down get_properties"
hankzhang 4:864bb8bde75c 251 debug_uart.write("--- get:", 8);
hankzhang 4:864bb8bde75c 252 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 253
hankzhang 4:864bb8bde75c 254 //report result to cloud
hankzhang 4:864bb8bde75c 255 }
hankzhang 4:864bb8bde75c 256 else if(!(strncmp(wifi_rxBuf,"down MIIO_net_change ",21)))
hankzhang 4:864bb8bde75c 257 {
hankzhang 4:864bb8bde75c 258 //if return "down MIIO_net_change"
hankzhang 4:864bb8bde75c 259 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 260 debug_uart.write("--- net:",8);
hankzhang 4:864bb8bde75c 261 if((!strncmp(&wifi_rxBuf[21], "offline", 7)))
hankzhang 4:864bb8bde75c 262 {
hankzhang 4:864bb8bde75c 263 //连接中
hankzhang 4:864bb8bde75c 264 debug_uart.write("offline\r", 8);
hankzhang 4:864bb8bde75c 265 }
hankzhang 4:864bb8bde75c 266 else if((!strncmp(&wifi_rxBuf[21], "local", 5)))
hankzhang 4:864bb8bde75c 267 {
hankzhang 4:864bb8bde75c 268 //连上路由器但未连上服务器
hankzhang 4:864bb8bde75c 269 debug_uart.write("local\r", 6);
hankzhang 4:864bb8bde75c 270 }
hankzhang 4:864bb8bde75c 271 else if((!strncmp(&wifi_rxBuf[21], "cloud", 5)))
hankzhang 4:864bb8bde75c 272 {
hankzhang 4:864bb8bde75c 273 //连上小米云服务器
hankzhang 4:864bb8bde75c 274 debug_uart.write("cloud\r", 6);
hankzhang 4:864bb8bde75c 275 g_isCloud = 1;
hankzhang 4:864bb8bde75c 276 }
hankzhang 4:864bb8bde75c 277 }
hankzhang 4:864bb8bde75c 278 else
hankzhang 4:864bb8bde75c 279 {
hankzhang 4:864bb8bde75c 280 debug_uart.write(wifi_rxBuf, length);
hankzhang 4:864bb8bde75c 281 }
hankzhang 4:864bb8bde75c 282
hankzhang 4:864bb8bde75c 283 }
hankzhang 4:864bb8bde75c 284 thread_sleep_for(400);
techneo 0:217105958c2d 285 }
techneo 0:217105958c2d 286 }
techneo 0:217105958c2d 287
bbw 1:0fe432e5dfc4 288
hankzhang 2:f48b0967b6cc 289 void led0_thread() {
hankzhang 3:30d61fa10b98 290 int length;
hankzhang 3:30d61fa10b98 291 while (1) {
hankzhang 3:30d61fa10b98 292 if(debug_uart.readable())
hankzhang 3:30d61fa10b98 293 {
hankzhang 3:30d61fa10b98 294 length = debug_uart.read(rxBuf, sizeof(rxBuf));
hankzhang 3:30d61fa10b98 295 debug_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 296 wifi_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 297 debug_uart.write("111\r",4);
hankzhang 3:30d61fa10b98 298 }
hankzhang 3:30d61fa10b98 299 if(wifi_uart.readable())
hankzhang 3:30d61fa10b98 300 {
hankzhang 3:30d61fa10b98 301 length = wifi_uart.read(rxBuf, sizeof(rxBuf));
hankzhang 3:30d61fa10b98 302 debug_uart.write(rxBuf, length);
hankzhang 3:30d61fa10b98 303 debug_uart.write("222\r",4);
hankzhang 3:30d61fa10b98 304
hankzhang 3:30d61fa10b98 305 }
hankzhang 3:30d61fa10b98 306 wait(0.5);
bbw 1:0fe432e5dfc4 307 }
bbw 1:0fe432e5dfc4 308 }
hankzhang 3:30d61fa10b98 309
hankzhang 3:30d61fa10b98 310
bbw 6:a9cc2c424cf9 311 void motor1_move(uint8_t dir){/*main motor*/
bbw 6:a9cc2c424cf9 312 if(dir==1){/*forward*/
bbw 6:a9cc2c424cf9 313 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 314 MOTOB1 = 1;
bbw 6:a9cc2c424cf9 315 }else if(dir==2){/*backward*/
bbw 6:a9cc2c424cf9 316 MOTOA1 = 1;
bbw 6:a9cc2c424cf9 317 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 318 }else{ /*stop*/
bbw 6:a9cc2c424cf9 319 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 320 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 321 }
bbw 6:a9cc2c424cf9 322 }
bbw 6:a9cc2c424cf9 323
bbw 6:a9cc2c424cf9 324 void motor2_move(uint8_t dir){/*assistant motor*/
bbw 6:a9cc2c424cf9 325 if(dir==1){/*up*/
bbw 6:a9cc2c424cf9 326 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 327 MOTOB2 = 1;
bbw 6:a9cc2c424cf9 328 }else if(dir==2){/*down*/
bbw 6:a9cc2c424cf9 329 MOTOA2 = 1;
bbw 6:a9cc2c424cf9 330 MOTOB2 = 0;
bbw 6:a9cc2c424cf9 331 }else{ /*stop*/
bbw 6:a9cc2c424cf9 332 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 333 MOTOB2 = 0;
bbw 6:a9cc2c424cf9 334 }
bbw 6:a9cc2c424cf9 335 }
bbw 6:a9cc2c424cf9 336
hankzhang 7:155d5b6a416f 337 void system_init()
hankzhang 7:155d5b6a416f 338 {
hankzhang 7:155d5b6a416f 339
bbw 6:a9cc2c424cf9 340 MOTOA1 = 0;
bbw 6:a9cc2c424cf9 341 MOTOB1 = 0;
bbw 6:a9cc2c424cf9 342 MOTOA2 = 0;
bbw 6:a9cc2c424cf9 343 MOTOB2 = 0;
bbw 6:a9cc2c424cf9 344 init_flag = 0;
bbw 6:a9cc2c424cf9 345 motor1_ready_flag = 0;
bbw 6:a9cc2c424cf9 346 motor2_ready_flag = 0;
bbw 6:a9cc2c424cf9 347 sense_value = 0;
bbw 6:a9cc2c424cf9 348 sensor_flag = 0;
bbw 6:a9cc2c424cf9 349 ready_flag = 0;
hankzhang 7:155d5b6a416f 350 debug_uart.write("*******************************\r\n",33);
hankzhang 7:155d5b6a416f 351 debug_uart.write("**********LAIWU TECH***********\r\n",33);
hankzhang 7:155d5b6a416f 352 debug_uart.write("*******************************\r\n",33);
hankzhang 7:155d5b6a416f 353 debug_uart.write("system init done, wait 3 seconds to start\r\n",43);
bbw 6:a9cc2c424cf9 354 wait(3);
hankzhang 7:155d5b6a416f 355 }
hankzhang 7:155d5b6a416f 356
hankzhang 7:155d5b6a416f 357 int main() {
hankzhang 7:155d5b6a416f 358 int length;
hankzhang 7:155d5b6a416f 359 led1 = 1;
hankzhang 7:155d5b6a416f 360
hankzhang 7:155d5b6a416f 361 debug_uart.write("hello world",11);
hankzhang 7:155d5b6a416f 362 WIFI_PWREN = 1;
hankzhang 7:155d5b6a416f 363 wait(3);
hankzhang 7:155d5b6a416f 364 system_init();
hankzhang 7:155d5b6a416f 365 InterruptIn Hall1(PA_14);
hankzhang 7:155d5b6a416f 366 //InterruptIn Hall2(PB_3);
hankzhang 7:155d5b6a416f 367 Hall1.fall(callback(sensor_capture_cb)); // Attach ISR to handle button press event
hankzhang 7:155d5b6a416f 368 //Hall2.fall(callback(sensor_capture_cb)); // Attach ISR to handle button press event
hankzhang 7:155d5b6a416f 369 debug_uart.write("Hall sensor init done\r\n", 23);
hankzhang 7:155d5b6a416f 370
hankzhang 7:155d5b6a416f 371
hankzhang 7:155d5b6a416f 372 //Thread thread0(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 373 Thread thread1(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 374 //Thread thread2(osPriorityNormal, 512, nullptr, nullptr);
hankzhang 7:155d5b6a416f 375
hankzhang 7:155d5b6a416f 376 Thread thread2(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 377 //debug_uart.printf("thread1~~~~~~~~~~~~~~~~\r\n");
hankzhang 7:155d5b6a416f 378 Thread thread3(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 379 //debug_uart.printf("thread2~~~~~~~~~~~~~~~~\r\n");
hankzhang 7:155d5b6a416f 380 Thread thread4(osPriorityNormal, 512, nullptr, nullptr); /*check the real-time current*/
hankzhang 7:155d5b6a416f 381 //debug_uart.printf("thread3~~~~~~~~~~~~~~~~\r\n");
hankzhang 7:155d5b6a416f 382
hankzhang 7:155d5b6a416f 383 debug_uart.write("four threads created\r\n",22);
hankzhang 7:155d5b6a416f 384
hankzhang 7:155d5b6a416f 385 //thread0.start(led0_thread);
hankzhang 7:155d5b6a416f 386 thread1.start(led1_thread);
hankzhang 7:155d5b6a416f 387 thread2.start(Power_thread);
hankzhang 7:155d5b6a416f 388 thread3.start(Motor1_thread);
hankzhang 7:155d5b6a416f 389 thread4.start(Motor2_thread);
hankzhang 7:155d5b6a416f 390
hankzhang 7:155d5b6a416f 391 while(1)
hankzhang 7:155d5b6a416f 392 {
hankzhang 7:155d5b6a416f 393 debug_uart.write("--main--\r\n",10);
hankzhang 7:155d5b6a416f 394 if(g_isCloud)
hankzhang 7:155d5b6a416f 395 {
hankzhang 7:155d5b6a416f 396 debug_uart.write("connect to xiaomi cloud\r\n",25);
hankzhang 7:155d5b6a416f 397 }
hankzhang 7:155d5b6a416f 398 if(ready_flag){
hankzhang 7:155d5b6a416f 399 m_val += sense_value;
hankzhang 7:155d5b6a416f 400 if(sense_value>0.5){
hankzhang 7:155d5b6a416f 401 motor2_move(STOP);
hankzhang 7:155d5b6a416f 402 }
hankzhang 7:155d5b6a416f 403 }
hankzhang 7:155d5b6a416f 404 wait(3);
hankzhang 7:155d5b6a416f 405 }
hankzhang 2:f48b0967b6cc 406 }