Browse Source

update

3lead_uart_test_ok_version
zhaohe 1 year ago
parent
commit
609d600d36
  1. 8
      app/src/basic/ssd1306/wave_drawer.c
  2. 75
      app/src/one_conduction/display_manager.c
  3. 34
      app/src/one_conduction/heart_wave_sample_service.c

8
app/src/basic/ssd1306/wave_drawer.c

@ -2,6 +2,8 @@
#include "znordic.h"
static bool m_draw_scan_line = false;
void wave_drawer_init(wave_drawer_t *dw, uint8_t xs, uint8_t ys, uint16_t width, uint16_t high) {
dw->xs = xs;
dw->ys = ys;
@ -67,7 +69,11 @@ void wave_drawer_draw_next_point(wave_drawer_t *dw, uint8_t y) {
*/
for (size_t yoff = 0; yoff < dw->high; yoff++) {
if (xpos + 1 <= dw->xright) {
ssd1306_gram_write_point(ssd1306_handler(), xpos + 1, dw->ybottom - yoff, 1);
if (m_draw_scan_line) {
ssd1306_gram_write_point(ssd1306_handler(), xpos + 1, dw->ybottom - yoff, 1);
} else {
ssd1306_gram_write_point(ssd1306_handler(), xpos + 1, dw->ybottom - yoff, 0);
}
}
for (uint8_t i = 2; i < 2 + 20; i++) {
if (xpos + i <= dw->xright) {

75
app/src/one_conduction/display_manager.c

@ -214,7 +214,7 @@ typedef struct {
int heartrate_y;
} sample_page_state_t;
sample_page_state_t m_sample_page_state;
#if 0
void dsp_mgr_change_to_sampling(int progress_s, int heartrate) { //
sample_page_state_t* sps = &m_sample_page_state;
@ -274,6 +274,73 @@ void samplePage_update_state(int progress_s, int wave_y, int heartrate, bool upd
}
if (update_screen) ssd1306_basic_gram_update();
}
#endif
void dsp_mgr_change_to_sampling(int progress_s, int heartrate) { //
sample_page_state_t* sps = &m_sample_page_state;
sps->progress_x = SMAPLE_PAGE_START_X + 1;
sps->progress_y = SMAPLE_PAGE_START_Y;
sps->progress_width = 110;
sps->progress_hight = 8;
sps->wave_drawser_x = SMAPLE_PAGE_START_X;
sps->wave_drawser_y = SMAPLE_PAGE_START_Y + sps->progress_hight + 10;
sps->wave_drawser_hight = 40;
sps->wave_drawser_width = 100;
sps->heartrate_x = sps->wave_drawser_x + sps->wave_drawser_width + 5;
sps->heartrate_y = sps->wave_drawser_y;
int progress = progress_s / 30.0 * 25;
uint8_t xchange, ychange;
ssd1306_basic_clear_gram();
/**
* @brief
* =============== o
* | | ÐÄ
* | wave |
* | | ÐÄÂÊ
*/
ssd1306_basic_draw_progress(sps->progress_x, sps->progress_y, sps->progress_width, sps->progress_hight, 25, progress);
ssd1306_basic_draw_str(sps->progress_x + sps->progress_width + 2, sps->progress_y, &xchange, &ychange, "x", &font8x8_xo_lib);
wave_drawer_init(&sps->wave_drawer, sps->wave_drawser_x, sps->wave_drawser_y, sps->wave_drawser_width, sps->wave_drawser_hight);
wave_drawer_draw_border(&sps->wave_drawer);
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y, &xchange, &ychange, "<>", &font_asicc16x8_lib);
if (heartrate <= 0) {
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, "-- ", &font_asicc16x8_lib);
} else {
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, fmt("%3d", heartrate), &font_asicc16x8_lib);
}
ssd1306_basic_gram_update();
dsp_mgr_change_to_page(kPage_sampling);
}
void samplePage_update_state(int progress_s, int wave_y, int heartrate, bool update_screen) { //
sample_page_state_t* sps = &m_sample_page_state;
uint8_t xchange, ychange;
int progress = progress_s / 30.0 * 25;
ssd1306_basic_draw_progress(sps->progress_x, sps->progress_y, sps->progress_width, sps->progress_hight, 25, progress);
if (progress_s / 10 >= 3) {
ssd1306_basic_draw_str(sps->progress_x + sps->progress_width + 2, sps->progress_y, &xchange, &ychange, "o", &font8x8_xo_lib);
} else {
ssd1306_basic_draw_str(sps->progress_x + sps->progress_width + 2, sps->progress_y, &xchange, &ychange, "x", &font8x8_xo_lib);
}
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y, &xchange, &ychange, "<>", &font_asicc16x8_lib);
if (heartrate <= 0) {
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, "-- ", &font_asicc16x8_lib);
} else {
ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, fmt("%3d", heartrate), &font_asicc16x8_lib);
}
wave_drawer_draw_next_point(&sps->wave_drawer, wave_y);
if (update_screen) ssd1306_basic_gram_update();
}
void samplePage_schedule() {
static int count = 0;
@ -282,10 +349,12 @@ void samplePage_schedule() {
int wave_y = (int)hwss_read_val();
int heartrate = (int)hwss_read_heart_rate();
// ZLOGI("samplePage_schedule %d %d %d", capturetime, wave_y, heartrate);
samplePage_update_state(capturetime / 1000, wave_y, heartrate, count % 3 == 0);
samplePage_update_state(capturetime / 1000, wave_y, heartrate, count % 10 == 0);
}
//
/*******************************************************************************
* samplingError *
*******************************************************************************/
void dsp_mgr_change_to_samplingError() {
/**
* @brief

34
app/src/one_conduction/heart_wave_sample_service.c

@ -31,12 +31,42 @@ static void swap_buffer() {
m_capture_buffer_index = 0;
return;
}
static float amp_val(uint16_t val, uint16_t valcener, float amp) {
float valf = (float)val - valcener;
valf = valf * amp;
valf += valcener;
if (valf >= 100) {
valf = 100;
}
if (valf <= 0) {
valf = 0;
}
return valf;
}
typedef struct {
float value;
float efectiveFactor;
} filter_t;
filter_t m_filter = {0, 0.8};
static float Filter(filter_t* filter, float newInput) {
float newv = ((float)filter->value * (1.0f - filter->efectiveFactor)) + ((float)newInput * filter->efectiveFactor);
filter->value = newv;
return newv;
}
void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { //
uint16_t val = SingleLeadECG_battery_get_adc_val(); // 12bit
m_real_time_data = (float)val / 4096.0f * 100;
ZLOGI("%d", val);
float val_af100 = (float)val / 4096.0f * 100;
val_af100 = amp_val(val_af100, 50, 1.8f);
val_af100 = Filter(&m_filter, val_af100);
m_real_time_data = val_af100;
// ZLOGI("%d", val);
if (m_capture_buffer == NULL) {
swap_buffer();

Loading…
Cancel
Save