Walidacja prędkosci
zmiana bar grafu na strzałkę i prawo
This commit is contained in:
@@ -6,10 +6,11 @@
|
|||||||
#include <Adafruit_GFX.h>
|
#include <Adafruit_GFX.h>
|
||||||
#include <Adafruit_SSD1306.h>
|
#include <Adafruit_SSD1306.h>
|
||||||
|
|
||||||
#define Version "1.14.3"
|
#define Version "1.15.3"
|
||||||
////2DO:
|
////2DO:
|
||||||
//algorytm walidacji odczytu predkosci
|
//diagnostyka i/lub przeciwdziałanie skokom predkosci
|
||||||
//zmiana gear baaru na wskaznik
|
//dlaczego wskaznik odnosi sie do poprawnego biegu a w tym czasie bieg jest zly? bo czas ponizej 2s?
|
||||||
|
//zmienic system usypiania dodac bezwzglednie czas 3 min, i po czeku z przyciskiem ponowny odczyt magnesu po 0,5sec
|
||||||
|
|
||||||
// menu do zmiany zakresu predkosci biegów
|
// menu do zmiany zakresu predkosci biegów
|
||||||
// menu do zmiany zakresu kątów biegów, obwodu koła, ilosci magnesow
|
// menu do zmiany zakresu kątów biegów, obwodu koła, ilosci magnesow
|
||||||
@@ -202,7 +203,9 @@ void loop() {
|
|||||||
//################################################
|
//################################################
|
||||||
//SPEED
|
//SPEED
|
||||||
sleepSpd = millis() - lastMillisSpd;
|
sleepSpd = millis() - lastMillisSpd;
|
||||||
if (sleepSpd >= 2000) { //podaj zerową prędkość jeśli nie było odcztu od 1,5 s
|
if (sleepSpd >= 1500) { //podaj zerową prędkość jeśli nie było odcztu od 1,5 s
|
||||||
|
speed4Gear = 0.0;
|
||||||
|
speed4Gear_2 = 0.0;
|
||||||
speed = 0.0;
|
speed = 0.0;
|
||||||
speed_last = 0.0;
|
speed_last = 0.0;
|
||||||
speed_last_2 = 0.0;
|
speed_last_2 = 0.0;
|
||||||
@@ -216,8 +219,8 @@ void loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (speed > 99 || isinf(speed)) {
|
if (speed4Gear > 99 || isinf(speed4Gear)) {
|
||||||
speed = 21.37;
|
speed4Gear = 21.37;
|
||||||
}
|
}
|
||||||
calcGear();
|
calcGear();
|
||||||
displGear = 9 - currentGear;
|
displGear = 9 - currentGear;
|
||||||
@@ -230,7 +233,7 @@ void loop() {
|
|||||||
display.setCursor(40, 0);
|
display.setCursor(40, 0);
|
||||||
display.print(currentGear);
|
display.print(currentGear);
|
||||||
//SPEED_TREND
|
//SPEED_TREND
|
||||||
display.setCursor(100, 00);
|
display.setCursor(75, 00);
|
||||||
if (speedTrend <= -1 ) {
|
if (speedTrend <= -1 ) {
|
||||||
display.write(31);
|
display.write(31);
|
||||||
} else {
|
} else {
|
||||||
@@ -251,14 +254,13 @@ void loop() {
|
|||||||
display.fillRect(115, 0, 7, 1, SSD1306_WHITE);
|
display.fillRect(115, 0, 7, 1, SSD1306_WHITE);
|
||||||
display.fillRect(115, 63, 7, 1, SSD1306_WHITE);
|
display.fillRect(115, 63, 7, 1, SSD1306_WHITE);
|
||||||
|
|
||||||
if (speed >= currentGearRangeMiddle) {
|
display.setTextSize(2);
|
||||||
gearBarHeight = int(((speedForBar - currentGearRangeMiddle) / (currentGearRangeUpper - currentGearRangeMiddle)) * 32);
|
|
||||||
gearBarPosition = 32 - gearBarHeight;
|
gearBarHeight = 64 - int(((speed4Gear - currentGearRangeLower) / (currentGearRangeUpper - currentGearRangeLower)) * 64) - 5;
|
||||||
display.fillRect(122, gearBarPosition, 4, gearBarHeight, SSD1306_WHITE);
|
display.setCursor(115, gearBarHeight);
|
||||||
} else {
|
display.write(16);
|
||||||
gearBarHeight = int(((currentGearRangeMiddle - speedForBar) / (currentGearRangeMiddle - currentGearRangeLower)) * 32);
|
display.setTextSize(3);
|
||||||
display.fillRect(122, 32, 4, gearBarHeight, SSD1306_WHITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//VOLT_BAR
|
//VOLT_BAR
|
||||||
adcBattVoltValue = analogRead(VoltInptPin);
|
adcBattVoltValue = analogRead(VoltInptPin);
|
||||||
@@ -279,7 +281,7 @@ void loop() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (speedTrend == -1 && speed > 0.0 ) {
|
if (speedTrend == -1 && speed4Gear > 0.0 ) {
|
||||||
if (BrakingLightSwitch == 1) {
|
if (BrakingLightSwitch == 1) {
|
||||||
digitalWrite(BrakingLight, HIGH);
|
digitalWrite(BrakingLight, HIGH);
|
||||||
BrakingLightSwitch = 0;
|
BrakingLightSwitch = 0;
|
||||||
@@ -307,41 +309,41 @@ void calcSpeed() {
|
|||||||
lastMillisSpd = millissSpd;
|
lastMillisSpd = millissSpd;
|
||||||
millissSpd = millis();
|
millissSpd = millis();
|
||||||
sigleTimeSpd = double(millissSpd - lastLastMillisSpd) / 1000;
|
sigleTimeSpd = double(millissSpd - lastLastMillisSpd) / 1000;
|
||||||
speed_last_3 = speed_last_2;
|
// speed_last_3 = speed_last_2;
|
||||||
speed_last_2 = speed_last;
|
// speed_last_2 = speed_last;
|
||||||
speed_last = speed;
|
// speed_last = speed;
|
||||||
speed = (((2 * Pi) / sigleTimeSpd * ((WheelCircumference) / (Pi)) * ms2kmh)) / MagnetsCnt;
|
speed = (((2 * Pi) / sigleTimeSpd * ((WheelCircumference) / (Pi)) * ms2kmh)) / MagnetsCnt;
|
||||||
// diag
|
// diag
|
||||||
if (((speed_last_3 * 1.5) > speed) && speed > 10.0 && speedTrend > 0) { //zabezpieczenie przed losowymi sygnałami magesu
|
// if (((speed_last_3 * 1.5) > speed) && speed > 10.0 && speedTrend > 0) { //zabezpieczenie przed losowymi sygnałami magesu
|
||||||
speed = speed_last_3;
|
// speed = speed_last_3;
|
||||||
}
|
// }
|
||||||
speed = (speed + speed_last)/2;
|
// speed = (speed + speed_last)/2;
|
||||||
totalDist = totalDist + (1/MagnetsCnt);
|
totalDist = totalDist + (1/MagnetsCnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcGear() {
|
void calcGear() {
|
||||||
//speed validation
|
//speed validation
|
||||||
//
|
speedDiff_3 = speed4Gear_3-speed4Gear_2;
|
||||||
// speedDiff_2 = speed4Gear_2-speed4Gear_1;
|
speedDiff_2 = speed4Gear_2-speed4Gear_1;
|
||||||
// speedDiff_3 = speed4Gear_3-speed4Gear_2;
|
speed4Gear_1 = speed;
|
||||||
// speed4Gear_1 = speed;
|
speed4Gear_2 = speed4Gear_1;
|
||||||
// speed4Gear_2 = speed4Gear_1;
|
speed4Gear_3 = speed4Gear_2;
|
||||||
// speed4Gear_3 = speed4Gear_2;
|
speed4Geat_estimated = (((speedDiff_3 * avgWeight_3 + speedDiff_2 * avgWeight_2)/(avgWeight_3 + avgWeight_2))+ speed4Gear_1) + 4;
|
||||||
// speed4Geat_estimated = (((speedDiff_3 * avgWeight_3 + avgWeight_2 * avgWeight_2)/(avgWeight_3 + avgWeight_2))+ speed4Gear_1)*1,2;
|
if (speed <= 10.0 or speed <= speed4Geat_estimated) {
|
||||||
// if (speed <= 10.0 or speed < speed4Geat_estimated) {
|
speed4Gear_2 = speed4Gear;
|
||||||
// speed4Gear = speed4Gear_1;
|
speed4Gear = speed4Gear_1;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//
|
|
||||||
//poniżej zamienić speed na speed4Gear
|
//poniżej zamienić speed na speed4Gear
|
||||||
//speed_last_3 na speed4Gear_2
|
//speed_last_3 na speed4Gear_2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ((speed / speed_last_3) >= 1.1) { // przyspieszenie DO weryfikacji czy nie trzeba zamienic na czas lub zwiększyc wartość
|
if ((speed4Gear / speed4Gear_2) >= 1.1) { // przyspieszenie DO weryfikacji czy nie trzeba zamienic na czas lub zwiększyc wartość
|
||||||
speedTrend = 1;
|
speedTrend = 1;
|
||||||
} else if ((speed - speed_last_3) <= -1.0) {
|
} else if ((speed4Gear - speed4Gear_2) <= -0.5) {
|
||||||
speedTrend = -1;
|
speedTrend = -1;
|
||||||
} else {
|
} else {
|
||||||
speedTrend = 0;
|
speedTrend = 0;
|
||||||
@@ -352,35 +354,35 @@ void calcGear() {
|
|||||||
// }else {
|
// }else {
|
||||||
accelerationShift = 1;
|
accelerationShift = 1;
|
||||||
// }
|
// }
|
||||||
if (speed * accelerationShift >= 0 && speed * accelerationShift < spdRange1and2) {
|
if (speed4Gear * accelerationShift >= 0 && speed4Gear * accelerationShift < spdRange1and2) {
|
||||||
calculatedGear = 1;
|
calculatedGear = 1;
|
||||||
currentGearRangeLower = 2.5;
|
currentGearRangeLower = 2.5;
|
||||||
currentGearRangeUpper = spdRange1and2;
|
currentGearRangeUpper = spdRange1and2;
|
||||||
} else if (speed * accelerationShift >= spdRange1and2 && speed * accelerationShift < spdRange2and3) {
|
} else if (speed4Gear * accelerationShift >= spdRange1and2 && speed4Gear * accelerationShift < spdRange2and3) {
|
||||||
calculatedGear = 2;
|
calculatedGear = 2;
|
||||||
currentGearRangeLower = spdRange1and2;
|
currentGearRangeLower = spdRange1and2;
|
||||||
currentGearRangeUpper = spdRange2and3;
|
currentGearRangeUpper = spdRange2and3;
|
||||||
} else if (speed * accelerationShift >= spdRange2and3 && speed * accelerationShift < spdRange3and4) {
|
} else if (speed4Gear * accelerationShift >= spdRange2and3 && speed4Gear * accelerationShift < spdRange3and4) {
|
||||||
calculatedGear = 3;
|
calculatedGear = 3;
|
||||||
currentGearRangeLower = spdRange2and3;
|
currentGearRangeLower = spdRange2and3;
|
||||||
currentGearRangeUpper = spdRange3and4;
|
currentGearRangeUpper = spdRange3and4;
|
||||||
} else if (speed * accelerationShift >= spdRange3and4 && speed * accelerationShift < spdRange4and5) {
|
} else if (speed4Gear * accelerationShift >= spdRange3and4 && speed4Gear * accelerationShift < spdRange4and5) {
|
||||||
calculatedGear = 4;
|
calculatedGear = 4;
|
||||||
currentGearRangeLower = spdRange3and4;
|
currentGearRangeLower = spdRange3and4;
|
||||||
currentGearRangeUpper = spdRange4and5;
|
currentGearRangeUpper = spdRange4and5;
|
||||||
} else if (speed * accelerationShift >= spdRange4and5 && speed * accelerationShift < spdRange5and6) {
|
} else if (speed4Gear * accelerationShift >= spdRange4and5 && speed4Gear * accelerationShift < spdRange5and6) {
|
||||||
calculatedGear = 5;
|
calculatedGear = 5;
|
||||||
currentGearRangeLower = spdRange4and5;
|
currentGearRangeLower = spdRange4and5;
|
||||||
currentGearRangeUpper = spdRange5and6;
|
currentGearRangeUpper = spdRange5and6;
|
||||||
} else if (speed * accelerationShift >= spdRange5and6 && speed * accelerationShift < spdRange6and7) {
|
} else if (speed4Gear * accelerationShift >= spdRange5and6 && speed4Gear * accelerationShift < spdRange6and7) {
|
||||||
calculatedGear = 6;
|
calculatedGear = 6;
|
||||||
currentGearRangeLower = spdRange5and6;
|
currentGearRangeLower = spdRange5and6;
|
||||||
currentGearRangeUpper = spdRange6and7;
|
currentGearRangeUpper = spdRange6and7;
|
||||||
} else if (speed * accelerationShift >= spdRange6and7 && speed * accelerationShift < spdRange7and8) {
|
} else if (speed4Gear * accelerationShift >= spdRange6and7 && speed4Gear * accelerationShift < spdRange7and8) {
|
||||||
calculatedGear = 7;
|
calculatedGear = 7;
|
||||||
currentGearRangeLower = spdRange6and7;
|
currentGearRangeLower = spdRange6and7;
|
||||||
currentGearRangeUpper = spdRange7and8;
|
currentGearRangeUpper = spdRange7and8;
|
||||||
} else if (speed * accelerationShift >= spdRange7and8) {
|
} else if (speed4Gear * accelerationShift >= spdRange7and8) {
|
||||||
calculatedGear = 8;
|
calculatedGear = 8;
|
||||||
currentGearRangeLower = spdRange7and8;
|
currentGearRangeLower = spdRange7and8;
|
||||||
currentGearRangeUpper = 60.0;
|
currentGearRangeUpper = 60.0;
|
||||||
@@ -390,7 +392,7 @@ void calcGear() {
|
|||||||
calcTimeDiff = millis() - lastGearCalc;
|
calcTimeDiff = millis() - lastGearCalc;
|
||||||
|
|
||||||
if (calculatedGear == currentGear) {
|
if (calculatedGear == currentGear) {
|
||||||
speedForBar = speed * accelerationShift;
|
speedForBar = speed4Gear * accelerationShift;
|
||||||
}
|
}
|
||||||
if ((calculatedGear + 1) < currentGear || (calculatedGear - 1) > currentGear || calcTimeDiff >= changeDelayMs || speedTrend > 0 ) {
|
if ((calculatedGear + 1) < currentGear || (calculatedGear - 1) > currentGear || calcTimeDiff >= changeDelayMs || speedTrend > 0 ) {
|
||||||
//zmień bieg tylko, gdy rożnica między biegiem wyliczonym a obecnym jest większa niż jeden lub gdy od zmieny biegu minely 3 sec
|
//zmień bieg tylko, gdy rożnica między biegiem wyliczonym a obecnym jest większa niż jeden lub gdy od zmieny biegu minely 3 sec
|
||||||
@@ -403,7 +405,7 @@ void calcGear() {
|
|||||||
currentGear = calculatedGear;
|
currentGear = calculatedGear;
|
||||||
previousGear = currentGear;
|
previousGear = currentGear;
|
||||||
lastGearCalc = millis();
|
lastGearCalc = millis();
|
||||||
speedForBar = speed * accelerationShift;
|
speedForBar = speed4Gear * accelerationShift;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (speedTrend >= 1 and calculatedGear < 8) {
|
if (speedTrend >= 1 and calculatedGear < 8) {
|
||||||
@@ -416,7 +418,7 @@ void calcGear() {
|
|||||||
currentGear = calculatedGear;
|
currentGear = calculatedGear;
|
||||||
previousGear = currentGear;
|
previousGear = currentGear;
|
||||||
lastGearCalc = millis();
|
lastGearCalc = millis();
|
||||||
speedForBar = speed * accelerationShift;
|
speedForBar = speed4Gear * accelerationShift;
|
||||||
|
|
||||||
} else if (speedTrend <= -1 and calculatedGear > 1) {
|
} else if (speedTrend <= -1 and calculatedGear > 1) {
|
||||||
if (currentGear > calculatedGear) {
|
if (currentGear > calculatedGear) {
|
||||||
@@ -425,10 +427,10 @@ void calcGear() {
|
|||||||
if (currentGear < calculatedGear) {
|
if (currentGear < calculatedGear) {
|
||||||
ups = ups + 1;
|
ups = ups + 1;
|
||||||
}
|
}
|
||||||
currentGear = calculatedGear;
|
|
||||||
previousGear = currentGear;
|
previousGear = currentGear;
|
||||||
|
currentGear = calculatedGear;
|
||||||
lastGearCalc = millis();
|
lastGearCalc = millis();
|
||||||
speedForBar = speed * accelerationShift;
|
speedForBar = speed4Gear * accelerationShift;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user