From 1804bbd7933f2f1d1af49c8ecce30e27889a766e Mon Sep 17 00:00:00 2001 From: sieja Date: Tue, 26 Nov 2024 21:20:25 +0100 Subject: [PATCH] =?UTF-8?q?Walidacja=20pr=C4=99dkosci=20zmiana=20bar=20gra?= =?UTF-8?q?fu=20na=20strza=C5=82k=C4=99=20i=20prawo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutomatedGearShifter.ino | 102 +++++++++--------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/LeonardoProMicro/AutomatedGearShifter/AutomatedGearShifter.ino b/LeonardoProMicro/AutomatedGearShifter/AutomatedGearShifter.ino index f74603f..5982e49 100644 --- a/LeonardoProMicro/AutomatedGearShifter/AutomatedGearShifter.ino +++ b/LeonardoProMicro/AutomatedGearShifter/AutomatedGearShifter.ino @@ -6,10 +6,11 @@ #include #include -#define Version "1.14.3" +#define Version "1.15.3" ////2DO: -//algorytm walidacji odczytu predkosci -//zmiana gear baaru na wskaznik +//diagnostyka i/lub przeciwdziałanie skokom predkosci +//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 kątów biegów, obwodu koła, ilosci magnesow @@ -202,7 +203,9 @@ void loop() { //################################################ //SPEED 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_last = 0.0; speed_last_2 = 0.0; @@ -216,8 +219,8 @@ void loop() { } } - if (speed > 99 || isinf(speed)) { - speed = 21.37; + if (speed4Gear > 99 || isinf(speed4Gear)) { + speed4Gear = 21.37; } calcGear(); displGear = 9 - currentGear; @@ -230,7 +233,7 @@ void loop() { display.setCursor(40, 0); display.print(currentGear); //SPEED_TREND - display.setCursor(100, 00); + display.setCursor(75, 00); if (speedTrend <= -1 ) { display.write(31); } else { @@ -251,14 +254,13 @@ void loop() { display.fillRect(115, 0, 7, 1, SSD1306_WHITE); display.fillRect(115, 63, 7, 1, SSD1306_WHITE); - if (speed >= currentGearRangeMiddle) { - gearBarHeight = int(((speedForBar - currentGearRangeMiddle) / (currentGearRangeUpper - currentGearRangeMiddle)) * 32); - gearBarPosition = 32 - gearBarHeight; - display.fillRect(122, gearBarPosition, 4, gearBarHeight, SSD1306_WHITE); - } else { - gearBarHeight = int(((currentGearRangeMiddle - speedForBar) / (currentGearRangeMiddle - currentGearRangeLower)) * 32); - display.fillRect(122, 32, 4, gearBarHeight, SSD1306_WHITE); - } + display.setTextSize(2); + + gearBarHeight = 64 - int(((speed4Gear - currentGearRangeLower) / (currentGearRangeUpper - currentGearRangeLower)) * 64) - 5; + display.setCursor(115, gearBarHeight); + display.write(16); + display.setTextSize(3); + //VOLT_BAR adcBattVoltValue = analogRead(VoltInptPin); @@ -279,7 +281,7 @@ void loop() { - if (speedTrend == -1 && speed > 0.0 ) { + if (speedTrend == -1 && speed4Gear > 0.0 ) { if (BrakingLightSwitch == 1) { digitalWrite(BrakingLight, HIGH); BrakingLightSwitch = 0; @@ -307,41 +309,41 @@ void calcSpeed() { lastMillisSpd = millissSpd; millissSpd = millis(); sigleTimeSpd = double(millissSpd - lastLastMillisSpd) / 1000; - speed_last_3 = speed_last_2; - speed_last_2 = speed_last; - speed_last = speed; +// speed_last_3 = speed_last_2; +// speed_last_2 = speed_last; +// speed_last = speed; speed = (((2 * Pi) / sigleTimeSpd * ((WheelCircumference) / (Pi)) * ms2kmh)) / MagnetsCnt; // diag - if (((speed_last_3 * 1.5) > speed) && speed > 10.0 && speedTrend > 0) { //zabezpieczenie przed losowymi sygnałami magesu - speed = speed_last_3; - } - speed = (speed + speed_last)/2; +// if (((speed_last_3 * 1.5) > speed) && speed > 10.0 && speedTrend > 0) { //zabezpieczenie przed losowymi sygnałami magesu +// speed = speed_last_3; +// } +// speed = (speed + speed_last)/2; totalDist = totalDist + (1/MagnetsCnt); } void calcGear() { //speed validation -// -// speedDiff_2 = speed4Gear_2-speed4Gear_1; -// speedDiff_3 = speed4Gear_3-speed4Gear_2; -// speed4Gear_1 = speed; -// speed4Gear_2 = speed4Gear_1; -// speed4Gear_3 = speed4Gear_2; -// 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) { -// speed4Gear = speed4Gear_1; -// } -// -// + speedDiff_3 = speed4Gear_3-speed4Gear_2; + speedDiff_2 = speed4Gear_2-speed4Gear_1; + speed4Gear_1 = speed; + speed4Gear_2 = speed4Gear_1; + speed4Gear_3 = speed4Gear_2; + speed4Geat_estimated = (((speedDiff_3 * avgWeight_3 + speedDiff_2 * avgWeight_2)/(avgWeight_3 + avgWeight_2))+ speed4Gear_1) + 4; + if (speed <= 10.0 or speed <= speed4Geat_estimated) { + speed4Gear_2 = speed4Gear; + speed4Gear = speed4Gear_1; + } + + //poniżej zamienić speed na speed4Gear //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; - } else if ((speed - speed_last_3) <= -1.0) { + } else if ((speed4Gear - speed4Gear_2) <= -0.5) { speedTrend = -1; } else { speedTrend = 0; @@ -352,35 +354,35 @@ void calcGear() { // }else { accelerationShift = 1; // } - if (speed * accelerationShift >= 0 && speed * accelerationShift < spdRange1and2) { + if (speed4Gear * accelerationShift >= 0 && speed4Gear * accelerationShift < spdRange1and2) { calculatedGear = 1; currentGearRangeLower = 2.5; currentGearRangeUpper = spdRange1and2; - } else if (speed * accelerationShift >= spdRange1and2 && speed * accelerationShift < spdRange2and3) { + } else if (speed4Gear * accelerationShift >= spdRange1and2 && speed4Gear * accelerationShift < spdRange2and3) { calculatedGear = 2; currentGearRangeLower = spdRange1and2; currentGearRangeUpper = spdRange2and3; - } else if (speed * accelerationShift >= spdRange2and3 && speed * accelerationShift < spdRange3and4) { + } else if (speed4Gear * accelerationShift >= spdRange2and3 && speed4Gear * accelerationShift < spdRange3and4) { calculatedGear = 3; currentGearRangeLower = spdRange2and3; currentGearRangeUpper = spdRange3and4; - } else if (speed * accelerationShift >= spdRange3and4 && speed * accelerationShift < spdRange4and5) { + } else if (speed4Gear * accelerationShift >= spdRange3and4 && speed4Gear * accelerationShift < spdRange4and5) { calculatedGear = 4; currentGearRangeLower = spdRange3and4; currentGearRangeUpper = spdRange4and5; - } else if (speed * accelerationShift >= spdRange4and5 && speed * accelerationShift < spdRange5and6) { + } else if (speed4Gear * accelerationShift >= spdRange4and5 && speed4Gear * accelerationShift < spdRange5and6) { calculatedGear = 5; currentGearRangeLower = spdRange4and5; currentGearRangeUpper = spdRange5and6; - } else if (speed * accelerationShift >= spdRange5and6 && speed * accelerationShift < spdRange6and7) { + } else if (speed4Gear * accelerationShift >= spdRange5and6 && speed4Gear * accelerationShift < spdRange6and7) { calculatedGear = 6; currentGearRangeLower = spdRange5and6; currentGearRangeUpper = spdRange6and7; - } else if (speed * accelerationShift >= spdRange6and7 && speed * accelerationShift < spdRange7and8) { + } else if (speed4Gear * accelerationShift >= spdRange6and7 && speed4Gear * accelerationShift < spdRange7and8) { calculatedGear = 7; currentGearRangeLower = spdRange6and7; currentGearRangeUpper = spdRange7and8; - } else if (speed * accelerationShift >= spdRange7and8) { + } else if (speed4Gear * accelerationShift >= spdRange7and8) { calculatedGear = 8; currentGearRangeLower = spdRange7and8; currentGearRangeUpper = 60.0; @@ -390,7 +392,7 @@ void calcGear() { calcTimeDiff = millis() - lastGearCalc; if (calculatedGear == currentGear) { - speedForBar = speed * accelerationShift; + speedForBar = speed4Gear * accelerationShift; } 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 @@ -403,7 +405,7 @@ void calcGear() { currentGear = calculatedGear; previousGear = currentGear; lastGearCalc = millis(); - speedForBar = speed * accelerationShift; + speedForBar = speed4Gear * accelerationShift; } if (speedTrend >= 1 and calculatedGear < 8) { @@ -416,7 +418,7 @@ void calcGear() { currentGear = calculatedGear; previousGear = currentGear; lastGearCalc = millis(); - speedForBar = speed * accelerationShift; + speedForBar = speed4Gear * accelerationShift; } else if (speedTrend <= -1 and calculatedGear > 1) { if (currentGear > calculatedGear) { @@ -425,10 +427,10 @@ void calcGear() { if (currentGear < calculatedGear) { ups = ups + 1; } - currentGear = calculatedGear; previousGear = currentGear; + currentGear = calculatedGear; lastGearCalc = millis(); - speedForBar = speed * accelerationShift; + speedForBar = speed4Gear * accelerationShift; }; }