From 9ee81f002453f5a2bae298dcb86ef227b4c1020b Mon Sep 17 00:00:00 2001 From: Steins7 Date: Fri, 21 Feb 2020 17:50:45 +0100 Subject: [PATCH] Got th UI to work as intended * fixed global variable not being initialized * fixed fan control formulas * inverted encoder counting + added 3D support for adapter --- cad/adapter/adapter.scad | 24 ++++++---- docs/Graphs.ods | Bin 23588 -> 21724 bytes src/drivers/timer.c | 6 +-- src/main.c | 22 +++++---- src/ui.c | 98 +++++++++++++++++++++++---------------- src/ui.h | 2 +- src/utils.h | 2 + 7 files changed, 91 insertions(+), 63 deletions(-) diff --git a/cad/adapter/adapter.scad b/cad/adapter/adapter.scad index 835a081..52425a6 100644 --- a/cad/adapter/adapter.scad +++ b/cad/adapter/adapter.scad @@ -1,37 +1,41 @@ $fn = 100; // element dimensions -w = 59; -d = 28; +w = 60; +d = 30; h = 4; // aditionnal parameters -e = 3; +e = 5; + +// internal values +we = w + e; +de = d + e; translate([0,0,e/2]); -cube([w,d,e/2], true); +cube([we,de,e/3], true); module tab() { - translate([-e/4,0,(e/2+h)/2]) { + translate([-e/4,0,(e/3+h)/2]) { cube([e/2,2*e,h], true); translate([-1.75*e,-e,h/2]) rotate([0,-90,-90]) linear_extrude(height = 2*e) - polygon([[0,e],[e/4,e],[0,2*e],[e/2,2*e]], + polygon([[0,1.2*e],[e/4,1.2*e],[0,2*e],[e/2,2*e]], [[0,1,3,2]]); } } -translate([w/2,-0.35*d,0]) +translate([we/2,-de/2+e,0]) tab(); -translate([-w/2,0,0]) +translate([-we/2,0,0]) rotate([0,0,180]) tab(); -translate([8,d/2,0]) +translate([8,de/2,0]) rotate([0,0,90]) tab(); -translate([0,-d/2,0]) +translate([0,-de/2,0]) rotate([0,0,-90]) tab(); diff --git a/docs/Graphs.ods b/docs/Graphs.ods index ab7beed45e8e7baefffc704e7dcd04ae15422280..656048a66202ae6dc2ae6fb0ad48a3761719c1dd 100644 GIT binary patch delta 15571 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 CGjW#y delta 17456 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 s4CCMR1 |= 0x9; tmr->CCMR1 |= 0x9 << 8; - // enable input channels - tmr->CCER |= 0x1; - tmr->CCER |= 0x1 << 4; + // enable input channels and invert them //TODO add an otpion for that + tmr->CCER |= 0x3; + tmr->CCER |= 0x3 << 4; tmr->CR1 |= 0x1; //enable timer diff --git a/src/main.c b/src/main.c index eecf62a..ddcd172 100644 --- a/src/main.c +++ b/src/main.c @@ -32,7 +32,7 @@ uint8_t channels[3][2] = { vars_t vars = { {}, - 2, + 5, 2, {}, 1, @@ -42,7 +42,7 @@ vars_t vars = { //------------------------------------------------------------------------------ /* Timer IRQ */ static void timeout_cb(void) { - //io_write(GPIOC, val, PIN_13); + io_write(GPIOC, val, PIN_13); val = !val; // set temp read flag @@ -64,16 +64,22 @@ int16_t read_temp(uint8_t id) { /* main function */ int main(void) { + //initialize variables + val = 0; //debug led + read_flag = 0; + sensor_id = 0; + // configure clocks (necessary before using timers) rcc_config_clock(CLOCK_CONFIG_PERFORMANCE, &sysclks); // configure GPIO for LED if(io_configure(GPIOC, PIN_13, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0)) return -1; + io_write(GPIOC, 1, PIN_13); + + // configure GPIO for relay if(io_configure(GPIOB, PIN_12, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0)) return -1; - - io_write(GPIOC, 1, PIN_13); io_write(GPIOB, 1, PIN_12); // configure GPIOS for temperature sensors @@ -98,14 +104,16 @@ int main(void) { // main loop while(1){ + // process sensor values if(read_flag) { + // clear flag read_flag = 0; // shift filter queue int32_t sum = 0; - for(int i=0; i<(FILTER_LENGTH-1); ++i) { + for(int i=0; i<(FILTER_LENGTH-2); i++) { temp_filter[sensor_id][i] = temp_filter[sensor_id][i+1]; sum += temp_filter[sensor_id][i]; } @@ -129,12 +137,10 @@ int main(void) { vars.start_treshold) { vars.fan = 1; io_set(GPIOB, PIN_12); - io_clear(GPIOC, PIN_13); - } else if((vars.temps[T_EXT] - vars.temps[vars.silo]) >= + } else if((vars.temps[vars.silo] - vars.temps[T_EXT]) <= vars.stop_treshold) { vars.fan = 0; io_clear(GPIOB, PIN_12); - io_set(GPIOC, PIN_13); } } diff --git a/src/ui.c b/src/ui.c index 2cc0a8c..5e14f37 100644 --- a/src/ui.c +++ b/src/ui.c @@ -14,18 +14,24 @@ static const char* ui_default[] = { "SILO: Te: ""\xDF""C", "1: ""\xDF""C 2: ""\xDF""C" }; + static const char* ui_menu[] = { " 1-Retour", " 2-Silo:", " 3-Start:", " 4-Stop:", - " 5-Calibrer Te", - " 6-Calibrer T1", - " 7-Calibrer T2", - " 8-Test ventil", +// " 5-Calibrer Te", +// " 6-Calibrer T1", +// " 7-Calibrer T2", +// " 8-Test ventil", " 1-Retour" }; +static const char* ui_interact[] = { + " lue: ""\xDF""C", + " reelle: ""\xDF""C" +}; + //------------------------------------------------------------------------------ /* internal functions */ void show_bg(const char** bg) { @@ -36,6 +42,42 @@ void show_bg(const char** bg) { lcd_print(bg[1]); } +void update_entry(uint8_t prev_entry, uint8_t value) { + // get vlaue in str form + char str[8]; //too long to be sure + num2str(str, value, 10); + + // print value in the correct position + if(sel == prev_entry) lcd_set_cursor(14, 1); + else lcd_set_cursor(14, 0); + lcd_print(str); +} + +void change_value(uint8_t entry, uint8_t* entry_val, int max) { + int local_val = *entry_val; + lcd_set_cursor(14,0); + while(!button_update) { + local_val = ((enc->CNT/2)%max) + 1; + char str[8]; + num2str(str, local_val, 10); + lcd_print(str); + lcd_set_cursor(14,0); + timer_wait_ms(TIM1, 200, 0); + } + *entry_val = local_val; +} + +void interact(uint8_t entry, uint8_t* entry_val) { + while(!button_update) { + lcd_set_cursor(10,0); + lcd_print(" "); + lcd_set_cursor(10,0); + + lcd_set_cursor(10,0); + lcd_print(" "); + } +} + //------------------------------------------------------------------------------ /* timeout timer cb */ static void ui_sleep(void) { @@ -44,7 +86,7 @@ static void ui_sleep(void) { /* encoder button gpio cb */ static void ui_button_cb(void) { - for(int i=0; i<10000; ++i); //avoid double trigger + for(int i=0; i<1000000; ++i); //avoid double trigger timer_start(tim); button_update = 1; } @@ -81,34 +123,6 @@ int ui_init(TIM_TypeDef* encoder, TIM_TypeDef* timeout, vars_t* vars_p) { return 0; } -void ui_update_entry(uint8_t prev_entry, uint8_t value) { - // get vlaue in str form - char str[8]; //too long to be sure - num2str(str, value, 10); - - // print value in the correct position - if(sel == prev_entry) lcd_set_cursor(14, 1); - else lcd_set_cursor(14, 0); - lcd_print(str); - -} - -void ui_change_value(uint8_t entry, uint8_t* entry_val, int max) { - int local_val = *entry_val; - lcd_set_cursor(14,0); - while(!button_update) { - local_val = ((enc->CNT/2)%max) + 1; - char str[8]; - num2str(str, local_val, 10); - lcd_print(str); - lcd_set_cursor(14,0); - timer_wait_ms(TIM1, 200, 0); - } - *entry_val = local_val; -} - - - void ui_update(void) { // manage button press if(button_update) { @@ -141,6 +155,10 @@ void ui_update(void) { } // otherwise interact with option + if(sel == UI_CAL_T_EXT || sel == UI_CAL_T1 + || sel == UI_CAL_T2) { + show_bg(ui_interact); + } lcd_send_cmd(LCD_DISP_CTRL | LCD_CTRL_DISP_ON | LCD_CTRL_CUR_ON | LCD_CTRL_BLINK_OFF); timer_start(enc); @@ -192,15 +210,15 @@ void ui_update(void) { // show silo value if needed if(sel == UI_RETURN || sel == UI_SILO) { - ui_update_entry(UI_RETURN, vars->silo); + update_entry(UI_RETURN, vars->silo); } // show start value if needed if(sel == UI_SILO || sel == UI_START) { - ui_update_entry(UI_SILO, vars->start_treshold); + update_entry(UI_SILO, vars->start_treshold); } // show start value if needed if(sel == UI_START || sel == UI_STOP) { - ui_update_entry(UI_START, vars->stop_treshold); + update_entry(UI_START, vars->stop_treshold); } } break; @@ -208,16 +226,14 @@ void ui_update(void) { case UI_INTERACT: switch(sel) { case UI_SILO: - ui_change_value(UI_SILO, &vars->silo, 2); + change_value(UI_SILO, &vars->silo, 2); break; case UI_START: - ui_change_value(UI_START, &vars->start_treshold, 9); + change_value(UI_START, &vars->start_treshold, 9); break; case UI_STOP: - ui_change_value(UI_STOP, &vars->stop_treshold, 9); + change_value(UI_STOP, &vars->stop_treshold, 9); break; - - } //--------------------- case UI_DEFAULT: diff --git a/src/ui.h b/src/ui.h index 4bcc2a0..cdce527 100644 --- a/src/ui.h +++ b/src/ui.h @@ -53,7 +53,7 @@ enum ui_menu { UI_TEST = 7 }; -#define MENU_LENGHT 7 +#define MENU_LENGHT 3 //------------------------------------------------------------------------------ /** ui_init diff --git a/src/utils.h b/src/utils.h index 7097aa0..50189a2 100644 --- a/src/utils.h +++ b/src/utils.h @@ -6,5 +6,7 @@ uint32_t num2str(char *s, int number, uint8_t base); +//void print_num(int number, + #endif