Display zeigt merkwürdige Zeichen
Dependencies: mbed PinDetect TextLCD
Fork of FWFSU_Start_28102013 by
Diff: main.cpp
- Revision:
- 17:ce5a80e8fc8e
- Parent:
- 16:78da467a0609
- Child:
- 19:a06d764e4f64
--- a/main.cpp Tue Aug 02 07:47:35 2016 +0000 +++ b/main.cpp Tue Aug 02 09:54:13 2016 +0000 @@ -2,7 +2,7 @@ #define PING_TIMEOUT 50000 //5 seconds -run_time times[MAX_ROUND_CNT - MIN_ROUND_CNT]; +struct linked_list *times; /** * Controls the button presses: @@ -113,7 +113,23 @@ comm_flags = 0; buzzer_state = 0; button_state = 0; - D = MIN_ROUND_CNT; + D = MIN_ROUND_CNT; + + if (times != NULL) { + deleteList(times); + times = initNode(); + } +} + +void reinit_list( void ) { + struct run_time *rt = (struct run_time *)malloc(sizeof(struct run_time)); + times = getLast(times); + rt->start = start_tm; + rt->snap0 = snapshot0; + rt->snap1 = snapshot1; + rt->end = end_tm; + times->data = (void *) rt; + appendNode(times, initNode()); } /** @@ -130,11 +146,13 @@ switch(rec_code) { case MSG_CODE_KILL: + deleteList(times); shutdown_seq(); //the other device will already be shut down when we send the kill signal again, thus it doesn't matter if we do. break; case MSG_CODE_PING: break; case MSG_CODE_RESET: + reinit_list(); reset(); break; case MSG_CODE_START: @@ -143,12 +161,14 @@ case MSG_CODE_STOP: //pin is the time for a two way signal, if it just needs to travel from 1 device to the other, one must half it for the correct result //end_tm = systime - pin; - end_tm = systime; - comm_flags |= FLAG_STOP; - int_to_str(end_tm, rec_buff); - ser.sendCode(MSG_CODE_TMP, rec_buff); - ser.flush(); - btn_cnt = 5; //otherwise we could press stop again and the end_tm value would be replaced by systime once again + if (comm_flags & FLAG_START) { //resetting and pressing stop right afterwards breaks the code, one would need to reset again to start the time. + end_tm = systime; + comm_flags |= FLAG_STOP; + int_to_str(end_tm, rec_buff); + ser.sendCode(MSG_CODE_TMP, rec_buff); + ser.flush(); + btn_cnt = 5; //otherwise we could press stop again and the end_tm value would be replaced by systime once again + } break; case MSG_CODE_TOTAL_RESET: // NOTHING @@ -169,10 +189,7 @@ } void bzr_held_pressed( void ) { - //times[D-MIN_ROUND_CNT].start = start_tm; - //times[D-MIN_ROUND_CNT].snap0 = snapshot0; - //times[D-MIN_ROUND_CNT].snap1 = snapshot1; - //times[D-MIN_ROUND_CNT].end = end_tm; + reinit_list(); reset(); ser.sendCode(MSG_CODE_RESET, NULL); ser.flush(); @@ -183,6 +200,7 @@ } void btn_held_released( void ) { + deleteList(times); shutdown_seq(); } @@ -195,6 +213,67 @@ //init init_io(); init_values(); + times = NULL; + tick.attach_us(&handle_systime, 100); //every 100 us + pb1.attach_asserted(&bzr_pressed); + pb1.attach_asserted_held(&bzr_held_pressed); + pb1.setSamplesTillHeld(2000); //2000 samples ---> 1ms ---> 2 seconds + pb1.setSampleFrequency(1000); //1ms + + pb2.attach_asserted(&btn_pressed); + pb2.attach_deasserted_held(&btn_held_released); + pb2.setSamplesTillHeld(200); + pb2.setSampleFrequency(); + + //info + cprintf(RUNMODE_SERVER); + display(); + wait(WAIT_INFO_TM); + + //config + config_buttons(); + config_rf_mod(); + + //start + lowbatt(); + ser.registerRecFc(&hdl_rec); + resync(); + + prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime; + + times = initNode(); + + while(1) { + if (systime - prev[2] >= RATE_DISPLAY) { + prev[2] = systime; + render_time(); + display(); + } + if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) { + prev[1] = systime; + stoppled.write(!stoppled.read()); + } + if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) { + //if the flag is set it means, that we wanna show something and the time has been set --> if the difference bigger than the rate, then clear the flag + //the flag gets checked in the render_time function, to prevent that from overwriting the info text + comm_flags &= ~FLAG_INFO_LOCK; + } + if (systime - prev[0] >= RATE_CHECK_AKKU) { + prev[0] = systime; + akkucheck(); + + if (akku_state == AKKU_CRITICAL) { + shutdown_seq(); + } + } + } +} + +/* +int main() { + //init + init_io(); + init_values(); tick.attach_us(&handle_systime, 100); //every 100 us pb1.attach_asserted(&bzr_pressed); pb1.attach_asserted_held(&bzr_held_pressed); @@ -219,33 +298,35 @@ lowbatt(); //ping(); ser.registerRecFc(&hdl_rec); - resync(); - - prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime; + + struct linked_list *base = initNode(); + appendNode(base, initNode()); + appendNode(base, initNode()); + base->data = (void *) "abc"; + base->next->data = (void *) "def"; + base->next->next->data = (void *) "ghi"; + + struct linked_list *nd = initNode(); + + nd->data = (void *)"123"; + insertNode(base->next, nd); - while(1) { - if (systime - prev[2] >= RATE_DISPLAY) { - prev[2] = systime; - render_time(); - display(); - } - if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) { - prev[1] = systime; - stoppled.write(!stoppled.read()); - } - if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) { - //if the flag is set it means, that we wanna show something and the time has been set --> if the difference bigger than the rate, then clear the flag - //the flag gets checked in the render_time function, to prevent that from overwriting the info text - comm_flags &= ~FLAG_INFO_LOCK; - } - if (systime - prev[0] >= RATE_CHECK_AKKU) { - prev[0] = systime; - akkucheck(); + nd = base->next; + removeNode(nd); + nd = base; + while (1) { + if (nd->data != NULL) + cprintf("%s", (char *) nd->data); + else + cprintf(""); - if (akku_state == AKKU_CRITICAL) { - shutdown_seq(); - } - } + display(); + wait(2); + + nd = nd->next; + if (nd == NULL) + nd = base; } -} \ No newline at end of file +} +*/ \ No newline at end of file