To Record the time of the car

Dependencies:   mbed TextLCD

Committer:
Dennis40816
Date:
Fri Aug 07 17:10:27 2020 +0000
Revision:
1:db7799912cac
Parent:
0:9c3829968b11
Child:
2:c9889e740474
Version-2; All Good except ACC mode test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dennis40816 0:9c3829968b11 1 //Include
Dennis40816 0:9c3829968b11 2 #include "mbed.h"
Dennis40816 0:9c3829968b11 3 #include "TextLCD.h"
Dennis40816 0:9c3829968b11 4 //Define-USER SET
Dennis40816 0:9c3829968b11 5 #define DEBUG 1 //for debug , if formal just
Dennis40816 0:9c3829968b11 6 #define NO_DELAY 1 //if define RESULT == 1, ignore delay time of RF
Dennis40816 0:9c3829968b11 7 #define ACCEPT_LOCK 0 //if define ACCEPT LOCK == 1,need receive ACCEPT before next tx
Dennis40816 0:9c3829968b11 8 #define RX_MODE 1 //1 for scanf ; 2 for getc
Dennis40816 0:9c3829968b11 9 #define BUTTON_DEBOUNCE 0.3f
Dennis40816 1:db7799912cac 10 #define LCD_SHOW_PERIOD 3.0f //show last cycle for 2 sec
Dennis40816 0:9c3829968b11 11 //Define-Don't Change
Dennis40816 0:9c3829968b11 12 #define m_1 1000000.0f
Dennis40816 0:9c3829968b11 13 #define TX_SIZE 16
Dennis40816 0:9c3829968b11 14 #define RX_SIZE 16
Dennis40816 0:9c3829968b11 15 #if (!DEBUG)
Dennis40816 0:9c3829968b11 16 #define CYCLE_TIME_PROTECT 2.0f //used in formal , protect someone trigger the sensor
Dennis40816 0:9c3829968b11 17 #else
Dennis40816 1:db7799912cac 18 #define CYCLE_TIME_PROTECT 1.0f
Dennis40816 0:9c3829968b11 19 #endif
Dennis40816 0:9c3829968b11 20 #define ENDURANCE_CYCLE 20
Dennis40816 0:9c3829968b11 21 #define SKIDPAD_CYCLE 4
Dennis40816 0:9c3829968b11 22
Dennis40816 0:9c3829968b11 23 //RF CMD
Dennis40816 0:9c3829968b11 24 #define ACCEPT 0
Dennis40816 0:9c3829968b11 25 #define DENY 1
Dennis40816 0:9c3829968b11 26 #define CHECK 2
Dennis40816 0:9c3829968b11 27 #define MASTER 3
Dennis40816 0:9c3829968b11 28 #define SLAVE 4
Dennis40816 0:9c3829968b11 29 #define RESULT 5
Dennis40816 0:9c3829968b11 30 #define DELAY 6
Dennis40816 0:9c3829968b11 31 #define RESET 7 //cycle reset
Dennis40816 0:9c3829968b11 32 #define RESTART 8 //mode all reset
Dennis40816 0:9c3829968b11 33
Dennis40816 0:9c3829968b11 34 /*
Dennis40816 0:9c3829968b11 35 ###############################
Dennis40816 0:9c3829968b11 36 # Pin Init #
Dennis40816 0:9c3829968b11 37 # functions #
Dennis40816 0:9c3829968b11 38 ###############################
Dennis40816 0:9c3829968b11 39 */
Dennis40816 0:9c3829968b11 40 //simulate the sensor
Dennis40816 0:9c3829968b11 41 // Serial Tutorial : http://www.stmcu.org.cn/module/forum/thread-608234-1-1.html
Dennis40816 0:9c3829968b11 42 //PC
Dennis40816 0:9c3829968b11 43 Serial pc(USBTX,USBRX,115200);
Dennis40816 0:9c3829968b11 44 //Wireless
Dennis40816 0:9c3829968b11 45 Serial RF(PC_10,PC_11,9600); //Default , product url: http://www.wenshing.com.tw/upload/file/1537953630.pdf
Dennis40816 0:9c3829968b11 46 //LCD
Dennis40816 0:9c3829968b11 47 I2C i2c_lcd(PB_9,PB_8); // SDA,SCL
Dennis40816 0:9c3829968b11 48 TextLCD_I2C lcd(&i2c_lcd, 0x40, TextLCD::LCD16x2); //0x40 for all short(blue lcd) , 0x4E for A1 to A3 open(green lcd) - I2C Address
Dennis40816 0:9c3829968b11 49 //Sensor
Dennis40816 0:9c3829968b11 50 #if(DEBUG)
Dennis40816 0:9c3829968b11 51 DigitalOut sensor_com(PA_8,1); // D7
Dennis40816 1:db7799912cac 52 InterruptIn SENSOR_IT(PB_4,PullDown); // D5
Dennis40816 0:9c3829968b11 53 #else
Dennis40816 0:9c3829968b11 54 DigitalOut sensor_com(PB_2,1);
Dennis40816 0:9c3829968b11 55 InterruptIn SENSOR_IT(PB_1,PullDown);
Dennis40816 0:9c3829968b11 56 #endif
Dennis40816 0:9c3829968b11 57 //BT
Dennis40816 0:9c3829968b11 58 Serial bt (PA_0,PA_1,115200); // Serial_4 tx,rx
Dennis40816 0:9c3829968b11 59 DigitalOut key(PC_1,0); // not AT Mode
Dennis40816 0:9c3829968b11 60 DigitalIn bt_state(PA_4,PullDown); // high when connected with terminal
Dennis40816 0:9c3829968b11 61 //Mode Button
Dennis40816 1:db7799912cac 62 DigitalOut button_high(PA_11,1); // 最右7
Dennis40816 1:db7799912cac 63 InterruptIn MY_BUTTON(PB_12,PullDown); // 最右8
Dennis40816 0:9c3829968b11 64 //Reset Button
Dennis40816 1:db7799912cac 65 DigitalOut button_high_2(PA_6,1); // Mode的左邊
Dennis40816 0:9c3829968b11 66 InterruptIn MY_BUTTON_2(PA_7,PullDown);
Dennis40816 0:9c3829968b11 67 /*
Dennis40816 0:9c3829968b11 68 ###############################
Dennis40816 0:9c3829968b11 69 # Global #
Dennis40816 0:9c3829968b11 70 # Variable #
Dennis40816 0:9c3829968b11 71 ###############################
Dennis40816 0:9c3829968b11 72 */
Dennis40816 0:9c3829968b11 73 // main process
Dennis40816 0:9c3829968b11 74 // /**/ -> need reset
Dennis40816 0:9c3829968b11 75 volatile int mode = 0; //mode 0:Single 1:ACC 2:SkidPad 3:Endurance
Dennis40816 0:9c3829968b11 76 /**/ volatile int process = 0; //process 0:for ready ; 1:sensor in/confirm master or slave ; 2:calculation : 3:bt show 4 lcd show
Dennis40816 0:9c3829968b11 77 // time record
Dennis40816 0:9c3829968b11 78 /**/ Timer this_cycle_timer; //keep running timer
Dennis40816 0:9c3829968b11 79 /**/ float total_time = 0.0;
Dennis40816 0:9c3829968b11 80 /**/ float last_cycle_time = 0.0; //for LC print
Dennis40816 0:9c3829968b11 81 /**/ float best_cycle_time = 0.0;
Dennis40816 0:9c3829968b11 82 // cycle
Dennis40816 0:9c3829968b11 83 /**/ int cycle = 1;
Dennis40816 0:9c3829968b11 84 /**/ int best_cycle = 1;
Dennis40816 0:9c3829968b11 85 // button debounce
Dennis40816 0:9c3829968b11 86 float button_RTC = 0.0;
Dennis40816 0:9c3829968b11 87 float button_LTC = 0.0;
Dennis40816 0:9c3829968b11 88 float button_RTC_2 = 0.0;
Dennis40816 0:9c3829968b11 89 float button_LTC_2 = 0.0;
Dennis40816 0:9c3829968b11 90 // RF related
Dennis40816 0:9c3829968b11 91 bool rf_state = 0; //0 for disconnect
Dennis40816 0:9c3829968b11 92 bool last_rf_state = 1;
Dennis40816 0:9c3829968b11 93 bool Rx_flag = 0; //1 when receive a cmd over
Dennis40816 0:9c3829968b11 94 #if (ACCEPT_LOCK == 1)
Dennis40816 0:9c3829968b11 95 bool rf_accept_lock = 0;
Dennis40816 0:9c3829968b11 96 #endif
Dennis40816 0:9c3829968b11 97 /**/ int role = 0;
Dennis40816 0:9c3829968b11 98 /**/ int this_tcmd = 0;
Dennis40816 0:9c3829968b11 99 /**/ int last_tcmd = 0;
Dennis40816 0:9c3829968b11 100 /**/ int this_rcmd = 0;
Dennis40816 0:9c3829968b11 101 int rf_interval_cnt = 0;
Dennis40816 0:9c3829968b11 102 /**/ float rf_delay_time = 0.0;
Dennis40816 0:9c3829968b11 103 /**/ Timer rf_check_timer;
Dennis40816 0:9c3829968b11 104 // RF Data
Dennis40816 0:9c3829968b11 105 /**/ char TX_buffer[TX_SIZE];
Dennis40816 0:9c3829968b11 106 /**/ char RX_buffer[RX_SIZE];
Dennis40816 0:9c3829968b11 107 /**/ int tx_cnt = 0;
Dennis40816 0:9c3829968b11 108 /**/ int rx_cnt = 0;
Dennis40816 0:9c3829968b11 109 // LCD
Dennis40816 0:9c3829968b11 110 /**/ bool lcd_print_flag = 0;
Dennis40816 0:9c3829968b11 111 bool lcd_end_flag = 0;
Dennis40816 0:9c3829968b11 112 float lcd_life_check_time = 0.0;
Dennis40816 0:9c3829968b11 113 float lcd_show_result_time = 0.0;
Dennis40816 0:9c3829968b11 114 float lcd_end_time = 0.0;
Dennis40816 0:9c3829968b11 115 // BT
Dennis40816 0:9c3829968b11 116 /**/ bool bt_print_flag = 0;
Dennis40816 0:9c3829968b11 117 bool bt_end_flag = 0;
Dennis40816 0:9c3829968b11 118 /*
Dennis40816 0:9c3829968b11 119 ###############################
Dennis40816 0:9c3829968b11 120 # Declaration #
Dennis40816 0:9c3829968b11 121 ###############################
Dennis40816 0:9c3829968b11 122 */
Dennis40816 0:9c3829968b11 123 // Initial
Dennis40816 0:9c3829968b11 124 void Initial_All(void);
Dennis40816 0:9c3829968b11 125 void Initial_Hardware(void);
Dennis40816 0:9c3829968b11 126 void Initial_IT(void);
Dennis40816 0:9c3829968b11 127 //main function
Dennis40816 0:9c3829968b11 128 void reset_parameters(void);
Dennis40816 0:9c3829968b11 129 void show_all(void);
Dennis40816 0:9c3829968b11 130 void lcd_show(void);
Dennis40816 0:9c3829968b11 131 void bt_show(void);
Dennis40816 0:9c3829968b11 132 void show_flag_check(void);
Dennis40816 0:9c3829968b11 133 void time_cal(void);
Dennis40816 0:9c3829968b11 134 void RF_Send(int);
Dennis40816 0:9c3829968b11 135 void RF_Receive(int);
Dennis40816 0:9c3829968b11 136 // IT Functions
Dennis40816 0:9c3829968b11 137 void sensor_in(void);
Dennis40816 0:9c3829968b11 138 void button_fall(void);
Dennis40816 0:9c3829968b11 139 void button_fall_2(void);
Dennis40816 1:db7799912cac 140 void test_button(void);
Dennis40816 0:9c3829968b11 141 void RxCallback(void);
Dennis40816 0:9c3829968b11 142 //protect parameters
Dennis40816 0:9c3829968b11 143 void parameters_protect(void);
Dennis40816 0:9c3829968b11 144 /*
Dennis40816 0:9c3829968b11 145 ###############################
Dennis40816 0:9c3829968b11 146 # Main #
Dennis40816 0:9c3829968b11 147 # function #
Dennis40816 0:9c3829968b11 148 ###############################
Dennis40816 0:9c3829968b11 149 */
Dennis40816 0:9c3829968b11 150 int main()
Dennis40816 0:9c3829968b11 151 {
Dennis40816 0:9c3829968b11 152 Initial_All();
Dennis40816 0:9c3829968b11 153 while(1) {
Dennis40816 0:9c3829968b11 154 if(!role && mode == 1) {
Dennis40816 0:9c3829968b11 155 rf_check_timer.start();
Dennis40816 0:9c3829968b11 156 if(rf_check_timer.read() > 1){
Dennis40816 0:9c3829968b11 157 rf_interval_cnt++;
Dennis40816 0:9c3829968b11 158 rf_check_timer.reset();
Dennis40816 0:9c3829968b11 159 }
Dennis40816 0:9c3829968b11 160 if(rf_interval_cnt % 5 && rf_interval_cnt) {
Dennis40816 0:9c3829968b11 161 RF_Send(CHECK);
Dennis40816 0:9c3829968b11 162 }
Dennis40816 0:9c3829968b11 163 if(rf_interval_cnt > 5) rf_state = 0;
Dennis40816 0:9c3829968b11 164 }
Dennis40816 0:9c3829968b11 165 else rf_check_timer.stop();
Dennis40816 0:9c3829968b11 166 time_cal();
Dennis40816 0:9c3829968b11 167 show_all();
Dennis40816 0:9c3829968b11 168 }
Dennis40816 0:9c3829968b11 169 }
Dennis40816 0:9c3829968b11 170 /*
Dennis40816 0:9c3829968b11 171 ###############################
Dennis40816 0:9c3829968b11 172 # Functions #
Dennis40816 0:9c3829968b11 173 # Implementation #
Dennis40816 0:9c3829968b11 174 ###############################
Dennis40816 0:9c3829968b11 175 */
Dennis40816 0:9c3829968b11 176 //Initial
Dennis40816 0:9c3829968b11 177 void Initial_All(){
Dennis40816 0:9c3829968b11 178 Initial_Hardware();
Dennis40816 0:9c3829968b11 179 Initial_IT();
Dennis40816 0:9c3829968b11 180 }
Dennis40816 0:9c3829968b11 181 void Initial_Hardware(){
Dennis40816 0:9c3829968b11 182 //lcd
Dennis40816 0:9c3829968b11 183 lcd.setCursor(TextLCD::CurOff_BlkOff);
Dennis40816 0:9c3829968b11 184 lcd.setBacklight(TextLCD::LightOn);
Dennis40816 0:9c3829968b11 185 lcd.locate(0,0);
Dennis40816 0:9c3829968b11 186 lcd.printf("NTHU RACING");
Dennis40816 0:9c3829968b11 187 lcd.locate(0,1);
Dennis40816 0:9c3829968b11 188 lcd.printf("Initializing");
Dennis40816 0:9c3829968b11 189 //bt
Dennis40816 1:db7799912cac 190 if(bt_state.read()) {
Dennis40816 1:db7799912cac 191 bt.printf("######################################\r\n");
Dennis40816 1:db7799912cac 192 bt.printf("NTHU RACING TIME RECORDER INITIALIZING\r\n\r\n");
Dennis40816 1:db7799912cac 193 }
Dennis40816 0:9c3829968b11 194 else{
Dennis40816 0:9c3829968b11 195 lcd.locate(12,0);
Dennis40816 1:db7799912cac 196 lcd.printf("b0");
Dennis40816 1:db7799912cac 197 pc.printf("######################################\r\n");
Dennis40816 0:9c3829968b11 198 pc.printf("NTHU RACING TIME RECORDER INITIALIZING\r\n\r\n");
Dennis40816 0:9c3829968b11 199 }
Dennis40816 0:9c3829968b11 200 wait(1.5);
Dennis40816 0:9c3829968b11 201 }
Dennis40816 0:9c3829968b11 202 void Initial_IT(){
Dennis40816 0:9c3829968b11 203 //BUTTON
Dennis40816 0:9c3829968b11 204 MY_BUTTON.rise(&button_fall);
Dennis40816 0:9c3829968b11 205 MY_BUTTON_2.rise(&button_fall_2);
Dennis40816 0:9c3829968b11 206 //SENSOR
Dennis40816 0:9c3829968b11 207 SENSOR_IT.rise(&sensor_in);
Dennis40816 0:9c3829968b11 208 //RF
Dennis40816 0:9c3829968b11 209 RF.attach(&RxCallback,Serial::RxIrq);
Dennis40816 0:9c3829968b11 210 lcd.cls();
Dennis40816 0:9c3829968b11 211 lcd.locate(0,0);
Dennis40816 0:9c3829968b11 212 lcd.printf("Set up ok!");
Dennis40816 0:9c3829968b11 213 if(bt_state.read()){
Dennis40816 1:db7799912cac 214 bt.printf("NTHU RACING TIME RECORDER SET UP DONE\r\n");
Dennis40816 0:9c3829968b11 215 bt.printf("#####################################\r\n");
Dennis40816 0:9c3829968b11 216 }
Dennis40816 0:9c3829968b11 217 else{
Dennis40816 1:db7799912cac 218 pc.printf("NTHU RACING TIME RECORDER SET UP DONE\r\n");
Dennis40816 0:9c3829968b11 219 pc.printf("#####################################\r\n");
Dennis40816 0:9c3829968b11 220 }
Dennis40816 0:9c3829968b11 221 wait(1);
Dennis40816 0:9c3829968b11 222 }
Dennis40816 0:9c3829968b11 223 //while loop
Dennis40816 0:9c3829968b11 224 void reset_parameters() {
Dennis40816 0:9c3829968b11 225 process = 0;
Dennis40816 0:9c3829968b11 226 lcd_print_flag = 0;
Dennis40816 0:9c3829968b11 227 bt_print_flag = 0;
Dennis40816 0:9c3829968b11 228 this_cycle_timer.stop();
Dennis40816 0:9c3829968b11 229 this_cycle_timer.reset();
Dennis40816 1:db7799912cac 230 if( mode != 1 || (mode == 1 && this_rcmd == RESTART) || (mode == 1 && last_tcmd == RESTART) ){
Dennis40816 1:db7799912cac 231 cycle = 1;
Dennis40816 1:db7799912cac 232 best_cycle = 1;
Dennis40816 1:db7799912cac 233 last_cycle_time = 0.0;
Dennis40816 1:db7799912cac 234 best_cycle_time = 0.0;
Dennis40816 1:db7799912cac 235 total_time = 0.0;
Dennis40816 1:db7799912cac 236 lcd_end_flag = 0;
Dennis40816 1:db7799912cac 237 bt_end_flag = 0;
Dennis40816 1:db7799912cac 238 }
Dennis40816 0:9c3829968b11 239 if(mode == 1){
Dennis40816 0:9c3829968b11 240 memset(TX_buffer,0,TX_SIZE);
Dennis40816 0:9c3829968b11 241 memset(RX_buffer,0,RX_SIZE);
Dennis40816 0:9c3829968b11 242
Dennis40816 0:9c3829968b11 243 tx_cnt = 0;
Dennis40816 0:9c3829968b11 244 rx_cnt = 0;
Dennis40816 0:9c3829968b11 245 rf_delay_time = 0.0;
Dennis40816 0:9c3829968b11 246 role = 0;
Dennis40816 0:9c3829968b11 247 this_tcmd = 0;
Dennis40816 0:9c3829968b11 248 last_tcmd = 0;
Dennis40816 0:9c3829968b11 249 this_rcmd = 0;
Dennis40816 0:9c3829968b11 250 }
Dennis40816 1:db7799912cac 251 if(bt_state.read() ) bt.printf("#####################################\r\n");
Dennis40816 1:db7799912cac 252 else pc.printf("#####################################\r\n");
Dennis40816 0:9c3829968b11 253 }
Dennis40816 0:9c3829968b11 254 void show_all(){
Dennis40816 0:9c3829968b11 255 parameters_protect();
Dennis40816 0:9c3829968b11 256 lcd_show();
Dennis40816 0:9c3829968b11 257 bt_show();
Dennis40816 0:9c3829968b11 258 show_flag_check();
Dennis40816 0:9c3829968b11 259 }
Dennis40816 0:9c3829968b11 260 void parameters_protect(){
Dennis40816 0:9c3829968b11 261 if(cycle >= 99){
Dennis40816 0:9c3829968b11 262 cycle = 0;
Dennis40816 0:9c3829968b11 263 if(bt_state.read()) bt.printf("Cycle Protect \r\n");
Dennis40816 0:9c3829968b11 264 else pc.printf("Cycle Protect \r\n");
Dennis40816 0:9c3829968b11 265 }
Dennis40816 0:9c3829968b11 266 if(last_cycle_time >= 9999.99f ){
Dennis40816 0:9c3829968b11 267 last_cycle_time = 0.0;
Dennis40816 0:9c3829968b11 268 if(bt_state.read()) bt.printf("Last Cycle Time Protect \r\n");
Dennis40816 0:9c3829968b11 269 else pc.printf("Last Cycle Time Protect \r\n");
Dennis40816 0:9c3829968b11 270 }
Dennis40816 0:9c3829968b11 271 if(total_time >= 9999.99f){
Dennis40816 0:9c3829968b11 272 total_time = 0.0;
Dennis40816 0:9c3829968b11 273 if(bt_state.read()) bt.printf("Total Time Protect \r\n");
Dennis40816 0:9c3829968b11 274 else pc.printf("Total Time Protect \r\n");
Dennis40816 0:9c3829968b11 275 }
Dennis40816 0:9c3829968b11 276 }
Dennis40816 0:9c3829968b11 277 void lcd_show(){
Dennis40816 0:9c3829968b11 278 //process 4 update
Dennis40816 0:9c3829968b11 279 lcd.locate(0,0);
Dennis40816 1:db7799912cac 280 if( (!lcd_print_flag)&& last_cycle_time > 0.0f && (process == 4 && cycle >= 1 || mode == 1 && process == 4 && cycle >= 1)){
Dennis40816 0:9c3829968b11 281 //print out last cycle time flag
Dennis40816 0:9c3829968b11 282 lcd_print_flag = 1;
Dennis40816 0:9c3829968b11 283 lcd_show_result_time = us_ticker_read()/m_1;
Dennis40816 0:9c3829968b11 284 }
Dennis40816 0:9c3829968b11 285 else if((!lcd_end_flag) && (cycle > SKIDPAD_CYCLE && mode == 2 || cycle > ENDURANCE_CYCLE && mode == 3)){
Dennis40816 0:9c3829968b11 286 //mode end
Dennis40816 1:db7799912cac 287 if(us_ticker_read()/m_1 - lcd_show_result_time > LCD_SHOW_PERIOD){
Dennis40816 1:db7799912cac 288 lcd_end_flag = 1;
Dennis40816 1:db7799912cac 289 lcd_end_time = us_ticker_read()/m_1;
Dennis40816 1:db7799912cac 290 }
Dennis40816 0:9c3829968b11 291 }
Dennis40816 0:9c3829968b11 292
Dennis40816 0:9c3829968b11 293 //row 1 show
Dennis40816 1:db7799912cac 294 if(us_ticker_read()/m_1 - lcd_show_result_time < LCD_SHOW_PERIOD && last_cycle_time != 0)
Dennis40816 0:9c3829968b11 295 lcd.printf("LCT : %.2f sec ",last_cycle_time);
Dennis40816 1:db7799912cac 296 else if(us_ticker_read()/m_1 - lcd_end_time < LCD_SHOW_PERIOD && last_cycle_time != 0)
Dennis40816 1:db7799912cac 297 lcd.printf("BC :%d ",best_cycle);
Dennis40816 0:9c3829968b11 298 else{
Dennis40816 0:9c3829968b11 299 switch(mode){
Dennis40816 0:9c3829968b11 300 case 0 :
Dennis40816 1:db7799912cac 301 lcd.printf("SING b%dn%d C%d ",bt_state.read(),rf_state,cycle);
Dennis40816 0:9c3829968b11 302 break;
Dennis40816 0:9c3829968b11 303 case 1:
Dennis40816 1:db7799912cac 304 lcd.printf("ACC b%dn%d C%d ",bt_state.read(),rf_state,cycle);
Dennis40816 0:9c3829968b11 305 break;
Dennis40816 0:9c3829968b11 306 case 2:
Dennis40816 1:db7799912cac 307 lcd.printf("SKID b%dn%d C%d ",bt_state.read(),rf_state,cycle);
Dennis40816 0:9c3829968b11 308 break;
Dennis40816 0:9c3829968b11 309 case 3:
Dennis40816 1:db7799912cac 310 lcd.printf("ENDU b%dn%d C%d ",bt_state.read(),rf_state,cycle);
Dennis40816 0:9c3829968b11 311 break;
Dennis40816 0:9c3829968b11 312 }
Dennis40816 0:9c3829968b11 313 }
Dennis40816 0:9c3829968b11 314 lcd.locate(0,1);
Dennis40816 0:9c3829968b11 315 //row 2 show
Dennis40816 0:9c3829968b11 316 if(cycle == 1 && process == 0) lcd.printf("Ready to Go !"); //first in
Dennis40816 1:db7799912cac 317 else if(lcd_end_flag) lcd.printf("BCT :%.2f sec",best_cycle_time);
Dennis40816 0:9c3829968b11 318 else if(mode == 1) lcd.printf("TC:%.2f sec ",this_cycle_timer.read());
Dennis40816 1:db7799912cac 319 else if((cycle > SKIDPAD_CYCLE && mode == 2 || cycle > ENDURANCE_CYCLE && mode == 3)) lcd.printf("Mode %d End! ",mode);
Dennis40816 0:9c3829968b11 320 else lcd.printf("%.2f,%.2f ",this_cycle_timer.read(),this_cycle_timer.read()+total_time);
Dennis40816 0:9c3829968b11 321 //lcd life check
Dennis40816 0:9c3829968b11 322 lcd.locate(15,1);
Dennis40816 0:9c3829968b11 323 if(us_ticker_read()/m_1 - lcd_life_check_time < 1.0f) lcd.printf(".");
Dennis40816 0:9c3829968b11 324 else if(us_ticker_read()/m_1 - lcd_life_check_time < 2.0f) lcd.printf(" ");
Dennis40816 0:9c3829968b11 325 else lcd_life_check_time = us_ticker_read()/m_1;
Dennis40816 0:9c3829968b11 326 }
Dennis40816 0:9c3829968b11 327 void bt_show(){
Dennis40816 0:9c3829968b11 328 //process 3 update and print
Dennis40816 0:9c3829968b11 329 if(bt_state.read() && process == 3){
Dennis40816 0:9c3829968b11 330 //process change
Dennis40816 0:9c3829968b11 331 process = 4;
Dennis40816 1:db7799912cac 332 bt_print_flag = 1;
Dennis40816 0:9c3829968b11 333 if (last_cycle_time == 0.0f) bt.printf("First in\r\n");
Dennis40816 0:9c3829968b11 334 else {
Dennis40816 1:db7799912cac 335 bt.printf("Mode:%d,cycle: %d,last cycle time:%.2f sec\r\n",mode,cycle,last_cycle_time);
Dennis40816 0:9c3829968b11 336 if(cycle == SKIDPAD_CYCLE && mode == 2 || cycle == ENDURANCE_CYCLE && mode == 3){
Dennis40816 1:db7799912cac 337 bt.printf("Best Cycle:%d\r\n",best_cycle);
Dennis40816 1:db7799912cac 338 bt.printf("Best Cycle Time:%.2f sec\r\n",best_cycle_time);
Dennis40816 1:db7799912cac 339 bt.printf("Mode %d End & Reset\r\n",mode);
Dennis40816 0:9c3829968b11 340 bt_end_flag = 1;
Dennis40816 0:9c3829968b11 341 }
Dennis40816 0:9c3829968b11 342 }
Dennis40816 0:9c3829968b11 343 }
Dennis40816 0:9c3829968b11 344 else if(process == 3){
Dennis40816 1:db7799912cac 345 process = 4;
Dennis40816 1:db7799912cac 346 bt_print_flag = 1;
Dennis40816 0:9c3829968b11 347 if (last_cycle_time == 0.0f) pc.printf("First in\r\n");
Dennis40816 0:9c3829968b11 348 else {
Dennis40816 1:db7799912cac 349 pc.printf("Mode:%d,cycle: %d,last cycle time:%.2f sec\r\n",mode,cycle,last_cycle_time);
Dennis40816 0:9c3829968b11 350 if(cycle == SKIDPAD_CYCLE && mode == 2 || cycle == ENDURANCE_CYCLE && mode == 3){
Dennis40816 1:db7799912cac 351 pc.printf("Mode %d End & Reset\r\n",mode);
Dennis40816 0:9c3829968b11 352 bt_end_flag = 1;
Dennis40816 0:9c3829968b11 353 }
Dennis40816 0:9c3829968b11 354 }
Dennis40816 0:9c3829968b11 355 }
Dennis40816 0:9c3829968b11 356 if(last_rf_state != rf_state){
Dennis40816 0:9c3829968b11 357 last_rf_state = rf_state;
Dennis40816 0:9c3829968b11 358 if(rf_state){
Dennis40816 0:9c3829968b11 359 if(bt_state.read()) bt.printf("RF Connected!\r\n");
Dennis40816 0:9c3829968b11 360 else pc.printf("RF Connected!\r\n");
Dennis40816 0:9c3829968b11 361 }
Dennis40816 0:9c3829968b11 362 else{
Dennis40816 0:9c3829968b11 363 if(bt_state.read()) bt.printf("RF Disconnected!\r\n");
Dennis40816 0:9c3829968b11 364 else pc.printf("RF Disonnected!\r\n");
Dennis40816 0:9c3829968b11 365 }
Dennis40816 0:9c3829968b11 366 }
Dennis40816 0:9c3829968b11 367 }
Dennis40816 0:9c3829968b11 368 void show_flag_check(){
Dennis40816 0:9c3829968b11 369 //cycle update for mode != ACC
Dennis40816 0:9c3829968b11 370 if(lcd_print_flag && bt_print_flag){
Dennis40816 0:9c3829968b11 371 //print ok
Dennis40816 0:9c3829968b11 372 process = 0;
Dennis40816 0:9c3829968b11 373 lcd_print_flag = 0;
Dennis40816 0:9c3829968b11 374 bt_print_flag = 0;
Dennis40816 1:db7799912cac 375 if(mode != 1) {
Dennis40816 1:db7799912cac 376 cycle++;
Dennis40816 1:db7799912cac 377 }
Dennis40816 0:9c3829968b11 378 }
Dennis40816 0:9c3829968b11 379 if(lcd_end_flag && bt_end_flag){
Dennis40816 0:9c3829968b11 380 //notice reset
Dennis40816 0:9c3829968b11 381 if(mode == 1 && us_ticker_read()/m_1 - lcd_end_time > LCD_SHOW_PERIOD) RF_Send(RESET); //including local reset
Dennis40816 0:9c3829968b11 382 else if(us_ticker_read()/m_1 - lcd_end_time > LCD_SHOW_PERIOD) reset_parameters();
Dennis40816 0:9c3829968b11 383 }
Dennis40816 0:9c3829968b11 384 }
Dennis40816 0:9c3829968b11 385 void time_cal(){
Dennis40816 0:9c3829968b11 386 if(process == 1){
Dennis40816 0:9c3829968b11 387 process = 2;
Dennis40816 0:9c3829968b11 388 //calculation time variable
Dennis40816 0:9c3829968b11 389 //last_cycle_time update in sensor in
Dennis40816 0:9c3829968b11 390 if(mode != 1) total_time += last_cycle_time;
Dennis40816 0:9c3829968b11 391 if(cycle == 1){
Dennis40816 0:9c3829968b11 392 best_cycle = cycle;
Dennis40816 0:9c3829968b11 393 best_cycle_time = last_cycle_time;
Dennis40816 0:9c3829968b11 394 }
Dennis40816 0:9c3829968b11 395 else if(last_cycle_time < best_cycle_time){
Dennis40816 0:9c3829968b11 396 best_cycle = cycle;
Dennis40816 0:9c3829968b11 397 best_cycle_time = last_cycle_time;
Dennis40816 0:9c3829968b11 398 }
Dennis40816 0:9c3829968b11 399 //get in update show period
Dennis40816 0:9c3829968b11 400 process = 3;
Dennis40816 0:9c3829968b11 401 }
Dennis40816 0:9c3829968b11 402 }
Dennis40816 0:9c3829968b11 403 //RF communication function , must end with \n ; //cycle update for mode ACC
Dennis40816 0:9c3829968b11 404 void RF_Send(int rf_tcmd){
Dennis40816 0:9c3829968b11 405 #if (ACCEPT_LOCK == 1)
Dennis40816 0:9c3829968b11 406 if(!rf_accept_lock || rf_tcmd == ACCEPT){
Dennis40816 0:9c3829968b11 407 #endif
Dennis40816 0:9c3829968b11 408 if(rf_tcmd != ACCEPT) this_tcmd = rf_tcmd;
Dennis40816 0:9c3829968b11 409 switch(rf_tcmd){
Dennis40816 0:9c3829968b11 410 case ACCEPT:
Dennis40816 0:9c3829968b11 411 RF.printf("%d\n",ACCEPT);
Dennis40816 0:9c3829968b11 412 rf_state = 1;
Dennis40816 0:9c3829968b11 413 rf_interval_cnt = -4;
Dennis40816 0:9c3829968b11 414 break;
Dennis40816 0:9c3829968b11 415 case DENY:
Dennis40816 0:9c3829968b11 416 RF.printf("%d\n",DENY);
Dennis40816 0:9c3829968b11 417 break;
Dennis40816 0:9c3829968b11 418 case CHECK:
Dennis40816 0:9c3829968b11 419 //以後加上cycle check
Dennis40816 0:9c3829968b11 420 RF.printf("%d\n",CHECK);
Dennis40816 0:9c3829968b11 421 break;
Dennis40816 0:9c3829968b11 422 case MASTER:
Dennis40816 0:9c3829968b11 423 RF.printf("%d\n",MASTER);
Dennis40816 0:9c3829968b11 424 if(bt_state.read()) bt.printf("Car in \r\n");
Dennis40816 0:9c3829968b11 425 else pc.printf("Car in \r\n");
Dennis40816 0:9c3829968b11 426 break;
Dennis40816 0:9c3829968b11 427 case SLAVE:
Dennis40816 0:9c3829968b11 428 RF.printf("%d&%.2f\n",SLAVE,this_cycle_timer.read());
Dennis40816 0:9c3829968b11 429 break;
Dennis40816 0:9c3829968b11 430 case RESULT:
Dennis40816 0:9c3829968b11 431 RF.printf("%d&%.2f\n",RESULT,this_cycle_timer.read());
Dennis40816 0:9c3829968b11 432 break;
Dennis40816 0:9c3829968b11 433 case DELAY:
Dennis40816 0:9c3829968b11 434 //delay time abnormal detect
Dennis40816 0:9c3829968b11 435 if(rf_delay_time < 1.0f) {
Dennis40816 0:9c3829968b11 436 RF.printf("%d&%.4f\n",DELAY,rf_delay_time);
Dennis40816 0:9c3829968b11 437 #if (DEBUG == 1)
Dennis40816 0:9c3829968b11 438 if(bt_state.read()) bt.printf("Delay time:%.4f\r\n",rf_delay_time);
Dennis40816 0:9c3829968b11 439 else pc.printf("Delay time:%.4f\r\n",rf_delay_time);
Dennis40816 0:9c3829968b11 440 #endif
Dennis40816 0:9c3829968b11 441 }
Dennis40816 0:9c3829968b11 442 else if(bt_state.read()) bt.printf("rf delay time > 1sec \r\n");
Dennis40816 0:9c3829968b11 443 else pc.printf("rf delay time > 1 sec");
Dennis40816 0:9c3829968b11 444 break;
Dennis40816 0:9c3829968b11 445 case RESET:
Dennis40816 0:9c3829968b11 446 cycle++;
Dennis40816 0:9c3829968b11 447 reset_parameters();
Dennis40816 0:9c3829968b11 448 if(bt_state.read()) bt.printf("ACC Set \r\n");
Dennis40816 0:9c3829968b11 449 else pc.printf("ACC Set \r\n");
Dennis40816 0:9c3829968b11 450 break;
Dennis40816 0:9c3829968b11 451 case RESTART:
Dennis40816 0:9c3829968b11 452 RF.printf("%d\n",RESTART);
Dennis40816 0:9c3829968b11 453 //reset_parameters at button_fall_2
Dennis40816 0:9c3829968b11 454 break;
Dennis40816 0:9c3829968b11 455 default:
Dennis40816 0:9c3829968b11 456 if(bt_state.read()) bt.printf("Unknown Tcmd\r\n");
Dennis40816 0:9c3829968b11 457 else pc.printf("Unknown Tcmd\r\n");
Dennis40816 0:9c3829968b11 458 break;
Dennis40816 0:9c3829968b11 459 }
Dennis40816 0:9c3829968b11 460 #if(ACCEPT_LOCK == 1)
Dennis40816 0:9c3829968b11 461 }
Dennis40816 0:9c3829968b11 462 if(rf_tcmd != ACCEPT){
Dennis40816 0:9c3829968b11 463 //tx disable
Dennis40816 0:9c3829968b11 464 rf_accept_lock = 1;
Dennis40816 0:9c3829968b11 465 }
Dennis40816 0:9c3829968b11 466 #else
Dennis40816 0:9c3829968b11 467 last_tcmd = this_tcmd;
Dennis40816 0:9c3829968b11 468 #endif
Dennis40816 0:9c3829968b11 469 }
Dennis40816 0:9c3829968b11 470
Dennis40816 0:9c3829968b11 471 void RF_Receive(int rf_rcmd){
Dennis40816 0:9c3829968b11 472 this_rcmd = rf_rcmd;
Dennis40816 0:9c3829968b11 473 #if(DEBUG == 1)
Dennis40816 0:9c3829968b11 474 if(bt_state.read()) bt.printf("this rcmd:%d\r\n",this_rcmd);
Dennis40816 0:9c3829968b11 475 else pc.printf("this rcmd:%d\r\n",this_rcmd);
Dennis40816 0:9c3829968b11 476 #endif
Dennis40816 0:9c3829968b11 477 switch(rf_rcmd){
Dennis40816 0:9c3829968b11 478 case ACCEPT:
Dennis40816 0:9c3829968b11 479 #if(ACCEPT_LOCK == 1)
Dennis40816 0:9c3829968b11 480 if(rf_accept_lock){
Dennis40816 0:9c3829968b11 481 rf_accept_lock = 0;
Dennis40816 0:9c3829968b11 482 last_tcmd = this_tcmd;
Dennis40816 0:9c3829968b11 483 }
Dennis40816 0:9c3829968b11 484 #endif
Dennis40816 0:9c3829968b11 485 rf_state = 1;
Dennis40816 0:9c3829968b11 486 rf_interval_cnt = 0;
Dennis40816 0:9c3829968b11 487 break;
Dennis40816 0:9c3829968b11 488 case DENY:
Dennis40816 0:9c3829968b11 489 switch(last_tcmd){
Dennis40816 0:9c3829968b11 490 //master
Dennis40816 0:9c3829968b11 491 case MASTER:
Dennis40816 0:9c3829968b11 492 bt.printf("MASTER Request Denied!\r\n");
Dennis40816 0:9c3829968b11 493 break;
Dennis40816 0:9c3829968b11 494 //slave //發送時間待補
Dennis40816 0:9c3829968b11 495 case SLAVE:
Dennis40816 0:9c3829968b11 496 bt.printf("SLAVE Request Denied!\r\n");
Dennis40816 0:9c3829968b11 497 break;
Dennis40816 0:9c3829968b11 498 //result
Dennis40816 0:9c3829968b11 499 case RESULT:
Dennis40816 0:9c3829968b11 500 bt.printf("RESULT Request Denied!\r\n");
Dennis40816 0:9c3829968b11 501 break;
Dennis40816 0:9c3829968b11 502 }
Dennis40816 0:9c3829968b11 503 break;
Dennis40816 0:9c3829968b11 504 case CHECK:
Dennis40816 0:9c3829968b11 505 RF_Send(ACCEPT);
Dennis40816 0:9c3829968b11 506 break;
Dennis40816 0:9c3829968b11 507 case MASTER:
Dennis40816 0:9c3829968b11 508 //will become Slave End
Dennis40816 0:9c3829968b11 509 if(!role){
Dennis40816 0:9c3829968b11 510 role = 2;
Dennis40816 0:9c3829968b11 511 if(bt_state.read()) bt.printf("Car in \r\n");
Dennis40816 0:9c3829968b11 512 else pc.printf("Car in \r\n");
Dennis40816 0:9c3829968b11 513 }
Dennis40816 0:9c3829968b11 514 else RF_Send(DENY);
Dennis40816 0:9c3829968b11 515 break;
Dennis40816 0:9c3829968b11 516 case SLAVE:
Dennis40816 0:9c3829968b11 517 /*should be Master End*/
Dennis40816 0:9c3829968b11 518 //calculate Delay time
Dennis40816 0:9c3829968b11 519 char slave_time[5];
Dennis40816 0:9c3829968b11 520 for(int i=0;i<5;i++) slave_time[i] = RX_buffer[i+2];
Dennis40816 0:9c3829968b11 521 rf_delay_time = (float)(( this_cycle_timer.read()-atof(slave_time) )/2);
Dennis40816 0:9c3829968b11 522 last_cycle_time = this_cycle_timer.read()-rf_delay_time;
Dennis40816 0:9c3829968b11 523 //send back Delay time
Dennis40816 0:9c3829968b11 524 wait_ms(10);
Dennis40816 0:9c3829968b11 525 RF_Send(DELAY);
Dennis40816 0:9c3829968b11 526 wait_ms(10);
Dennis40816 0:9c3829968b11 527 //Role off and interval = 0 ->maybe at reset?
Dennis40816 0:9c3829968b11 528 process = 3;
Dennis40816 0:9c3829968b11 529 break;
Dennis40816 0:9c3829968b11 530 case RESULT:
Dennis40816 0:9c3829968b11 531 //should be Master End
Dennis40816 0:9c3829968b11 532 char result_time[5];
Dennis40816 0:9c3829968b11 533 for(int i=0;i<5;i++) result_time[i] = RX_buffer[i+2];
Dennis40816 0:9c3829968b11 534 last_cycle_time = atof(result_time);
Dennis40816 0:9c3829968b11 535 process = 3;
Dennis40816 0:9c3829968b11 536 break;
Dennis40816 0:9c3829968b11 537 case DELAY:
Dennis40816 0:9c3829968b11 538 // should be Slave End
Dennis40816 0:9c3829968b11 539 char delay_time [5];
Dennis40816 0:9c3829968b11 540 for(int i=0;i<5;i++) delay_time[i] = RX_buffer[i+2];
Dennis40816 0:9c3829968b11 541 rf_delay_time = atof(delay_time);
Dennis40816 0:9c3829968b11 542 last_cycle_time = this_cycle_timer.read()+ rf_delay_time;
Dennis40816 0:9c3829968b11 543 process = 3;
Dennis40816 0:9c3829968b11 544 if(bt_state.read()) bt.printf("Delay time:%.4f",rf_delay_time);
Dennis40816 0:9c3829968b11 545 break;
Dennis40816 0:9c3829968b11 546 case RESET:
Dennis40816 0:9c3829968b11 547 cycle++;
Dennis40816 0:9c3829968b11 548 reset_parameters();
Dennis40816 0:9c3829968b11 549 if(bt_state.read()) bt.printf("ACC Set\r\n");
Dennis40816 0:9c3829968b11 550 else pc.printf("ACC Set\r\n");
Dennis40816 0:9c3829968b11 551 break;
Dennis40816 0:9c3829968b11 552 case RESTART:
Dennis40816 0:9c3829968b11 553 reset_parameters();
Dennis40816 0:9c3829968b11 554 if(bt_state.read()) bt.printf("ACC Restart\r\n");
Dennis40816 0:9c3829968b11 555 else pc.printf("ACC Restart\r\n");
Dennis40816 0:9c3829968b11 556 break;
Dennis40816 0:9c3829968b11 557 default:
Dennis40816 0:9c3829968b11 558 if(bt_state.read()) bt.printf("Unknown Rcmd\r\n");
Dennis40816 0:9c3829968b11 559 else pc.printf("Unknown Rcmd\r\n");
Dennis40816 0:9c3829968b11 560 break;
Dennis40816 0:9c3829968b11 561 }
Dennis40816 0:9c3829968b11 562 }
Dennis40816 0:9c3829968b11 563
Dennis40816 0:9c3829968b11 564 //IT
Dennis40816 0:9c3829968b11 565 void sensor_in(){
Dennis40816 1:db7799912cac 566 if(mode!=1){
Dennis40816 1:db7799912cac 567 if(cycle == 1){
Dennis40816 1:db7799912cac 568 this_cycle_timer.start();
Dennis40816 1:db7799912cac 569 process = 1;
Dennis40816 1:db7799912cac 570 }
Dennis40816 1:db7799912cac 571 if(this_cycle_timer.read() > CYCLE_TIME_PROTECT){
Dennis40816 1:db7799912cac 572 process = 1;
Dennis40816 1:db7799912cac 573 last_cycle_time = this_cycle_timer.read();
Dennis40816 1:db7799912cac 574 this_cycle_timer.reset();
Dennis40816 1:db7799912cac 575 }
Dennis40816 1:db7799912cac 576 //check mode2,3
Dennis40816 1:db7799912cac 577 if((cycle > SKIDPAD_CYCLE && mode == 2 || cycle > ENDURANCE_CYCLE && mode == 3)){
Dennis40816 1:db7799912cac 578 process = 0;
Dennis40816 1:db7799912cac 579 }
Dennis40816 0:9c3829968b11 580 }
Dennis40816 0:9c3829968b11 581 else if(mode == 1){
Dennis40816 0:9c3829968b11 582 //mode acc
Dennis40816 0:9c3829968b11 583 if(!role && rf_state){
Dennis40816 0:9c3829968b11 584 //MASTER
Dennis40816 0:9c3829968b11 585 this_cycle_timer.start();
Dennis40816 0:9c3829968b11 586 RF_Send(MASTER);
Dennis40816 0:9c3829968b11 587 }
Dennis40816 0:9c3829968b11 588 if(role == 2 && this_cycle_timer.read() > CYCLE_TIME_PROTECT){
Dennis40816 0:9c3829968b11 589 this_cycle_timer.stop();
Dennis40816 0:9c3829968b11 590 //SLAVE
Dennis40816 0:9c3829968b11 591 #if (NO_DELAY == 1)
Dennis40816 0:9c3829968b11 592 //this_cycle_timer.start() at RxCallback
Dennis40816 0:9c3829968b11 593 RF_Send(RESULT);
Dennis40816 0:9c3829968b11 594 last_cycle_time = this_cycle_timer.read();
Dennis40816 0:9c3829968b11 595 process = 3;
Dennis40816 0:9c3829968b11 596 #else
Dennis40816 0:9c3829968b11 597 //with delay calculation in Master End
Dennis40816 0:9c3829968b11 598 RF_Send(SLAVE);
Dennis40816 0:9c3829968b11 599 #endif
Dennis40816 0:9c3829968b11 600 }
Dennis40816 0:9c3829968b11 601 }
Dennis40816 0:9c3829968b11 602 }
Dennis40816 0:9c3829968b11 603 void button_fall(void){
Dennis40816 0:9c3829968b11 604 //debounce
Dennis40816 0:9c3829968b11 605 button_RTC = us_ticker_read()/m_1;
Dennis40816 0:9c3829968b11 606 if(button_RTC - button_LTC > BUTTON_DEBOUNCE){
Dennis40816 0:9c3829968b11 607 button_LTC = button_RTC;
Dennis40816 0:9c3829968b11 608 (mode >= 3 || mode < 0) ? mode = 0 : mode++ ;
Dennis40816 1:db7799912cac 609 last_tcmd = RESTART;
Dennis40816 0:9c3829968b11 610 reset_parameters();
Dennis40816 1:db7799912cac 611 last_tcmd = ACCEPT;
Dennis40816 0:9c3829968b11 612 if(bt_state.read()) bt.printf("Mode change to :%d \r\n",mode);
Dennis40816 0:9c3829968b11 613 else pc.printf("Mode change to :%d \r\n",mode);
Dennis40816 0:9c3829968b11 614 }
Dennis40816 0:9c3829968b11 615 }
Dennis40816 0:9c3829968b11 616 void button_fall_2(void){
Dennis40816 0:9c3829968b11 617 //send reset cmd
Dennis40816 0:9c3829968b11 618 button_RTC_2 = us_ticker_read()/m_1;
Dennis40816 0:9c3829968b11 619 if(button_RTC_2 - button_LTC_2 > BUTTON_DEBOUNCE){
Dennis40816 0:9c3829968b11 620 button_LTC_2 = button_RTC_2;
Dennis40816 0:9c3829968b11 621 if(mode == 1) RF_Send(RESTART);
Dennis40816 0:9c3829968b11 622 reset_parameters();
Dennis40816 0:9c3829968b11 623 if(bt_state.read() ){
Dennis40816 0:9c3829968b11 624 bt.printf("Restart!\r\n\r\n\r\n");
Dennis40816 0:9c3829968b11 625 bt.printf("#####################\r\n");
Dennis40816 0:9c3829968b11 626 }
Dennis40816 1:db7799912cac 627 else{
Dennis40816 1:db7799912cac 628 pc.printf("Restart!\r\n\r\n\r\n");
Dennis40816 1:db7799912cac 629 pc.printf("#####################\r\n");
Dennis40816 1:db7799912cac 630 }
Dennis40816 0:9c3829968b11 631 }
Dennis40816 0:9c3829968b11 632 }
Dennis40816 0:9c3829968b11 633 void RxCallback(){
Dennis40816 0:9c3829968b11 634 //read from buffer
Dennis40816 0:9c3829968b11 635 #if(RX_MODE == 1)
Dennis40816 0:9c3829968b11 636 RF.scanf("%s",RX_buffer);
Dennis40816 0:9c3829968b11 637 if(RX_buffer[0]-'0' == MASTER) this_cycle_timer.start();
Dennis40816 0:9c3829968b11 638 else if(RX_buffer[0]-'0' == SLAVE || RX_buffer[0]-'0' == RESULT) this_cycle_timer.stop();
Dennis40816 0:9c3829968b11 639 Rx_flag = 1;
Dennis40816 0:9c3829968b11 640 #elif(RX_MODE == 2)
Dennis40816 0:9c3829968b11 641 while(RF.readable()){
Dennis40816 0:9c3829968b11 642 char new_char = RF.getc();
Dennis40816 0:9c3829968b11 643 if(new_char != '\n') {
Dennis40816 0:9c3829968b11 644 RX_buffer[rx_cnt++] = new_char;
Dennis40816 0:9c3829968b11 645 if(rx_cnt == 1){
Dennis40816 0:9c3829968b11 646 //timer management
Dennis40816 0:9c3829968b11 647 if(RX_buffer[0]-'0' == MASTER) this_cycle_timer.start();
Dennis40816 0:9c3829968b11 648 else if(RX_buffer[0]-'0' == SLAVE || RX_buffer[0]-'0' == RESULT) this_cycle_timer.stop();
Dennis40816 0:9c3829968b11 649 }
Dennis40816 0:9c3829968b11 650 }
Dennis40816 0:9c3829968b11 651 else {
Dennis40816 0:9c3829968b11 652 rx_cnt = 0;
Dennis40816 0:9c3829968b11 653 Rx_flag = 1;
Dennis40816 0:9c3829968b11 654 }
Dennis40816 0:9c3829968b11 655 }
Dennis40816 0:9c3829968b11 656 #endif
Dennis40816 0:9c3829968b11 657 #if(DEBUG == 1)
Dennis40816 0:9c3829968b11 658 if(bt_state.read()&& !rx_cnt) bt.printf("RX Callback,%s has been received\r\n",RX_buffer);
Dennis40816 0:9c3829968b11 659 #endif
Dennis40816 0:9c3829968b11 660 if(Rx_flag == 1){
Dennis40816 0:9c3829968b11 661 RF_Receive(RX_buffer[0]-'0');
Dennis40816 0:9c3829968b11 662 Rx_flag = 0;
Dennis40816 0:9c3829968b11 663 }
Dennis40816 0:9c3829968b11 664 }