change to 500g maximum

This commit is contained in:
interfisch 2025-06-29 07:49:04 +02:00
parent 9daa1c867a
commit a0d522c89f

View file

@ -12,6 +12,8 @@
Servo esc; Servo esc;
//2021xxxx: 5834.9399
//20230422: 5834.1499
#define PIN_BACK 8 #define PIN_BACK 8
@ -59,7 +61,7 @@ uint8_t btn_set_press=0;
#define PIN_LED 13 #define PIN_LED 13
#define MAXDOUBLEVALUE 32767 #define MAXVALUE 65535
//DEFAULT EEPROM SETTINGS //DEFAULT EEPROM SETTINGS
#define DEFAULT_FPS 5 #define DEFAULT_FPS 5
@ -105,7 +107,7 @@ int adc_readings=1; //ca. 700ms for 5 readings, ca 75ms for 1 reading, readings=
double weight=0; double weight=0;
#define ADCMEDIANVALUES_MAX 91 //needs to be uneven, maximum number, for array declaration #define ADCMEDIANVALUES_MAX 91 //needs to be uneven, maximum number, for array declaration
float weightseries[ADCMEDIANVALUES_MAX]; //last n values for median filter double weightseries[ADCMEDIANVALUES_MAX]; //last n values for median filter
uint16_t adcmedianvalues=DEFAULT_ADCMEDIANVALUES; //needs to be uneven //eeprom uint16_t adcmedianvalues=DEFAULT_ADCMEDIANVALUES; //needs to be uneven //eeprom
float adcFilterKeepMedianvaluesFactor=0.8; //how many lowest and highest values will be removed from the array before avaraging (as factor). 0.0 means only median is used. 1.0 means all values are used. float adcFilterKeepMedianvaluesFactor=0.8; //how many lowest and highest values will be removed from the array before avaraging (as factor). 0.0 means only median is used. 1.0 means all values are used.
uint16_t adcmedianposition=0; uint16_t adcmedianposition=0;
@ -172,8 +174,8 @@ String toString(double w,uint8_t dec);
String toString(double w); String toString(double w);
String toWeightString(double w,uint8_t dec,uint8_t len); String toWeightString(double w,uint8_t dec,uint8_t len);
String toWeightString(double w); String toWeightString(double w);
float getWeightSeriesMax(); double getWeightSeriesMax();
float getWeightSeriesMin(); double getWeightSeriesMin();
double getWeightMedian(); double getWeightMedian();
double getWeightFiltered(); double getWeightFiltered();
float getVoltage(); float getVoltage();
@ -312,13 +314,15 @@ void loop() {
lcd_backlight_offtimer=0; lcd_backlight_offtimer=0;
lcd.backlight(); lcd.backlight();
} }
lcd0=toStringBar(weight,0,1000); lcd0=toStringBar(weight,0,500);
//lcd1=toWeightString(weight)+"g"; //lcd1=toWeightString(weight)+"g";
//lcd1=toWeightString(getWeightMedian())+"g"; //lcd1=toWeightString(getWeightMedian())+"g";
lcd1=toWeightString(showweight)+"g"; lcd1=toWeightString(showweight)+"g";
Serial.print(showweight,3); Serial.println("g"); Serial.print(showweight,3); Serial.println("g");
//___ //___
if (btn_back_press==2){ //press BACK to tare if (btn_back_press==2){ //press BACK to tare
scale.tare(); scale.tare();
@ -571,6 +575,7 @@ void loop() {
if (millis() >= time_lastadc+time_adcwait) if (millis() >= time_lastadc+time_adcwait)
{ {
weight=scale.get_units(adc_readings); weight=scale.get_units(adc_readings);
adcmedianposition++; adcmedianposition++;
adcmedianposition%=adcmedianvalues; adcmedianposition%=adcmedianvalues;
weightseries[adcmedianposition]=weight; //save weight to series for medianfilter weightseries[adcmedianposition]=weight; //save weight to series for medianfilter
@ -910,11 +915,11 @@ double getWeightMedian() //return median weight from weightseries
boolean mask[adcmedianvalues]; //true=disabled value boolean mask[adcmedianvalues]; //true=disabled value
for (uint16_t i=0;i<adcmedianvalues;i++) for (uint16_t i=0;i<adcmedianvalues;i++)
mask[i]=false; mask[i]=false;
float cmin=MAXDOUBLEVALUE; uint16_t cmin_i=0; double cmin=MAXVALUE; uint16_t cmin_i=0;
float cmax=0; uint16_t cmax_i=0; double cmax=0; uint16_t cmax_i=0;
while(cmin!=cmax){ //stop when only one value left while(cmin!=cmax){ //stop when only one value left
cmin=MAXDOUBLEVALUE; cmin=MAXVALUE;
cmax=-MAXDOUBLEVALUE-1; cmax=-MAXVALUE-1;
for (uint16_t i=0;i<adcmedianvalues;i++){ for (uint16_t i=0;i<adcmedianvalues;i++){
if (!mask[i]){ if (!mask[i]){
if (weightseries[i]<cmin){ if (weightseries[i]<cmin){
@ -938,16 +943,16 @@ double getWeightFiltered() {
boolean mask[adcmedianvalues]; //true=disabled value boolean mask[adcmedianvalues]; //true=disabled value
for (uint16_t i=0;i<adcmedianvalues;i++) for (uint16_t i=0;i<adcmedianvalues;i++)
mask[i]=false; mask[i]=false;
float cmin=MAXDOUBLEVALUE; uint16_t cmin_i=0; double cmin=MAXVALUE; uint16_t cmin_i=0;
float cmax=0; uint16_t cmax_i=0; double cmax=0; uint16_t cmax_i=0;
//while(cmin!=cmax){ //stop when only one value left //while(cmin!=cmax){ //stop when only one value left
uint16_t _valuesLeft=adcmedianvalues; uint16_t _valuesLeft=adcmedianvalues;
while (_valuesLeft>2 && _valuesLeft>(uint16_t)(adcmedianvalues*adcFilterKeepMedianvaluesFactor)) while (_valuesLeft>2 && _valuesLeft>(uint16_t)(adcmedianvalues*adcFilterKeepMedianvaluesFactor))
{ {
cmin=MAXDOUBLEVALUE; cmin=MAXVALUE;
cmax=-MAXDOUBLEVALUE-1; cmax=-MAXVALUE-1;
for (uint16_t i=0;i<adcmedianvalues;i++){ for (uint16_t i=0;i<adcmedianvalues;i++){
if (!mask[i]){ if (!mask[i]){
if (weightseries[i]<cmin){ if (weightseries[i]<cmin){
@ -979,18 +984,18 @@ double getWeightFiltered() {
return sum/meanvalues; return sum/meanvalues;
} }
float getWeightSeriesMin() double getWeightSeriesMin()
{ {
float cmin=MAXDOUBLEVALUE; double cmin=MAXVALUE;
for (uint16_t i=0;i<adcmedianvalues;i++){ for (uint16_t i=0;i<adcmedianvalues;i++){
if (weightseries[i]<cmin) if (weightseries[i]<cmin)
cmin=weightseries[i]; cmin=weightseries[i];
} }
return cmin; return cmin;
} }
float getWeightSeriesMax() double getWeightSeriesMax()
{ {
float cmax=0; double cmax=0;
for (uint16_t i=0;i<adcmedianvalues;i++){ for (uint16_t i=0;i<adcmedianvalues;i++){
if (weightseries[i]>cmax) if (weightseries[i]>cmax)
cmax=weightseries[i]; cmax=weightseries[i];