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
This commit is contained in:
parent
c7af2f2b59
commit
9ee81f0024
@ -1,37 +1,41 @@
|
|||||||
$fn = 100;
|
$fn = 100;
|
||||||
|
|
||||||
// element dimensions
|
// element dimensions
|
||||||
w = 59;
|
w = 60;
|
||||||
d = 28;
|
d = 30;
|
||||||
h = 4;
|
h = 4;
|
||||||
|
|
||||||
// aditionnal parameters
|
// aditionnal parameters
|
||||||
e = 3;
|
e = 5;
|
||||||
|
|
||||||
|
// internal values
|
||||||
|
we = w + e;
|
||||||
|
de = d + e;
|
||||||
|
|
||||||
translate([0,0,e/2]);
|
translate([0,0,e/2]);
|
||||||
cube([w,d,e/2], true);
|
cube([we,de,e/3], true);
|
||||||
module tab() {
|
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);
|
cube([e/2,2*e,h], true);
|
||||||
translate([-1.75*e,-e,h/2])
|
translate([-1.75*e,-e,h/2])
|
||||||
rotate([0,-90,-90])
|
rotate([0,-90,-90])
|
||||||
linear_extrude(height = 2*e)
|
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]]);
|
[[0,1,3,2]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([w/2,-0.35*d,0])
|
translate([we/2,-de/2+e,0])
|
||||||
tab();
|
tab();
|
||||||
|
|
||||||
translate([-w/2,0,0])
|
translate([-we/2,0,0])
|
||||||
rotate([0,0,180])
|
rotate([0,0,180])
|
||||||
tab();
|
tab();
|
||||||
|
|
||||||
translate([8,d/2,0])
|
translate([8,de/2,0])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
tab();
|
tab();
|
||||||
|
|
||||||
translate([0,-d/2,0])
|
translate([0,-de/2,0])
|
||||||
rotate([0,0,-90])
|
rotate([0,0,-90])
|
||||||
tab();
|
tab();
|
||||||
|
|||||||
BIN
docs/Graphs.ods
BIN
docs/Graphs.ods
Binary file not shown.
@ -300,9 +300,9 @@ int timer_enc_init(TIM_TypeDef* tmr) {
|
|||||||
tmr->CCMR1 |= 0x9;
|
tmr->CCMR1 |= 0x9;
|
||||||
tmr->CCMR1 |= 0x9 << 8;
|
tmr->CCMR1 |= 0x9 << 8;
|
||||||
|
|
||||||
// enable input channels
|
// enable input channels and invert them //TODO add an otpion for that
|
||||||
tmr->CCER |= 0x1;
|
tmr->CCER |= 0x3;
|
||||||
tmr->CCER |= 0x1 << 4;
|
tmr->CCER |= 0x3 << 4;
|
||||||
|
|
||||||
tmr->CR1 |= 0x1; //enable timer
|
tmr->CR1 |= 0x1; //enable timer
|
||||||
|
|
||||||
|
|||||||
22
src/main.c
22
src/main.c
@ -32,7 +32,7 @@ uint8_t channels[3][2] = {
|
|||||||
|
|
||||||
vars_t vars = {
|
vars_t vars = {
|
||||||
{},
|
{},
|
||||||
2,
|
5,
|
||||||
2,
|
2,
|
||||||
{},
|
{},
|
||||||
1,
|
1,
|
||||||
@ -42,7 +42,7 @@ vars_t vars = {
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/* Timer IRQ */
|
/* Timer IRQ */
|
||||||
static void timeout_cb(void) {
|
static void timeout_cb(void) {
|
||||||
//io_write(GPIOC, val, PIN_13);
|
io_write(GPIOC, val, PIN_13);
|
||||||
val = !val;
|
val = !val;
|
||||||
|
|
||||||
// set temp read flag
|
// set temp read flag
|
||||||
@ -64,16 +64,22 @@ int16_t read_temp(uint8_t id) {
|
|||||||
/* main function */
|
/* main function */
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
|
//initialize variables
|
||||||
|
val = 0; //debug led
|
||||||
|
read_flag = 0;
|
||||||
|
sensor_id = 0;
|
||||||
|
|
||||||
// configure clocks (necessary before using timers)
|
// configure clocks (necessary before using timers)
|
||||||
rcc_config_clock(CLOCK_CONFIG_PERFORMANCE, &sysclks);
|
rcc_config_clock(CLOCK_CONFIG_PERFORMANCE, &sysclks);
|
||||||
|
|
||||||
// configure GPIO for LED
|
// configure GPIO for LED
|
||||||
if(io_configure(GPIOC, PIN_13, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0))
|
if(io_configure(GPIOC, PIN_13, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0))
|
||||||
return -1;
|
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))
|
if(io_configure(GPIOB, PIN_12, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
io_write(GPIOC, 1, PIN_13);
|
|
||||||
io_write(GPIOB, 1, PIN_12);
|
io_write(GPIOB, 1, PIN_12);
|
||||||
|
|
||||||
// configure GPIOS for temperature sensors
|
// configure GPIOS for temperature sensors
|
||||||
@ -98,14 +104,16 @@ int main(void) {
|
|||||||
|
|
||||||
// main loop
|
// main loop
|
||||||
while(1){
|
while(1){
|
||||||
|
|
||||||
// process sensor values
|
// process sensor values
|
||||||
if(read_flag) {
|
if(read_flag) {
|
||||||
|
|
||||||
// clear flag
|
// clear flag
|
||||||
read_flag = 0;
|
read_flag = 0;
|
||||||
|
|
||||||
// shift filter queue
|
// shift filter queue
|
||||||
int32_t sum = 0;
|
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];
|
temp_filter[sensor_id][i] = temp_filter[sensor_id][i+1];
|
||||||
sum += temp_filter[sensor_id][i];
|
sum += temp_filter[sensor_id][i];
|
||||||
}
|
}
|
||||||
@ -129,12 +137,10 @@ int main(void) {
|
|||||||
vars.start_treshold) {
|
vars.start_treshold) {
|
||||||
vars.fan = 1;
|
vars.fan = 1;
|
||||||
io_set(GPIOB, PIN_12);
|
io_set(GPIOB, PIN_12);
|
||||||
io_clear(GPIOC, PIN_13);
|
} else if((vars.temps[vars.silo] - vars.temps[T_EXT]) <=
|
||||||
} else if((vars.temps[T_EXT] - vars.temps[vars.silo]) >=
|
|
||||||
vars.stop_treshold) {
|
vars.stop_treshold) {
|
||||||
vars.fan = 0;
|
vars.fan = 0;
|
||||||
io_clear(GPIOB, PIN_12);
|
io_clear(GPIOB, PIN_12);
|
||||||
io_set(GPIOC, PIN_13);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
98
src/ui.c
98
src/ui.c
@ -14,18 +14,24 @@ static const char* ui_default[] = {
|
|||||||
"SILO: Te: ""\xDF""C",
|
"SILO: Te: ""\xDF""C",
|
||||||
"1: ""\xDF""C 2: ""\xDF""C"
|
"1: ""\xDF""C 2: ""\xDF""C"
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* ui_menu[] = {
|
static const char* ui_menu[] = {
|
||||||
" 1-Retour",
|
" 1-Retour",
|
||||||
" 2-Silo:",
|
" 2-Silo:",
|
||||||
" 3-Start:",
|
" 3-Start:",
|
||||||
" 4-Stop:",
|
" 4-Stop:",
|
||||||
" 5-Calibrer Te",
|
// " 5-Calibrer Te",
|
||||||
" 6-Calibrer T1",
|
// " 6-Calibrer T1",
|
||||||
" 7-Calibrer T2",
|
// " 7-Calibrer T2",
|
||||||
" 8-Test ventil",
|
// " 8-Test ventil",
|
||||||
" 1-Retour"
|
" 1-Retour"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char* ui_interact[] = {
|
||||||
|
" lue: ""\xDF""C",
|
||||||
|
" reelle: ""\xDF""C"
|
||||||
|
};
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/* internal functions */
|
/* internal functions */
|
||||||
void show_bg(const char** bg) {
|
void show_bg(const char** bg) {
|
||||||
@ -36,6 +42,42 @@ void show_bg(const char** bg) {
|
|||||||
lcd_print(bg[1]);
|
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 */
|
/* timeout timer cb */
|
||||||
static void ui_sleep(void) {
|
static void ui_sleep(void) {
|
||||||
@ -44,7 +86,7 @@ static void ui_sleep(void) {
|
|||||||
|
|
||||||
/* encoder button gpio cb */
|
/* encoder button gpio cb */
|
||||||
static void ui_button_cb(void) {
|
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);
|
timer_start(tim);
|
||||||
button_update = 1;
|
button_update = 1;
|
||||||
}
|
}
|
||||||
@ -81,34 +123,6 @@ int ui_init(TIM_TypeDef* encoder, TIM_TypeDef* timeout, vars_t* vars_p) {
|
|||||||
return 0;
|
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) {
|
void ui_update(void) {
|
||||||
// manage button press
|
// manage button press
|
||||||
if(button_update) {
|
if(button_update) {
|
||||||
@ -141,6 +155,10 @@ void ui_update(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// otherwise interact with option
|
// 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_send_cmd(LCD_DISP_CTRL | LCD_CTRL_DISP_ON |
|
||||||
LCD_CTRL_CUR_ON | LCD_CTRL_BLINK_OFF);
|
LCD_CTRL_CUR_ON | LCD_CTRL_BLINK_OFF);
|
||||||
timer_start(enc);
|
timer_start(enc);
|
||||||
@ -192,15 +210,15 @@ void ui_update(void) {
|
|||||||
|
|
||||||
// show silo value if needed
|
// show silo value if needed
|
||||||
if(sel == UI_RETURN || sel == UI_SILO) {
|
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
|
// show start value if needed
|
||||||
if(sel == UI_SILO || sel == UI_START) {
|
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
|
// show start value if needed
|
||||||
if(sel == UI_START || sel == UI_STOP) {
|
if(sel == UI_START || sel == UI_STOP) {
|
||||||
ui_update_entry(UI_START, vars->stop_treshold);
|
update_entry(UI_START, vars->stop_treshold);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -208,16 +226,14 @@ void ui_update(void) {
|
|||||||
case UI_INTERACT:
|
case UI_INTERACT:
|
||||||
switch(sel) {
|
switch(sel) {
|
||||||
case UI_SILO:
|
case UI_SILO:
|
||||||
ui_change_value(UI_SILO, &vars->silo, 2);
|
change_value(UI_SILO, &vars->silo, 2);
|
||||||
break;
|
break;
|
||||||
case UI_START:
|
case UI_START:
|
||||||
ui_change_value(UI_START, &vars->start_treshold, 9);
|
change_value(UI_START, &vars->start_treshold, 9);
|
||||||
break;
|
break;
|
||||||
case UI_STOP:
|
case UI_STOP:
|
||||||
ui_change_value(UI_STOP, &vars->stop_treshold, 9);
|
change_value(UI_STOP, &vars->stop_treshold, 9);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//---------------------
|
//---------------------
|
||||||
case UI_DEFAULT:
|
case UI_DEFAULT:
|
||||||
|
|||||||
2
src/ui.h
2
src/ui.h
@ -53,7 +53,7 @@ enum ui_menu {
|
|||||||
UI_TEST = 7
|
UI_TEST = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MENU_LENGHT 7
|
#define MENU_LENGHT 3
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/** ui_init
|
/** ui_init
|
||||||
|
|||||||
@ -6,5 +6,7 @@
|
|||||||
|
|
||||||
uint32_t num2str(char *s, int number, uint8_t base);
|
uint32_t num2str(char *s, int number, uint8_t base);
|
||||||
|
|
||||||
|
//void print_num(int number,
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user