diff --git a/Core/Inc/keys.h b/Core/Inc/keys.h index 3793d97..4b32f3b 100644 --- a/Core/Inc/keys.h +++ b/Core/Inc/keys.h @@ -5,3 +5,4 @@ void keysHandler(void); void keysHandlerCallibration(void); + diff --git a/Core/Inc/my.h b/Core/Inc/my.h index 8293401..0978562 100644 --- a/Core/Inc/my.h +++ b/Core/Inc/my.h @@ -56,13 +56,7 @@ typedef enum typedef enum //перечисление для основного меню { - KPR0 , - KPR1 , - KPR2 , - KPR3 , - KPR4 , - KPR5 , - KPRSAVING, + KPR , UNITSELECT, OUT , FVCH , @@ -70,7 +64,16 @@ typedef enum // GROUND, }mainMenuState; - +typedef enum //перечисление для основного меню +{ + KPR0 , + KPR1 , + KPR2 , + KPR3 , + KPR4 , + KPR5 , + KPRSAVING +}kprEditState; typedef enum //перечисление для сервисного меню { @@ -83,7 +86,8 @@ typedef enum // }callibrationMenuState; -typedef enum{Accel = 0, +typedef enum{ + Accel = 0, Velocity, Pascal, k_Pascal, diff --git a/Core/Inc/struct.h b/Core/Inc/struct.h index 54e9523..e7aac13 100644 --- a/Core/Inc/struct.h +++ b/Core/Inc/struct.h @@ -93,6 +93,8 @@ typedef struct float SENS; // 32,33,34,35 7502 //дублирование (коэфициэнт преобразования) float ACCEL; // 32,33,34,35 7503 //Legacy a141 + uint16_t MENUPOINTER; + } UserData_TypeDef; // ********LENGTH = ** bytes*********** diff --git a/Core/Src/flash.c b/Core/Src/flash.c index 56c5458..64cab47 100644 --- a/Core/Src/flash.c +++ b/Core/Src/flash.c @@ -126,7 +126,7 @@ volatile bool rewrite = false; memcpy((void *) ¤tData, (void *) USERPAGEPAR, lenpar); //pardata.OWN = 0xffff;//todo //скоррректировать битые значения - if(currentData.OWN == 0xffff) //если первая запись и везде пусто + if(currentData.OWN == 0xffff||currentData.MENUPOINTER == 0xffff) //если первая запись и везде пусто { currentData.OWN = 1; //ставим параметры по умолчанию currentData.BAUD = 5; @@ -143,6 +143,8 @@ volatile bool rewrite = false; currentData.IK4 = 0; currentData.IK5 = 0; currentData.IPZ =0; + currentData.MENUPOINTER=0; + currentData.KCOND = 1.0f; diff --git a/Core/Src/keys.c b/Core/Src/keys.c index 7833f67..3b84963 100644 --- a/Core/Src/keys.c +++ b/Core/Src/keys.c @@ -6,6 +6,10 @@ extern UserData_TypeDef currentData; extern bool menuItemIsEditable; + +extern bool kprEditable; +extern int kprPointer; + extern int menuPointer; extern uint16_t dvd; extern int ignoreOff_flag; @@ -22,32 +26,159 @@ void keysHandler(void){ KEY_STATE = 0; - if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET) ignoreOff_flag=0; //как только кнопку включения отпустили, перестаём её игнорировать + if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET)ignoreOff_flag=0; //как только кнопку включения отпустили, перестаём её игнорировать - if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)){ + + if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)){ // если кнопка нажата второй раз то выключаемся HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET); } // if(key==OK_BTN_Pin){ //По нажатию ОК + + if(menuPointer==KPR&&kprEditable==0){ //вваливаемся в редактирование KPR + kprEditable=1; + return; + } + + if(menuPointer==KPR&&kprEditable==1){ //переходим к слудщующей цифре KPR + kprPointer++; + return; + } + if(menuItemIsEditable==0){ menuItemIsEditable=1; return; //вваливаемся в редактирование }else{menuItemIsEditable=0; + wrPar(); return;} // вываливаемся из него + } + if(kprEditable){ + switch (kprPointer) { + case KPR0: + if(key==UP_BTN_Pin) { + if((currentData.IK0<9)&&(currentData.IK0>=0)) currentData.IK0++; + else if(currentData.IK0=='~') currentData.IK0=0; + else if(currentData.IK0==9) currentData.IK0='~'; + }; + if((key==DN_BTN_Pin)) { + if(currentData.IK0==0) currentData.IK0='~'; + else if ((currentData.IK0<=9)&&(currentData.IK0>0)) currentData.IK0--; + else if(currentData.IK0='~') currentData.IK0=9; + } + break; + + case KPR1: + if((key==UP_BTN_Pin)) { + if((currentData.IK1<9)&&(currentData.IK1>=0)) currentData.IK1++; + else if(currentData.IK1=='~') currentData.IK1=0; + else if(currentData.IK1==9) currentData.IK1='~'; + } + + if((key==DN_BTN_Pin)) { + if(currentData.IK1==0) currentData.IK1='~'; + else if ((currentData.IK1<=9)&&(currentData.IK1>0)) currentData.IK1--; + else if(currentData.IK1='~') currentData.IK1=9; + } + break; + + case KPR2: + if((key==UP_BTN_Pin)) { + if((currentData.IK2<9)&&(currentData.IK2>=0)) currentData.IK2++; + else if(currentData.IK2=='~') currentData.IK2=0; + else if(currentData.IK2==9) currentData.IK2='~'; + } + + if((key==DN_BTN_Pin)) { + if(currentData.IK2==0) currentData.IK2='~'; + else if ((currentData.IK2<=9)&&(currentData.IK2>0)) currentData.IK2--; + else if(currentData.IK2='~') currentData.IK2=9; + } + break; + + case KPR3: + if((key==UP_BTN_Pin)) { + if((currentData.IK3<9)&&(currentData.IK3>=0)) currentData.IK3++; + else if(currentData.IK3=='~') currentData.IK3=0; + else if(currentData.IK3==9) currentData.IK3='~'; + } + + if((key==DN_BTN_Pin)) { + if(currentData.IK3==0) currentData.IK3='~'; + else if ((currentData.IK3<=9)&&(currentData.IK3>0)) currentData.IK3--; + else if(currentData.IK3='~') currentData.IK3=9; + } + break; + + case KPR4: + if((key==UP_BTN_Pin)) { + if((currentData.IK4<9)&&(currentData.IK4>=0)) currentData.IK4++; + else if(currentData.IK4=='~') currentData.IK4=0; + else if(currentData.IK4==9) currentData.IK4='~'; + } + + if((key==DN_BTN_Pin)) { + if(currentData.IK4==0) currentData.IK4='~'; + else if ((currentData.IK4<=9)&&(currentData.IK4>0)) currentData.IK4--; + else if(currentData.IK4='~') currentData.IK4=9; + } + break; + + case KPR5: + if((key==UP_BTN_Pin)) { + if((currentData.IK5<9)&&(currentData.IK5>=0)) currentData.IK5++; + else if(currentData.IK5=='~') currentData.IK5=0; + else if(currentData.IK5==9) currentData.IK5='~'; + } + + if((key==DN_BTN_Pin)) { + if(currentData.IK5==0) currentData.IK5='~'; + else if ((currentData.IK5<=9)&&(currentData.IK5>0)) currentData.IK5--; + else if(currentData.IK5='~') currentData.IK5=9; + } + break; + default: + kpr_temp[0]=currentData.IK0; + kpr_temp[1]=currentData.IK1; + kpr_temp[2]=currentData.IK2; + kpr_temp[3]=currentData.IK3; + kpr_temp[4]=currentData.IK4; + kpr_temp[5]=currentData.IK5; + + if (asciiToFloat4(kpr_temp)||currentData.SENS<0.001||currentData.SENS>1000){ //введено некорректное значение + currentData.IK0=kpr_temp[0]; + currentData.IK1=kpr_temp[1]; + currentData.IK2=kpr_temp[2]; + currentData.IK3=kpr_temp[3]; + currentData.IK4=kpr_temp[4]; + currentData.IK5=kpr_temp[5]; + kprPointer=KPR0; // ПЕРЕСКОЧИТ САМ + //пишем что значения не верны + //рисуем нули + } + else + {sh_applysetting(¤tData); + wrPar(); + kprEditable=0; + kprPointer=0;} + break; + + } + return; //если попали в этот иф не нужно отрабатывать дальнейшие кнопки + } if(!menuItemIsEditable){ if(key==UP_BTN_Pin){ //По нажатию ОК - if(menuPointer==KPR0){menuPointer=GROUND;} //todo сделай сохранение //Если крайний пункт меню то возвращаемся + if(menuPointer==KPR){menuPointer=GROUND;} //todo сделай сохранение //Если крайний пункт меню то возвращаемся else menuPointer--; //иначе следующий пункт } if(key==DN_BTN_Pin){ //По нажатию ОК - if(menuPointer==GROUND){menuPointer=KPR0;} //todo сделай сохранение //Если крайний пункт меню то возвращаемся - else menuPointer++; //иначе следующий пункт + if(menuPointer==GROUND){menuPointer=KPR;} //todo сделай сохранение //Если крайний пункт меню то возвращаемся + else menuPointer++; //иначе следующий пункт } } @@ -56,122 +187,12 @@ void keysHandler(void){ if(menuItemIsEditable){ switch (menuPointer){ - - case KPR0: - if(key==UP_BTN_Pin) { - if((currentData.IK0<9)&&(currentData.IK0>=0)) currentData.IK0++; - else if(currentData.IK0=='~') currentData.IK0=0; - else if(currentData.IK0==9) currentData.IK0='~'; - }; - if((key==DN_BTN_Pin)) { - if(currentData.IK0==0) currentData.IK0='~'; - else if ((currentData.IK0<=9)&&(currentData.IK0>0)) currentData.IK0--; - else if(currentData.IK0='~') currentData.IK0=9; - } - break; - - case KPR1: - if((key==UP_BTN_Pin)) { - if((currentData.IK1<9)&&(currentData.IK1>=0)) currentData.IK1++; - else if(currentData.IK1=='~') currentData.IK1=0; - else if(currentData.IK1==9) currentData.IK1='~'; - } - - if((key==DN_BTN_Pin)) { - if(currentData.IK1==0) currentData.IK1='~'; - else if ((currentData.IK1<=9)&&(currentData.IK1>0)) currentData.IK1--; - else if(currentData.IK1='~') currentData.IK1=9; - } - break; - - case KPR2: - if((key==UP_BTN_Pin)) { - if((currentData.IK2<9)&&(currentData.IK2>=0)) currentData.IK2++; - else if(currentData.IK2=='~') currentData.IK2=0; - else if(currentData.IK2==9) currentData.IK2='~'; - } - - if((key==DN_BTN_Pin)) { - if(currentData.IK2==0) currentData.IK2='~'; - else if ((currentData.IK2<=9)&&(currentData.IK2>0)) currentData.IK2--; - else if(currentData.IK2='~') currentData.IK2=9; - } - break; - - case KPR3: - if((key==UP_BTN_Pin)) { - if((currentData.IK3<9)&&(currentData.IK3>=0)) currentData.IK3++; - else if(currentData.IK3=='~') currentData.IK3=0; - else if(currentData.IK3==9) currentData.IK3='~'; - } - - if((key==DN_BTN_Pin)) { - if(currentData.IK3==0) currentData.IK3='~'; - else if ((currentData.IK3<=9)&&(currentData.IK3>0)) currentData.IK3--; - else if(currentData.IK3='~') currentData.IK3=9; - } - break; - - - - case KPR4: - if((key==UP_BTN_Pin)) { - if((currentData.IK4<9)&&(currentData.IK4>=0)) currentData.IK4++; - else if(currentData.IK4=='~') currentData.IK4=0; - else if(currentData.IK4==9) currentData.IK4='~'; - } - - if((key==DN_BTN_Pin)) { - if(currentData.IK4==0) currentData.IK4='~'; - else if ((currentData.IK4<=9)&&(currentData.IK4>0)) currentData.IK4--; - else if(currentData.IK4='~') currentData.IK4=9; - } - break; - - case KPR5: - if((key==UP_BTN_Pin)) { - if((currentData.IK5<9)&&(currentData.IK5>=0)) currentData.IK5++; - else if(currentData.IK5=='~') currentData.IK5=0; - else if(currentData.IK5==9) currentData.IK5='~'; - } - - if((key==DN_BTN_Pin)) { - if(currentData.IK5==0) currentData.IK5='~'; - else if ((currentData.IK5<=9)&&(currentData.IK5>0)) currentData.IK5--; - else if(currentData.IK5='~') currentData.IK5=9; - } - - break; - - - case KPRSAVING: - kpr_temp[0]=currentData.IK0; - kpr_temp[1]=currentData.IK1; - kpr_temp[2]=currentData.IK2; - kpr_temp[3]=currentData.IK3; - kpr_temp[4]=currentData.IK4; - kpr_temp[5]=currentData.IK5; - - if (asciiToFloat4(kpr_temp)||currentData.SENS<0.001||currentData.SENS>1000){ //введено некорректное значение - currentData.IK0=kpr_temp[0]; - currentData.IK1=kpr_temp[1]; - currentData.IK2=kpr_temp[2]; - currentData.IK3=kpr_temp[3]; - currentData.IK4=kpr_temp[4]; - currentData.IK5=kpr_temp[5]; - menuPointer=KPR0; // ПЕРЕСКОЧИТ САМ - //пишем что значения не верны - //рисуем нули - } - else - {sh_applysetting(¤tData); - menuPointer++;} - break; - - case UNITSELECT: - if((key==UP_BTN_Pin)&&(currentData.UNITAccel)) {currentData.UNIT--; sh_applysetting(¤tData);} + if((key==DN_BTN_Pin)&&(currentData.UNIT==Accel)) {currentData.UNIT=mV; sh_applysetting(¤tData);} break; case OUT: @@ -193,6 +214,7 @@ if(menuItemIsEditable){ if((key==UP_BTN_Pin)) {currentData.IPZ=1; sh_applysetting(¤tData);} if((key==DN_BTN_Pin)) {currentData.IPZ=0; sh_applysetting(¤tData);} break; + /* case SAVING: wrPar(); @@ -214,9 +236,11 @@ void keysHandlerCallibration(void){ KEY_STATE = 0; if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET) ignoreOff_flag=0; //как только кнопку включения отпустили, перестаём её игнорировать - if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)) - { wrCor(); - HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET);} // + + if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)){ + wrCor(); + HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET); + } // if(key==OK_BTN_Pin){ //По нажатию ОК //if(menuPointer==GROUND){menuPointer=WORK;} //todo сделай сохранение //Если крайний пункт меню то возвращаемся к работе diff --git a/Core/Src/main.c b/Core/Src/main.c index 5306273..5d84bc0 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -83,9 +83,7 @@ void check_reload(void); // todo int main(void) { - - - HAL_Init(); + HAL_Init(); SystemClock_Config(); MX_FLASH_Init(); MX_GPIO_Init(); @@ -102,8 +100,8 @@ int main(void) /////Делем старт экрану - ssd1306_Init(); HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //фиксируем питание прибора + ssd1306_Init(); if(HAL_GPIO_ReadPin(OK_BTN_GPIO_Port, OK_BTN_Pin) == GPIO_PIN_RESET){workMode=CALLIBRATION;} // при удерживании кнопки переключаемся в заводской режим работы DrawLogo(); ssd1306_Fill(Black); @@ -112,6 +110,7 @@ int main(void) if(workMode==NORMAL){screenDraw(); // todo: Убрать костыль!!! Считаем в экране значение на DAC. + menuPointer=currentData.MENUPOINTER; //читаем текущий пункт из памяти sh_applysetting(¤tData); }// применяем настройки из стуктуры с ЦАП на всю while (workMode==NORMAL){ @@ -126,6 +125,7 @@ int main(void) check_reload(); keysHandler(); + currentData.MENUPOINTER=menuPointer; if(RefreshScreen){ screenDraw(); diff --git a/Core/Src/my.c b/Core/Src/my.c index d403613..18c7d59 100644 --- a/Core/Src/my.c +++ b/Core/Src/my.c @@ -265,10 +265,15 @@ void PulseDrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){ // //static int pulseTime; //static bool isHiden; -if(!pulseTime) pulseTime=HAL_GetTick()+200; //ты у именя первый +if(!pulseTime) pulseTime=HAL_GetTick()+10; //ты у именя первый if(pulseTime