main
dplimin 2024-05-07 15:04:29 +03:00
parent 029488b1e2
commit 19cbe5e6e2
9 changed files with 290 additions and 174 deletions

View File

@ -5,3 +5,4 @@
void keysHandler(void);
void keysHandlerCallibration(void);

View File

@ -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,

View File

@ -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***********

View File

@ -126,7 +126,7 @@ volatile bool rewrite = false;
memcpy((void *) &currentData, (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;

View File

@ -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;
@ -24,39 +28,34 @@ void keysHandler(void){
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(!menuItemIsEditable){
if(key==UP_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==KPR0){menuPointer=GROUND;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer--; //èíà÷å ñëåäóþùèé ïóíêò
}
if(key==DN_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==GROUND){menuPointer=KPR0;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
}
if(menuItemIsEditable){
switch (menuPointer){
if(kprEditable){
switch (kprPointer) {
case KPR0:
if(key==UP_BTN_Pin) {
if((currentData.IK0<9)&&(currentData.IK0>=0)) currentData.IK0++;
@ -112,8 +111,6 @@ if(menuItemIsEditable){
}
break;
case KPR4:
if((key==UP_BTN_Pin)) {
if((currentData.IK4<9)&&(currentData.IK4>=0)) currentData.IK4++;
@ -140,11 +137,8 @@ if(menuItemIsEditable){
else if ((currentData.IK5<=9)&&(currentData.IK5>0)) currentData.IK5--;
else if(currentData.IK5='~') currentData.IK5=9;
}
break;
case KPRSAVING:
default:
kpr_temp[0]=currentData.IK0;
kpr_temp[1]=currentData.IK1;
kpr_temp[2]=currentData.IK2;
@ -159,19 +153,46 @@ if(menuItemIsEditable){
currentData.IK3=kpr_temp[3];
currentData.IK4=kpr_temp[4];
currentData.IK5=kpr_temp[5];
menuPointer=KPR0; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
kprPointer=KPR0; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
//ïèøåì ÷òî çíà÷åíèÿ íå âåðíû
//ðèñóåì íóëè
}
else
{sh_applysetting(&currentData);
menuPointer++;}
wrPar();
kprEditable=0;
kprPointer=0;}
break;
}
return; //åñëè ïîïàëè â ýòîò èô íå íóæíî îòðàáàòûâàòü äàëüíåéøèå êíîïêè
}
if(!menuItemIsEditable){
if(key==UP_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==KPR){menuPointer=GROUND;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer--; //èíà÷å ñëåäóþùèé ïóíêò
}
if(key==DN_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==GROUND){menuPointer=KPR;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
}
if(menuItemIsEditable){
switch (menuPointer){
case UNITSELECT:
if((key==UP_BTN_Pin)&&(currentData.UNIT<mV)){currentData.UNIT++; sh_applysetting(&currentData);}
if((key==UP_BTN_Pin)&&(currentData.UNIT==mV)) {currentData.UNIT=Accel; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.UNIT>Accel)) {currentData.UNIT--; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.UNIT==Accel)) {currentData.UNIT=mV; sh_applysetting(&currentData);}
break;
case OUT:
@ -193,6 +214,7 @@ if(menuItemIsEditable){
if((key==UP_BTN_Pin)) {currentData.IPZ=1; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)) {currentData.IPZ=0; sh_applysetting(&currentData);}
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 ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ ê ðàáîòå

View File

@ -83,8 +83,6 @@ void check_reload(void); // todo
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_FLASH_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(&currentData); }// ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ
while (workMode==NORMAL){
@ -126,6 +125,7 @@ int main(void)
check_reload();
keysHandler();
currentData.MENUPOINTER=menuPointer;
if(RefreshScreen){
screenDraw();

View File

@ -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; //<2F><> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(!pulseTime) pulseTime=HAL_GetTick()+10; //ňű ó čěĺí˙ ďĺđâűé
if(pulseTime<HAL_GetTick()){ // если текущее время больше чем пульс тайм или некоректно, например тики переполнились
if(isHiden){pulseTime=HAL_GetTick()+900;}
else
pulseTime=HAL_GetTick()+10;// č ń÷čňŕĺě âđĺě˙ ńëĺäóţůĺăî ďóëüńŕ
isHiden=!isHiden; // меняем состояние
pulseTime=HAL_GetTick()+200;// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
if (!isHiden) DrawSome(some, x, y, mode); // если не скрыт то рисуем
@ -280,10 +285,15 @@ if(!pulseTime) pulseTime=HAL_GetTick()+200; //
void PulseDrawStr(char *str, uint8_t x, uint8_t y, uint8_t mode){ //Моргаем надписью
if(!pulseTime)pulseTime=HAL_GetTick()+200; //<2F><> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(!pulseTime)pulseTime=HAL_GetTick()+10; //ňű ó čěĺí˙ ďĺđâűé
if(pulseTime<HAL_GetTick()){ // если текущее время больше чем пульс тайм или некоректно, например тики переполнились
if(isHiden){pulseTime=HAL_GetTick()+900;}
else
pulseTime=HAL_GetTick()+10;// č ń÷čňŕĺě âđĺě˙ ńëĺäóţůĺăî ďóëüńŕ
isHiden=!isHiden; // меняем состояние
pulseTime=HAL_GetTick()+200;// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
if (!isHiden)

View File

@ -2,7 +2,7 @@
#include "struct.h"
#include "my.h"
extern int menuPointer;
extern int reload_flag;
extern char* kPrToDispl;
@ -10,7 +10,10 @@ extern UserData_TypeDef currentData;
extern float kNormToDAC;
extern uint16_t correctedKu[13];
extern int menuPointer;
bool menuItemIsEditable=0;
bool kprEditable=0;
int kprPointer=0;
extern uint8_t iobuf[256];
@ -232,43 +235,113 @@ void screenDraw(void)
FontSet(Segoe_UI_Rus_10);
OLED_DrawStr(STRING_DATCHIK, 1, 10, TEXT);
if(menuPointer==KPR0){
if(!menuItemIsEditable)DrawSome(currentData.IK0, 30, 10, CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK0, 30, 10, CURSOR);
//ïðèâåò!!!! ÿ âåëîñèïåä è êîñòûëè ÷òî áû ðàññòàâèòü öèôðû ÊÏÐ áåç ïðîáåëîâ
int ik0posX, ik1posX, ik2posX, ik3posX, ik4posX, ik5posX;
ik0posX=30;
if (currentData.IK0==0){ik1posX=ik0posX+7;}
else if (currentData.IK0=='~'){ik1posX=ik0posX+2;}
else{ik1posX=ik0posX+6;}
if (currentData.IK1==0){ik2posX=ik1posX+7;}
else if (currentData.IK1=='~'){ik2posX=ik1posX+2;}
else{ik2posX=ik1posX+6;}
if (currentData.IK2==0){ik3posX=ik2posX+7;}
else if (currentData.IK2=='~'){ik3posX=ik2posX+2;}
else{ik3posX=ik2posX+6;}
if (currentData.IK3==0){ik4posX=ik3posX+7;}
else if (currentData.IK3=='~'){ik4posX=ik3posX+2;}
else{ik4posX=ik3posX+6;}
if (currentData.IK4==0){ik5posX=ik4posX+7;}
else if (currentData.IK4=='~'){ik5posX=ik4posX+2;}
else{ik5posX=ik4posX+6;}
if(menuPointer==KPR){
if(!kprEditable){
DrawSome(currentData.IK0, ik0posX, 10, CURSOR);
DrawSome(currentData.IK1, ik1posX, 10, CURSOR);
DrawSome(currentData.IK2, ik2posX, 10, CURSOR);
DrawSome(currentData.IK3, ik3posX, 10, CURSOR);
DrawSome(currentData.IK4, ik4posX, 10, CURSOR);
DrawSome(currentData.IK5, ik5posX, 10, CURSOR);
}
else DrawSome(currentData.IK0, 30, 10, TEXT);
if(kprEditable){
switch (kprPointer){
case KPR0:
PulseDrawSome(currentData.IK0, ik0posX, 10, CURSOR);
PulseDrawSome(currentData.IK1, ik1posX, 10, TEXT);
PulseDrawSome(currentData.IK2, ik2posX, 10, TEXT);
PulseDrawSome(currentData.IK3, ik3posX, 10, TEXT);
PulseDrawSome(currentData.IK4, ik4posX, 10, TEXT);
PulseDrawSome(currentData.IK5, ik5posX, 10,TEXT);
break;
if(menuPointer==KPR1) {
if(!menuItemIsEditable)DrawSome(currentData.IK1, 37, 10, CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK1, 37, 10, CURSOR);
case KPR1:
PulseDrawSome(currentData.IK0, ik0posX, 10, TEXT);
PulseDrawSome(currentData.IK1, ik1posX, 10, CURSOR);
PulseDrawSome(currentData.IK2, ik2posX, 10, TEXT);
PulseDrawSome(currentData.IK3, ik3posX, 10, TEXT);
PulseDrawSome(currentData.IK4, ik4posX, 10, TEXT);
PulseDrawSome(currentData.IK5, ik5posX, 10,TEXT);
break;
case KPR2:
PulseDrawSome(currentData.IK0, ik0posX, 10, TEXT);
PulseDrawSome(currentData.IK1, ik1posX, 10, TEXT);
PulseDrawSome(currentData.IK2, ik2posX, 10, CURSOR);
PulseDrawSome(currentData.IK3, ik3posX, 10, TEXT);
PulseDrawSome(currentData.IK4, ik4posX, 10, TEXT);
PulseDrawSome(currentData.IK5, ik5posX, 10,TEXT);
break;
case KPR3:
PulseDrawSome(currentData.IK0, ik0posX, 10, TEXT);
PulseDrawSome(currentData.IK1, ik1posX, 10, TEXT);
PulseDrawSome(currentData.IK2, ik2posX, 10, TEXT);
PulseDrawSome(currentData.IK3, ik3posX, 10, CURSOR);
PulseDrawSome(currentData.IK4, ik4posX, 10, TEXT);
PulseDrawSome(currentData.IK5, ik5posX, 10,TEXT);
break;
case KPR4:
PulseDrawSome(currentData.IK0, ik0posX, 10, TEXT);
PulseDrawSome(currentData.IK1, ik1posX, 10, TEXT);
PulseDrawSome(currentData.IK2, ik2posX, 10, TEXT);
PulseDrawSome(currentData.IK3, ik3posX, 10, TEXT);
PulseDrawSome(currentData.IK4, ik4posX, 10, CURSOR);
PulseDrawSome(currentData.IK5, ik5posX, 10,TEXT);
break;
case KPR5:
PulseDrawSome(currentData.IK0, ik0posX, 10, TEXT);
PulseDrawSome(currentData.IK1, ik1posX, 10, TEXT);
PulseDrawSome(currentData.IK2, ik2posX, 10, TEXT);
PulseDrawSome(currentData.IK3, ik3posX, 10, TEXT);
PulseDrawSome(currentData.IK4, ik4posX, 10, TEXT);
PulseDrawSome(currentData.IK5, ik5posX, 10,CURSOR);
break;
default:
break;
}
else DrawSome(currentData.IK1, 37, 10, TEXT);
if(menuPointer==KPR2){
if(!menuItemIsEditable)DrawSome(currentData.IK2, 44, 10, CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK2, 44, 10, CURSOR);
}
else DrawSome(currentData.IK2, 44, 10, TEXT);
if(menuPointer==KPR3){
if(!menuItemIsEditable)DrawSome(currentData.IK3, 51, 10, CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK3, 51, 10, CURSOR);
}
else DrawSome(currentData.IK3, 51, 10, TEXT);
if(menuPointer==KPR4) {
if(!menuItemIsEditable)DrawSome(currentData.IK4, 58, 10, CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK4, 58, 10, CURSOR);
}
else DrawSome(currentData.IK4, 58, 10, TEXT);
if(menuPointer==KPR5) {
if(!menuItemIsEditable)DrawSome(currentData.IK5, 65, 10,CURSOR);
if(menuItemIsEditable)PulseDrawSome(currentData.IK5, 65, 10, CURSOR);
else {
DrawSome(currentData.IK0, ik0posX, 10, TEXT);
DrawSome(currentData.IK1, ik1posX, 10, TEXT);
DrawSome(currentData.IK2, ik2posX, 10, TEXT);
DrawSome(currentData.IK3, ik3posX, 10, TEXT);
DrawSome(currentData.IK4, ik4posX, 10, TEXT);
DrawSome(currentData.IK5, ik5posX, 10,TEXT);
}
else DrawSome(currentData.IK5, 65, 10, TEXT);
if(menuPointer==UNITSELECT){

View File

@ -217,8 +217,8 @@ char str[10];
OLED_DrawStr(speed, 54, 52, White);
if(currentData.INFB ==0) OLED_DrawStr("<TP RX", 92, 52, White);
if(currentData.INFB ==1) OLED_DrawStr("JLL", 92, 52, White);
if(currentData.INFB ==2) OLED_DrawStr("TDTY", 92, 52, White);
if(currentData.INFB ==1) OLED_DrawStr("XTN", 92, 52, White);
if(currentData.INFB ==2) OLED_DrawStr("YTXTN", 92, 52, White);
//ssd1306_WriteString((char *) SERIAL, Font_6x8, White);