Added 3 more points for formula calculation
This commit is contained in:
parent
a648d54a14
commit
7eddf35b97
@ -91,38 +91,56 @@
|
||||
|
||||
<div class="row">
|
||||
<label class="col-sm-1 col-form-label">#</label>
|
||||
<label class="col-sm-4 col-form-label">Angle/Tilt</label>
|
||||
<label class="col-sm-4 col-form-label" id="gravity-header">Gravity</label>
|
||||
<label class="col-sm-2 col-form-label">Angle/Tilt</label>
|
||||
<label class="col-sm-2 col-form-label" id="gravity-header">Gravity</label>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle1" class="col-sm-1 col-form-label">1.</label>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a1" id="a1"></div>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g1" id="g1"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a1" id="a1"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g1" id="g1"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle2" class="col-sm-1 col-form-label">2.</label>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a2" id="a2"></div>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g2" id="g2"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a2" id="a2"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g2" id="g2"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle3" class="col-sm-1 col-form-label">3.</label>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a3" id="a3"></div>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g3" id="g3"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a3" id="a3"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g3" id="g3"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle4" class="col-sm-1 col-form-label">4.</label>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a4" id="a4"></div>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g4" id="g4"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a4" id="a4"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g4" id="g4"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle5" class="col-sm-1 col-form-label">5.</label>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a5" id="a5"></div>
|
||||
<div class="col-sm-4"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g5" id="g5"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a5" id="a5"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g5" id="g5"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle6" class="col-sm-1 col-form-label">6.</label>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a6" id="a6"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g6" id="g6"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle7" class="col-sm-1 col-form-label">7.</label>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a7" id="a7"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g7" id="g7"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="angle8" class="col-sm-1 col-form-label">8.</label>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="90" step="0.001" class="form-control" name="a8" id="a8"></div>
|
||||
<div class="col-sm-2"><input type="number" min="0" max="26" step="0.0001" class="form-control" name="g8" id="g8"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
@ -220,12 +238,18 @@
|
||||
g3.onchange = setGravityDecimal
|
||||
g4.onchange = setGravityDecimal
|
||||
g5.onchange = setGravityDecimal
|
||||
g6.onchange = setGravityDecimal
|
||||
g7.onchange = setGravityDecimal
|
||||
g8.onchange = setGravityDecimal
|
||||
|
||||
a1.onchange = setAngleDecimal
|
||||
a2.onchange = setAngleDecimal
|
||||
a3.onchange = setAngleDecimal
|
||||
a4.onchange = setAngleDecimal
|
||||
a5.onchange = setAngleDecimal
|
||||
a6.onchange = setAngleDecimal
|
||||
a7.onchange = setAngleDecimal
|
||||
a8.onchange = setAngleDecimal
|
||||
|
||||
window.onload = getConfig;
|
||||
setButtonDisabled( true );
|
||||
@ -293,6 +317,9 @@
|
||||
populateChartForm( $("#a3").val(), $("#g3").val() );
|
||||
populateChartForm( $("#a4").val(), $("#g4").val() );
|
||||
populateChartForm( $("#a5").val(), $("#g5").val() );
|
||||
populateChartForm( $("#a6").val(), $("#g6").val() );
|
||||
populateChartForm( $("#a7").val(), $("#g7").val() );
|
||||
populateChartForm( $("#a8").val(), $("#g8").val() );
|
||||
|
||||
if( myChart )
|
||||
myChart.destroy();
|
||||
@ -336,6 +363,9 @@
|
||||
$("#g3").val( parseFloat(cfg["g3"]).toFixed(4) );
|
||||
$("#g4").val( parseFloat(cfg["g4"]).toFixed(4) );
|
||||
$("#g5").val( parseFloat(cfg["g5"]).toFixed(4) );
|
||||
$("#g6").val( parseFloat(cfg["g6"]).toFixed(4) );
|
||||
$("#g7").val( parseFloat(cfg["g7"]).toFixed(4) );
|
||||
$("#g8").val( parseFloat(cfg["g8"]).toFixed(4) );
|
||||
}
|
||||
|
||||
$("#a1").val( parseFloat(cfg["a1"]).toFixed(2) );
|
||||
@ -343,6 +373,9 @@
|
||||
$("#a3").val( parseFloat(cfg["a3"]).toFixed(2) );
|
||||
$("#a4").val( parseFloat(cfg["a4"]).toFixed(2) );
|
||||
$("#a5").val( parseFloat(cfg["a5"]).toFixed(2) );
|
||||
$("#a6").val( parseFloat(cfg["a6"]).toFixed(2) );
|
||||
$("#a7").val( parseFloat(cfg["a7"]).toFixed(2) );
|
||||
$("#a8").val( parseFloat(cfg["a8"]).toFixed(2) );
|
||||
|
||||
if( cfg["error"]!="" ) {
|
||||
showError(cfg["error"]);
|
||||
|
File diff suppressed because one or more lines are too long
@ -106,16 +106,16 @@
|
||||
<input type="text" name="id" id="id1" hidden>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="mdns" class="col-sm-3 col-form-label">Device name:</label>
|
||||
<label for="mdns" class="col-sm-2 col-form-label">Device name:</label>
|
||||
<div class="col-sm-3">
|
||||
<input type="text" maxlength="12" class="form-control" name="mdns" id="mdns">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<fieldset class="form-group">
|
||||
<legend class="col-form-label col-sm-3 float-sm-left pt-0">Temperature Format:</legend>
|
||||
<div class="col-sm-6">
|
||||
<fieldset class="form-group row">
|
||||
<legend class="col-form-label col-sm-2 float-sm-left pt-0">Temperature Format:</legend>
|
||||
<div class="col-sm-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="temp-format" id="temp-format-c" value="C" checked>
|
||||
<label class="form-check-label" for="temp-format-c">Celsius</label>
|
||||
@ -129,7 +129,7 @@
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="sleep-interval" class="col-sm-3 col-form-label">Interval (seconds):</label>
|
||||
<label for="sleep-interval" class="col-sm-2 col-form-label">Interval (seconds):</label>
|
||||
<div class="col-sm-2">
|
||||
<input type="number" min="10" max="3600" class="form-control" name="sleep-interval" id="sleep-interval">
|
||||
</div>
|
||||
@ -137,7 +137,7 @@
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-8 offset-sm-3">
|
||||
<div class="col-sm-4 offset-sm-2">
|
||||
<button type="submit" class="btn btn-primary" id="device-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -146,10 +146,10 @@
|
||||
<hr class="my-2">
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="calibrate-btn" class="col-sm-3 col-form-label">Current calibration values:</label>
|
||||
<label for="calibrate-btn" class="col-sm-3 col-form-label" id="gyro-calibration-data">Loading...</label>
|
||||
<label for="gyro-calibration-data" class="col-sm-3 col-form-label" id="angle">Loading...</label>
|
||||
<div class="col-sm-8 offset-sm-3">
|
||||
<label for="calibrate-btn" class="col-sm-2 col-form-label">Current calibration:</label>
|
||||
<label for="calibrate-btn" class="col-sm-2 col-form-label" id="gyro-calibration-data">Loading...</label>
|
||||
<label for="gyro-calibration-data" class="col-sm-2 col-form-label" id="angle">Loading...</label>
|
||||
<div class="col-sm-8 offset-sm-2">
|
||||
<button type="button" class="btn btn-warning" id="calibrate-btn">Calibrate device</button>
|
||||
</div>
|
||||
</div>
|
||||
|
File diff suppressed because one or more lines are too long
20
src/calc.cpp
20
src/calc.cpp
@ -33,14 +33,16 @@ SOFTWARE.
|
||||
int createFormula(RawFormulaData &fd, char *formulaBuffer,
|
||||
int formulaBufferSize, int order) {
|
||||
int noAngles = 0;
|
||||
RawFormulaData fd2;
|
||||
|
||||
// Check how many valid values we have got
|
||||
if (fd.a[0] > 0 && fd.a[1] > 0 && fd.a[2] > 0 && fd.a[3] > 0 && fd.a[4] > 0)
|
||||
noAngles = 5;
|
||||
else if (fd.a[0] > 0 && fd.a[1] > 0 && fd.a[2] > 0 && fd.a[3] > 0)
|
||||
noAngles = 4;
|
||||
else if (fd.a[0] > 0 && fd.a[1] > 0 && fd.a[2] > 0)
|
||||
noAngles = 3;
|
||||
// Check how many valid values we have got and make sure we have a full series.
|
||||
for (int i = 0; i < FORMULA_DATA_SIZE; i++) {
|
||||
if (fd.a[i]) {
|
||||
fd2.a[noAngles] = fd.a[i];
|
||||
fd2.g[noAngles] = fd.g[i];
|
||||
noAngles++;
|
||||
}
|
||||
}
|
||||
|
||||
#if LOG_LEVEL == 6 && !defined(CALC_DISABLE_LOGGING)
|
||||
Log.verbose(
|
||||
@ -54,13 +56,13 @@ int createFormula(RawFormulaData &fd, char *formulaBuffer,
|
||||
return ERR_FORMULA_NOTENOUGHVALUES;
|
||||
} else {
|
||||
double coeffs[order + 1];
|
||||
int ret = fitCurve(order, noAngles, fd.a, fd.g,
|
||||
int ret = fitCurve(order, noAngles, fd2.a, fd2.g,
|
||||
sizeof(coeffs) / sizeof(double), coeffs);
|
||||
|
||||
// Returned value is 0 if no error
|
||||
if (ret == 0) {
|
||||
#if LOG_LEVEL == 6 && !defined(CALC_DISABLE_LOGGING)
|
||||
Log.verbose(F("CALC: Finshied processing data points." CR));
|
||||
Log.verbose(F("CALC: Finshied processing data points, order = %d." CR), order);
|
||||
#endif
|
||||
|
||||
// Print the formula based on 'order'
|
||||
|
@ -47,9 +47,11 @@ struct RawGyroData {
|
||||
};
|
||||
|
||||
// Used for holding formulaData (used for calculating formula on device)
|
||||
#define FORMULA_DATA_SIZE 8
|
||||
|
||||
struct RawFormulaData {
|
||||
double a[5];
|
||||
double g[5];
|
||||
double a[FORMULA_DATA_SIZE];
|
||||
double g[FORMULA_DATA_SIZE];
|
||||
};
|
||||
|
||||
class HardwareConfig {
|
||||
|
@ -696,7 +696,7 @@ void WebServerHandler::webHandleFormulaRead() {
|
||||
LOG_PERF_START("webserver-api-formula-read");
|
||||
Log.notice(F("WEB : webServer callback for /api/formula(get)." CR));
|
||||
|
||||
DynamicJsonDocument doc(250);
|
||||
DynamicJsonDocument doc(512);
|
||||
const RawFormulaData& fd = myConfig.getFormulaData();
|
||||
|
||||
#if LOG_LEVEL == 6 && !defined(WEB_DISABLE_LOGGING)
|
||||
@ -729,6 +729,9 @@ void WebServerHandler::webHandleFormulaRead() {
|
||||
doc["a3"] = reduceFloatPrecision(fd.a[2], 2);
|
||||
doc["a4"] = reduceFloatPrecision(fd.a[3], 2);
|
||||
doc["a5"] = reduceFloatPrecision(fd.a[4], 2);
|
||||
doc["a6"] = reduceFloatPrecision(fd.a[5], 2);
|
||||
doc["a7"] = reduceFloatPrecision(fd.a[6], 2);
|
||||
doc["a8"] = reduceFloatPrecision(fd.a[7], 2);
|
||||
|
||||
if (myConfig.isGravityPlato()) {
|
||||
doc["g1"] = reduceFloatPrecision(convertToPlato(fd.g[0]), 1);
|
||||
@ -736,12 +739,18 @@ void WebServerHandler::webHandleFormulaRead() {
|
||||
doc["g3"] = reduceFloatPrecision(convertToPlato(fd.g[2]), 1);
|
||||
doc["g4"] = reduceFloatPrecision(convertToPlato(fd.g[3]), 1);
|
||||
doc["g5"] = reduceFloatPrecision(convertToPlato(fd.g[4]), 1);
|
||||
doc["g6"] = reduceFloatPrecision(convertToPlato(fd.g[5]), 1);
|
||||
doc["g7"] = reduceFloatPrecision(convertToPlato(fd.g[6]), 1);
|
||||
doc["g8"] = reduceFloatPrecision(convertToPlato(fd.g[7]), 1);
|
||||
} else {
|
||||
doc["g1"] = reduceFloatPrecision(fd.g[0], 4);
|
||||
doc["g2"] = reduceFloatPrecision(fd.g[1], 4);
|
||||
doc["g3"] = reduceFloatPrecision(fd.g[2], 4);
|
||||
doc["g4"] = reduceFloatPrecision(fd.g[3], 4);
|
||||
doc["g5"] = reduceFloatPrecision(fd.g[4], 4);
|
||||
doc["g6"] = reduceFloatPrecision(fd.g[5], 4);
|
||||
doc["g7"] = reduceFloatPrecision(fd.g[6], 4);
|
||||
doc["g8"] = reduceFloatPrecision(fd.g[7], 4);
|
||||
}
|
||||
|
||||
#if LOG_LEVEL == 6 && !defined(WEB_DISABLE_LOGGING)
|
||||
@ -995,6 +1004,9 @@ void WebServerHandler::webHandleFormulaWrite() {
|
||||
fd.a[2] = _server->arg("a3").toDouble();
|
||||
fd.a[3] = _server->arg("a4").toDouble();
|
||||
fd.a[4] = _server->arg("a5").toDouble();
|
||||
fd.a[5] = _server->arg("a6").toDouble();
|
||||
fd.a[6] = _server->arg("a7").toDouble();
|
||||
fd.a[7] = _server->arg("a8").toDouble();
|
||||
|
||||
if (myConfig.isGravityPlato()) {
|
||||
fd.g[0] = convertToSG(_server->arg("g1").toDouble());
|
||||
@ -1002,12 +1014,18 @@ void WebServerHandler::webHandleFormulaWrite() {
|
||||
fd.g[2] = convertToSG(_server->arg("g3").toDouble());
|
||||
fd.g[3] = convertToSG(_server->arg("g4").toDouble());
|
||||
fd.g[4] = convertToSG(_server->arg("g5").toDouble());
|
||||
fd.g[5] = convertToSG(_server->arg("g6").toDouble());
|
||||
fd.g[6] = convertToSG(_server->arg("g7").toDouble());
|
||||
fd.g[7] = convertToSG(_server->arg("g8").toDouble());
|
||||
} else {
|
||||
fd.g[0] = _server->arg("g1").toDouble();
|
||||
fd.g[1] = _server->arg("g2").toDouble();
|
||||
fd.g[2] = _server->arg("g3").toDouble();
|
||||
fd.g[3] = _server->arg("g4").toDouble();
|
||||
fd.g[4] = _server->arg("g5").toDouble();
|
||||
fd.g[5] = _server->arg("g6").toDouble();
|
||||
fd.g[6] = _server->arg("g7").toDouble();
|
||||
fd.g[7] = _server->arg("g8").toDouble();
|
||||
}
|
||||
|
||||
myConfig.setFormulaData(fd);
|
||||
|
@ -6,10 +6,16 @@
|
||||
"a2": 45,
|
||||
"a4": 55,
|
||||
"a5": 30,
|
||||
"a6": 30,
|
||||
"a7": 30,
|
||||
"a8": 30,
|
||||
"g1": 1.000,
|
||||
"g3": 1.010,
|
||||
"g2": 1.025,
|
||||
"g4": 1.040,
|
||||
"g5": 1.005,
|
||||
"g6": 1.005,
|
||||
"g7": 1.005,
|
||||
"g8": 1.005,
|
||||
"error": ""
|
||||
}
|
Loading…
Reference in New Issue
Block a user