move number display into function
This commit is contained in:
parent
925e82d628
commit
81821be685
141
src/main.cpp
141
src/main.cpp
|
@ -77,6 +77,7 @@ float getWeightSpread();
|
||||||
void sendWeight(float w);
|
void sendWeight(float w);
|
||||||
bool cmdHandler(const HomieRange& range, const String& value);
|
bool cmdHandler(const HomieRange& range, const String& value);
|
||||||
void powerOff();
|
void powerOff();
|
||||||
|
void displayNumber(float numberdisplay);
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
@ -207,75 +208,7 @@ void loopHandler() {
|
||||||
|
|
||||||
if (loopmillis > last_displayupdate + DISPLAYUPDATEINTERVAL) {
|
if (loopmillis > last_displayupdate + DISPLAYUPDATEINTERVAL) {
|
||||||
last_displayupdate=loopmillis;
|
last_displayupdate=loopmillis;
|
||||||
uint8_t displayresolution=3; //how many digits after dot
|
displayNumber(weight_current);
|
||||||
float numberdisplay=weight_current;
|
|
||||||
bool _negative=false;
|
|
||||||
if (numberdisplay<0) {
|
|
||||||
numberdisplay*=-1;
|
|
||||||
_negative=true;
|
|
||||||
}
|
|
||||||
if ((numberdisplay>999.9) | (displayresolution==0)) {
|
|
||||||
display.showNumberDec((int)(numberdisplay+0.5), false); //just diplay number
|
|
||||||
}else{
|
|
||||||
uint8_t d1=0;
|
|
||||||
uint8_t d2=0;
|
|
||||||
uint8_t d3=0;
|
|
||||||
uint8_t d4=0;
|
|
||||||
if(numberdisplay<10 && displayresolution>=3) { // 5.241, 0.005 etc.
|
|
||||||
int _number=(int)(numberdisplay*1000+0.5); //in 1000th kg rounded
|
|
||||||
d1=_number%10;
|
|
||||||
d2=(_number/10)%10;
|
|
||||||
d3=(_number/100)%10;
|
|
||||||
d4=(_number/1000)%10;
|
|
||||||
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
|
||||||
display_data[2] = display.encodeDigit(d2);
|
|
||||||
display_data[1] = display.encodeDigit(d3);
|
|
||||||
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
|
||||||
display_data[0] |= SEG_DP; //add decimal point after left most digit
|
|
||||||
}else if(numberdisplay<100 && displayresolution>=2) { //10.24, 99.20
|
|
||||||
int _number=(int)(numberdisplay*100+0.5); //in 100th kg rounded
|
|
||||||
d1=_number%10;
|
|
||||||
d2=(_number/10)%10;
|
|
||||||
d3=(_number/100)%10;
|
|
||||||
d4=(_number/1000)%10;
|
|
||||||
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
|
||||||
display_data[2] = display.encodeDigit(d2);
|
|
||||||
display_data[1] = display.encodeDigit(d3);
|
|
||||||
display_data[1] |= SEG_DP; //add decimal point after second digit from the left
|
|
||||||
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
|
||||||
if (d4==0) { //number smaller than 1000
|
|
||||||
display_data[0]={0}; //turn off left segment
|
|
||||||
}
|
|
||||||
}else if (numberdisplay<1000 && displayresolution>=1) //100.0, 999.9
|
|
||||||
{
|
|
||||||
int _number=(int)(numberdisplay*10+0.5); //in 10th kg rounded
|
|
||||||
d1=_number%10;
|
|
||||||
d2=(_number/10)%10;
|
|
||||||
d3=(_number/100)%10;
|
|
||||||
d4=(_number/1000)%10;
|
|
||||||
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
|
||||||
display_data[2] = display.encodeDigit(d2);
|
|
||||||
display_data[2] |= SEG_DP; //add decimal point after second digit from the right
|
|
||||||
display_data[1] = display.encodeDigit(d3);
|
|
||||||
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
|
||||||
if (d4==0) { //number smaller than 1000
|
|
||||||
display_data[0]={0}; //turn off left segment
|
|
||||||
if (d3==0) { //number smaller than 100
|
|
||||||
display_data[1]={0}; //turn off 2nd from left segment
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_negative) { //show negative number by using rightmost dot
|
|
||||||
display_data[3] |= SEG_DP;
|
|
||||||
}
|
|
||||||
|
|
||||||
Serial.println();
|
|
||||||
display.setSegments(display_data);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -389,3 +322,73 @@ void powerOff() {
|
||||||
delay(100);
|
delay(100);
|
||||||
digitalWrite(PIN_SELFENABLE, LOW);
|
digitalWrite(PIN_SELFENABLE, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void displayNumber(float numberdisplay) {
|
||||||
|
uint8_t displayresolution=3; //how many digits after dot
|
||||||
|
bool _negative=false;
|
||||||
|
if (numberdisplay<0) {
|
||||||
|
numberdisplay*=-1;
|
||||||
|
_negative=true;
|
||||||
|
}
|
||||||
|
if ((numberdisplay>999.9) | (displayresolution==0)) {
|
||||||
|
display.showNumberDec((int)(numberdisplay+0.5), false); //just diplay number
|
||||||
|
}else{
|
||||||
|
uint8_t d1=0;
|
||||||
|
uint8_t d2=0;
|
||||||
|
uint8_t d3=0;
|
||||||
|
uint8_t d4=0;
|
||||||
|
if(numberdisplay<10 && displayresolution>=3) { // 5.241, 0.005 etc.
|
||||||
|
int _number=(int)(numberdisplay*1000+0.5); //in 1000th kg rounded
|
||||||
|
d1=_number%10;
|
||||||
|
d2=(_number/10)%10;
|
||||||
|
d3=(_number/100)%10;
|
||||||
|
d4=(_number/1000)%10;
|
||||||
|
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
||||||
|
display_data[2] = display.encodeDigit(d2);
|
||||||
|
display_data[1] = display.encodeDigit(d3);
|
||||||
|
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
||||||
|
display_data[0] |= SEG_DP; //add decimal point after left most digit
|
||||||
|
}else if(numberdisplay<100 && displayresolution>=2) { //10.24, 99.20
|
||||||
|
int _number=(int)(numberdisplay*100+0.5); //in 100th kg rounded
|
||||||
|
d1=_number%10;
|
||||||
|
d2=(_number/10)%10;
|
||||||
|
d3=(_number/100)%10;
|
||||||
|
d4=(_number/1000)%10;
|
||||||
|
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
||||||
|
display_data[2] = display.encodeDigit(d2);
|
||||||
|
display_data[1] = display.encodeDigit(d3);
|
||||||
|
display_data[1] |= SEG_DP; //add decimal point after second digit from the left
|
||||||
|
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
||||||
|
if (d4==0) { //number smaller than 1000
|
||||||
|
display_data[0]={0}; //turn off left segment
|
||||||
|
}
|
||||||
|
}else if (numberdisplay<1000 && displayresolution>=1) //100.0, 999.9
|
||||||
|
{
|
||||||
|
int _number=(int)(numberdisplay*10+0.5); //in 10th kg rounded
|
||||||
|
d1=_number%10;
|
||||||
|
d2=(_number/10)%10;
|
||||||
|
d3=(_number/100)%10;
|
||||||
|
d4=(_number/1000)%10;
|
||||||
|
display_data[3] = display.encodeDigit(d1); //rightmost digit
|
||||||
|
display_data[2] = display.encodeDigit(d2);
|
||||||
|
display_data[2] |= SEG_DP; //add decimal point after second digit from the right
|
||||||
|
display_data[1] = display.encodeDigit(d3);
|
||||||
|
display_data[0] = display.encodeDigit(d4); //leftmost digit
|
||||||
|
if (d4==0) { //number smaller than 1000
|
||||||
|
display_data[0]={0}; //turn off left segment
|
||||||
|
if (d3==0) { //number smaller than 100
|
||||||
|
display_data[1]={0}; //turn off 2nd from left segment
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_negative) { //show negative number by using rightmost dot
|
||||||
|
display_data[3] |= SEG_DP;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
display.setSegments(display_data);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue