From 51d8d5a3f59ed1d13df28bed5fcc3ce09819f773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Fri, 20 Jan 2017 17:07:34 +0100 Subject: [PATCH] fix how received PZEM messages are handled --- lib/sensor_pzem.c | 5 ++++- main.c | 14 +++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/sensor_pzem.c b/lib/sensor_pzem.c index 6ea15c9..9ee7661 100644 --- a/lib/sensor_pzem.c +++ b/lib/sensor_pzem.c @@ -96,13 +96,16 @@ void sensor_pzem_measurement_request(uint32_t address, enum sensor_pzem_measurem usart_enable_tx_interrupt(USART(SENSOR_PZEM_USART)); // enable interrupt to send other bytes usart_send(USART(SENSOR_PZEM_USART),tx_buffer[tx_i++]); // start transmission + + sensor_pzem_measurement_received = false; // reset flag + rx_i = 0; // prepare buffer to receive next measurement } struct sensor_pzem_measurement_t sensor_pzem_measurement_decode(void) { struct sensor_pzem_measurement_t measurement; // decoded measurement to return measurement.valid = false; // wait until the end to ensure validity - if (!sensor_pzem_measurement_received) { // no measurement received + if (rx_i=SENSOR_PZEM_MAX) { fprintf(stderr,"unknown measurement type: %u\n", measurement.type); @@ -513,15 +514,6 @@ void main(void) } } } - while (button_flag) { // user pressed button - action = true; // action has been performed - printf("button pressed\n"); - led_toggle(); // toggle LED - for (uint32_t i=0; i<1000000; i++) { // wait a bit to remove noise and double trigger - __asm__("nop"); - } - button_flag = false; // reset flag - } while (rtc_internal_tick_flag) { // the internal RTC ticked rtc_internal_tick_flag = false; // reset flag gpio_toggle(GPIO(LED_HEARTBEAT_PORT), GPIO(LED_HEARTBEAT_PIN)); // toggle heart beat LED to indicate if main function is stuck (do not toggle onboard the LED on PC13 on the blue pill board since this heavily influences the RTC)