2023-10-11 17:33:26 +03:00
# include "my.h"
# include "main.h"
# include "stm32f4xx_hal.h"
# include "struct.h"
# include "ssd1306.h"
extern UserData_TypeDef currentData ;
2023-10-24 16:48:53 +03:00
extern uint16_t correctedKu [ 13 ] ;
extern float kNormToDAC ;
2023-10-11 17:33:26 +03:00
char pString [ 16 ] = { 0 } ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> FloatToASCII
2023-10-24 16:48:53 +03:00
void setDAC ( void ) ;
void sh_applysetting ( UserData_TypeDef * currentData ) {
2023-10-11 17:33:26 +03:00
sh_SetOutGain ( currentData - > IKU ) ;
sh_SetFvch ( currentData - > IFV ) ;
sh_SetFnch ( currentData - > IFN ) ;
sh_SetPlavZeml ( currentData - > IPZ ) ;
2023-10-24 16:48:53 +03:00
setDAC ( ) ;
2023-10-11 17:33:26 +03:00
}
void sh_SetOutGain ( uint16_t IKU ) {
switch ( IKU ) {
case Ku0_1 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
2023-10-24 16:48:53 +03:00
2023-10-11 17:33:26 +03:00
break ;
case Ku0_2 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
break ;
case Ku0_5 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
break ;
case Ku1 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
break ;
/*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ; */
case Ku2 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
break ;
case Ku5 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_RESET ) ;
break ;
case Ku10 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
/*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ; */
break ;
case Ku20 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
break ;
case Ku50 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
break ;
case Ku100 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
/* HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ; */
break ;
case Ku200 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
break ;
case Ku500 :
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
break ;
2023-10-24 16:48:53 +03:00
case Ku1000 :
2023-10-11 17:33:26 +03:00
HAL_GPIO_WritePin ( A0_GPIO_Port , A0_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A1_GPIO_Port , A1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A4_GPIO_Port , A4_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A5_GPIO_Port , A5_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( K10_GPIO_Port , K10_Pin , GPIO_PIN_SET ) ;
2023-10-24 16:48:53 +03:00
break ;
2023-10-11 17:33:26 +03:00
}
} ;
void sh_SetFvch ( uint16_t IFV ) { //DA9 IA2 IA3
switch ( IFV ) {
2023-10-24 16:48:53 +03:00
case Hp0_2 :
2023-10-11 17:33:26 +03:00
HAL_GPIO_WritePin ( A2_GPIO_Port , A2_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A3_GPIO_Port , A3_Pin , GPIO_PIN_RESET ) ;
break ;
case Hp1 :
HAL_GPIO_WritePin ( A2_GPIO_Port , A2_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A3_GPIO_Port , A3_Pin , GPIO_PIN_RESET ) ;
break ;
case Hp2 :
HAL_GPIO_WritePin ( A2_GPIO_Port , A2_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A3_GPIO_Port , A3_Pin , GPIO_PIN_SET ) ;
break ;
case Hp10 :
HAL_GPIO_WritePin ( A2_GPIO_Port , A2_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A3_GPIO_Port , A3_Pin , GPIO_PIN_SET ) ;
break ;
}
} ;
void sh_SetFnch ( uint16_t IFN ) {
// IA6 IA7 IA8
//{0.1, 0.3, 1, 3, 10, 30, 100};
//Lp100, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000
switch ( IFN ) {
case Lp100 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_RESET ) ;
break ;
case Lp300 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_RESET ) ;
break ;
case Lp1000 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_RESET ) ;
break ;
case Lp3000 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_RESET ) ;
break ;
case Lp10000 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_SET ) ;
break ;
case Lp30000 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_SET ) ;
break ;
case Lp100000 :
HAL_GPIO_WritePin ( A6_GPIO_Port , A6_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( A7_GPIO_Port , A7_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( A8_GPIO_Port , A8_Pin , GPIO_PIN_SET ) ;
break ;
}
} ;
void sh_SetPlavZeml ( uint16_t IPZ ) {
if ( IPZ = = 1 ) {
HAL_GPIO_WritePin ( PZ_GPIO_Port , PZ_Pin , GPIO_PIN_RESET ) ; }
else
if ( IPZ = = 0 ) {
HAL_GPIO_WritePin ( PZ_GPIO_Port , PZ_Pin , GPIO_PIN_SET ) ; }
} ;
2023-10-24 16:48:53 +03:00
void setDAC ( void ) {
uint16_t DVD = 0 ;
setOffsetKuDisplay ( ) ; //todo:<3A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !! <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
DVD = correctedKu [ currentData . IKU ] / kNormToDAC ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
WRDAC ( DVD ) ; //todo: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> uint <20> <> float - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
2023-10-11 17:33:26 +03:00
void WRDAC ( uint16_t DVD )
{
uint8_t i ;
uint16_t dvd = DVD ;
dvd < < = 4 ;
for ( i = 0 ; i < 12 ; i + + )
{
if ( dvd & 0x8000 )
HAL_GPIO_WritePin ( STD_GPIO_Port , STD_Pin , GPIO_PIN_SET ) ;
else HAL_GPIO_WritePin ( STD_GPIO_Port , STD_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( SCK_GPIO_Port , SCK_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( SCK_GPIO_Port , SCK_Pin , GPIO_PIN_SET ) ;
dvd < < = 1 ;
}
HAL_GPIO_WritePin ( FL_GPIO_Port , FL_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( FL_GPIO_Port , FL_Pin , GPIO_PIN_SET ) ;
HAL_GPIO_WritePin ( STD_GPIO_Port , STD_Pin , GPIO_PIN_SET ) ;
}
2023-11-24 14:41:27 +03:00
void DrawSome ( int16_t some , uint8_t x , uint8_t y , uint8_t mode ) { //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> int <20> <> <EFBFBD> char
2023-10-11 17:33:26 +03:00
if ( some < 10 ) OLED_DrawNum ( some , x , y , mode ) ;
2023-11-24 14:41:27 +03:00
// else if(some>=10&&some<=15) OLED_DrawChar((some+55), x, y, mode); //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> HEX todo: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2023-10-11 17:33:26 +03:00
else OLED_DrawChar ( some , x , y , mode ) ;
}
int asciiToFloat4 ( uint16_t str [ ] ) {
/////<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
float res = 0 ;
int dotFounded = 0 ;
int dotPos = 0 ;
2023-10-24 16:48:53 +03:00
for ( int i = 0 ; i < = 5 ; i + + ) {
2023-10-11 17:33:26 +03:00
if ( str [ i ] = = ' ~ ' ) { ///todo <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
if ( dotFounded = = 0 ) { dotFounded = 1 ; dotPos = i ; } //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
else return 1 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1
}
}
2023-10-24 16:48:53 +03:00
float symbol [ 6 ] ;
2023-10-11 17:33:26 +03:00
symbol [ 0 ] = str [ 0 ] ;
symbol [ 1 ] = str [ 1 ] ;
symbol [ 2 ] = str [ 2 ] ;
symbol [ 3 ] = str [ 3 ] ;
symbol [ 4 ] = str [ 4 ] ;
2023-10-24 16:48:53 +03:00
symbol [ 5 ] = str [ 5 ] ;
2023-10-11 17:33:26 +03:00
if ( dotFounded = = 0 ) {
2023-10-24 16:48:53 +03:00
res = ( float ) symbol [ 0 ] * 100000 + ( float ) symbol [ 1 ] * 10000 + ( float ) symbol [ 2 ] * 1000 + ( float ) symbol [ 3 ] * 100 + ( float ) symbol [ 4 ] * 10 + ( float ) symbol [ 5 ] ;
2023-10-11 17:33:26 +03:00
memcpy ( & currentData . SENS , & res , sizeof ( float ) ) ; ///<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
return 0 ;
}
switch ( dotPos ) {
case 0 :
2023-10-24 16:48:53 +03:00
res = ( float ) symbol [ 1 ] / ( float ) 10
+ symbol [ 2 ] / ( float ) 100
+ symbol [ 3 ] / ( float ) 1000
+ symbol [ 4 ] / ( float ) 10000
+ symbol [ 5 ] / ( float ) 100000 ;
2023-10-11 17:33:26 +03:00
break ;
case 1 :
2023-10-24 16:48:53 +03:00
res = symbol [ 0 ]
+ ( float ) symbol [ 2 ] / 10
+ ( float ) symbol [ 3 ] / 100
+ ( float ) symbol [ 4 ] / 1000
+ ( float ) symbol [ 5 ] / 10000 ;
2023-10-11 17:33:26 +03:00
break ;
case 2 :
2023-10-24 16:48:53 +03:00
res = symbol [ 0 ] * 10
+ ( float ) symbol [ 1 ]
+ ( float ) symbol [ 3 ] / 10
+ ( float ) symbol [ 4 ] / 100
+ ( float ) symbol [ 5 ] / 1000 ;
2023-10-11 17:33:26 +03:00
break ;
case 3 :
2023-10-24 16:48:53 +03:00
res = symbol [ 0 ] * 100
+ ( float ) symbol [ 1 ] * ( float ) 10
+ ( float ) symbol [ 2 ]
+ ( float ) symbol [ 4 ] / 10
+ ( float ) symbol [ 5 ] / 100 ;
2023-10-11 17:33:26 +03:00
break ;
case 4 :
2023-10-24 16:48:53 +03:00
res = symbol [ 0 ] * 1000
+ ( float ) symbol [ 1 ] * 100
+ ( float ) symbol [ 2 ] * 10
+ ( float ) symbol [ 3 ]
+ ( float ) symbol [ 5 ] / 10 ;
break ;
case 5 :
res = symbol [ 0 ] * 10000
+ ( float ) symbol [ 1 ] * 1000
+ ( float ) symbol [ 2 ] * 100
+ ( float ) symbol [ 3 ] * 10
+ ( float ) symbol [ 4 ] ;
2023-10-11 17:33:26 +03:00
break ;
default :
break ;
}
memcpy ( & currentData . SENS , & res , sizeof ( float ) ) ;
return 0 ;
}
uint16_t readkey ( void )
{
uint16_t key = 0 ;
if ( HAL_GPIO_ReadPin ( OK_BTN_GPIO_Port , OK_BTN_Pin ) = = GPIO_PIN_RESET )
key | = OK_BTN_Pin ;
if ( HAL_GPIO_ReadPin ( UP_BTN_GPIO_Port , UP_BTN_Pin ) = = GPIO_PIN_RESET )
key | = UP_BTN_Pin ;
if ( HAL_GPIO_ReadPin ( DN_BTN_GPIO_Port , DN_BTN_Pin ) = = GPIO_PIN_RESET )
key | = DN_BTN_Pin ;
// if(HAL_GPIO_ReadPin(ON_GPIO_Port, ON_Pin) == GPIO_PIN_RESET) //todo: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// key |= ON_Pin;
return key ;
}
__IO uint16_t repeat = 0 ;
uint16_t kbhit ( void )
{
volatile uint16_t key ;
static uint32_t dreb = 0 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
static uint8_t first = 1 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
static uint16_t rep = 50 ;
do
{
key = readkey ( ) ;
if ( ! key )
{
if ( dreb )
dreb - - ;
else first = 1 ;
}
else
{
if ( dreb < 3 )
dreb + + ;
}
//////
//for(int i=30000; i>0; i--){;} /// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//////
}
while ( ( dreb > 0 ) & & ( dreb < 3 ) ) ;
if ( ! key ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
first = 1 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
return 0 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0
}
else //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD>
{
if ( first ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{ //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
first = 0 ; //<2F> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
repeat = rep = 32 ;
return key ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
else
{
if ( repeat )
return 0 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
else
{
if ( rep > 0 )
rep > > = 1 ;
else rep = 32 ;
repeat = rep ;
//if(key == KEY_RESET_Pin)
return 0 ;
return key ;
}
}
}
}
char * FloatToASCII ( float Val , int32_t RoundTo )
{
uint8_t idx = 0 ;
int32_t i ;
float value , F , I ;
uint32_t rnd = 0 ;
uint32_t Tmp32 = 0 ;
uint32_t Int32 = 0 ;
uint32_t Frac32 = 0 ;
uint32_t _I32 = 0 ;
uint32_t _F32 = 0 ;
uint32_t d = 0 , dd = 0 ;
char tmparray [ 32 ] ;
volatile bool minus = false ;
memset ( tmparray , 0 , 32 ) ;
memset ( pString , 0 , 16 ) ;
value = Val ;
if ( value < 0 )
minus = true ;
if ( ( Val > = 10000.00000f ) /* || (Val <= 0)*/ )
{
if ( Val < = 0 )
{
pString [ 0 ] = ' 0 ' ;
pString [ 1 ] = ' ~ ' ;
pString [ 2 ] = ' 0 ' ;
pString [ 3 ] = ' \0 ' ;
}
else
{
pString [ 0 ] = ' 1 ' ;
pString [ 1 ] = ' 0 ' ;
pString [ 2 ] = ' 0 ' ;
pString [ 3 ] = ' 0 ' ;
pString [ 4 ] = ' 0 ' ;
pString [ 5 ] = ' \0 ' ;
}
return pString ;
}
value = ABS ( Val ) ;
rnd = ABS ( RoundTo ) ;
if ( RoundTo < 0 )
{
F = modff ( value , & I ) ;
while ( rnd )
{
F * = 10.0f ;
rnd - - ;
d + + ;
}
F = roundf ( F ) ;
dd = 1 ;
for ( i = 0 ; i < d ; i + + )
dd * = 10 ;
if ( ( uint32_t ) F = = dd )
{
F = 0 ;
I + = 1 ;
}
}
else
{
I = roundf ( value ) ;
F = 0.0f ;
}
Int32 = ( uint32_t ) I ;
Frac32 = ( uint32_t ) F ;
_I32 = Int32 ;
_F32 = Frac32 ;
idx = 0 ;
tmparray [ idx + + ] = ' \0 ' ;
if ( ( Int32 = = 0 ) & & ( Frac32 = = 0 ) )
{
if ( RoundTo < 0 )
{
for ( i = 0 ; i < abs ( RoundTo ) ; i + + )
tmparray [ idx + + ] = ' 0 ' ;
tmparray [ idx + + ] = ' ~ ' ;
}
tmparray [ idx + + ] = ' 0 ' ;
}
else
{
if ( RoundTo < 0 )
{
for ( i = 0 ; i < abs ( RoundTo ) ; i + + )
{
Tmp32 = Frac32 ;
Frac32 / = 10 ;
Tmp32 = Tmp32 - Frac32 * 10 ;
tmparray [ idx + + ] = ' 0 ' + Tmp32 ;
}
tmparray [ idx + + ] = ' ~ ' ;
}
if ( Int32 ! = 0 )
{
while ( Int32 )
{
Tmp32 = Int32 ;
Int32 / = 10 ;
Tmp32 = Tmp32 - Int32 * 10 ;
tmparray [ idx + + ] = ' 0 ' + Tmp32 ;
}
}
else
tmparray [ idx + + ] = ' 0 ' ;
if ( minus )
{
if ( ( _I32 ! = 0 ) | | ( _F32 ! = 0 ) )
tmparray [ idx + + ] = ' - ' ;
}
}
for ( i = 0 ; i < idx ; i + + )
pString [ i ] = tmparray [ idx - i - 1 ] ;
return pString ;
}