Denk proof backup #too_many

This commit is contained in:
Blboun3 2023-11-14 11:14:18 +01:00
parent 37d921b914
commit 095aef2d3f
2 changed files with 93 additions and 15 deletions

BIN
app

Binary file not shown.

108
app.cpp
View File

@ -4,10 +4,17 @@
#include <functional> #include <functional>
#include <sstream> #include <sstream>
#include <math.h> #include <math.h>
#include <cfloat>
#include <limits.h>
/* /*
Change notes: Change notes:
0.4.3 - 'HELGA' (#)
Motor problems indicator with colors:
left - red, right - orange,
when motor is stuck change LED color
0.4.2 - 'HELGA' (#67) 0.4.2 - 'HELGA' (#67)
Updated run_short() to run_short_side() Updated run_short() to run_short_side()
Added gyro Added gyro
@ -60,6 +67,13 @@ struct MPWRS
int rMotorPWR; int rMotorPWR;
}; };
// Structure to hold motor powers and speed modifier
struct MPWRSPlus
{
MPWRS motor_powers;
int SPEED_MODIFIER;
};
// Structure to hold notes // Structure to hold notes
struct note struct note
{ {
@ -100,6 +114,21 @@ void close_door(ev3cxx::Motor hinge)
hinge.onForDegrees(25, 200); hinge.onForDegrees(25, 200);
} }
void turn(ev3cxx::MotorTank naVodu, ev3cxx::GyroSensor naklonoMer)
{
int startAngle = naklonoMer.angle();
int endAngle = startAngle - 90;
naVodu.onForRotations(-25, 50, 1.25);
if(ev3cxx::abs(naklonoMer.angle()) > ev3cxx::abs(endAngle) + 2 || ev3cxx::abs(naklonoMer.angle()) < ev3cxx::abs(endAngle) - 2) { // !!!! NEFUNGUJEž
ev3_speaker_play_tone(NOTE_C4, 250);
tslp_tsk(250);
ev3_speaker_play_tone(NOTE_C4, 125);
tslp_tsk(125);
ev3_speaker_play_tone(NOTE_D4, 250);
tslp_tsk(250);
}
}
/* /*
Function to pick up all cubes on shorter side Function to pick up all cubes on shorter side
return true if ran till the end and false if stopped by middle button return true if ran till the end and false if stopped by middle button
@ -108,7 +137,7 @@ bool run_short_side(ev3cxx::MotorTank motors, MPWRS idealMPWRS, ev3cxx::GyroSens
{ {
const int LEFT_THRESHOLD = -2; const int LEFT_THRESHOLD = -2;
const int RIGHT_THRESHOLD = 2; const int RIGHT_THRESHOLD = 2;
const int CORRECTION_MULTIPLIER = 10; const int CORRECTION_MULTIPLIER = 20;
const int CYCLE_LIMIT = 90; const int CYCLE_LIMIT = 90;
gyro.resetHard(); gyro.resetHard();
@ -184,6 +213,7 @@ bool run_short_side(ev3cxx::MotorTank motors, MPWRS idealMPWRS, ev3cxx::GyroSens
run = false; run = false;
} }
} }
motors.off(true);
ev3_speaker_play_tone(NOTE_C4, 250); ev3_speaker_play_tone(NOTE_C4, 250);
tslp_tsk(250); tslp_tsk(250);
ev3_speaker_play_tone(NOTE_C4, 125); ev3_speaker_play_tone(NOTE_C4, 125);
@ -199,19 +229,50 @@ bool run_short_side(ev3cxx::MotorTank motors, MPWRS idealMPWRS, ev3cxx::GyroSens
return !error; return !error;
} }
MPWRSPlus calculate_motor_pwrs()
{
int batteryLevel = ev3_battery_voltage_mV();
double squared = (double)0.00003 * (double)(batteryLevel * batteryLevel);
double linear = -0.42 * (double)batteryLevel;
double constant = 1470;
double modifier = squared + linear + constant;
int SPEED_MODIFIER = 30 - ((int)round(modifier));
// ev3cxx::display.format(4, "Q: % \nL: % \nC: % \nSM: % ") % squared % linear % constant % modifier;
MPWRS idealMPWRS;
idealMPWRS.lMotorPWR = 85 + SPEED_MODIFIER;
idealMPWRS.rMotorPWR = 70 + SPEED_MODIFIER;
MPWRSPlus retVal;
retVal.motor_powers = idealMPWRS;
retVal.SPEED_MODIFIER = SPEED_MODIFIER;
return retVal;
}
void main_task(intptr_t unused) void main_task(intptr_t unused)
{ {
// Create version info // Create version info
// version createVersion(int versionID, const char *codename, int major, int minor, int patch, int day, int month, int year, int hour, int minute) // version createVersion(int versionID, const char *codename, int major, int minor, int patch, int day, int month, int year, int hour, int minute)
const version VERSION = createVersion(67, "HELGA", 0, 4, 2, 10, 11, 2023, 14, 40); const version VERSION = createVersion(70, "HELGA", 0, 4, 2, 10, 11, 2023, 14, 40);
// Set-up screen // Set-up screen
ev3cxx::display.resetScreen(); ev3cxx::display.resetScreen();
ev3cxx::display.setFont(EV3_FONT_MEDIUM); ev3cxx::display.setFont(EV3_FONT_MEDIUM);
// Set up motor powers
MPWRSPlus calcedPWRS = calculate_motor_pwrs();
MPWRS idealMPWRS = calcedPWRS.motor_powers;
const int SPEED_MODIFIER = calcedPWRS.SPEED_MODIFIER;
MPWRS motor_powers;
motor_powers.lMotorPWR = idealMPWRS.lMotorPWR;
motor_powers.rMotorPWR = idealMPWRS.rMotorPWR;
// Print version information on screen // Print version information on screen
ev3cxx::display.format(" DOBREMYSL\nVERSION: % .% .% #% \nNAME: % \nBattery: % mV") % VERSION.major % VERSION.minor % VERSION.patch % VERSION.id % VERSION.codename % ev3_battery_voltage_mV(); ev3cxx::display.format(" DOBREMYSL\n% .% .% #% \nNAME: % \nBattery: % mV % \n % ") % VERSION.major % VERSION.minor % VERSION.patch % VERSION.id % VERSION.codename % ev3_battery_voltage_mV() % SPEED_MODIFIER;
ev3cxx::statusLight.setColor(ev3cxx::StatusLightColor::GREEN); ev3cxx::statusLight.setColor(ev3cxx::StatusLightColor::GREEN);
@ -234,16 +295,6 @@ void main_task(intptr_t unused)
ev3_speaker_play_tone(NOTE_F4, 75); ev3_speaker_play_tone(NOTE_F4, 75);
tslp_tsk(200); tslp_tsk(200);
// Set up motor powers
const int SPEED_MODIFIER = 10;
MPWRS idealMPWRS;
idealMPWRS.lMotorPWR = 75 - SPEED_MODIFIER;
idealMPWRS.rMotorPWR = 60 - SPEED_MODIFIER;
MPWRS motor_powers;
motor_powers.lMotorPWR = idealMPWRS.lMotorPWR;
motor_powers.rMotorPWR = idealMPWRS.rMotorPWR;
// Set up motors // Set up motors
ev3cxx::Motor hinge(ev3cxx::MotorPort::A, ev3cxx::MotorType::LARGE); // Hinge motor ev3cxx::Motor hinge(ev3cxx::MotorPort::A, ev3cxx::MotorType::LARGE); // Hinge motor
ev3cxx::MotorTank motors(ev3cxx::MotorPort::B, ev3cxx::MotorPort::C); // Tank motors ev3cxx::MotorTank motors(ev3cxx::MotorPort::B, ev3cxx::MotorPort::C); // Tank motors
@ -255,8 +306,35 @@ void main_task(intptr_t unused)
// Start program // Start program
btnEnter.waitForClick(); btnEnter.waitForClick();
// turn_left(motors); for (int i = 0; i < 10; i++)
bool side_1 = run_short_side(motors, motor_powers, gyro); {
turn(motors, gyro);
ev3_speaker_play_tone(NOTE_F4, 100);
tslp_tsk(200);
ev3_speaker_play_tone(NOTE_A4, 100);
tslp_tsk(200);
ev3_speaker_play_tone(NOTE_C4, 100);
tslp_tsk(200);
ev3_speaker_play_tone(NOTE_F4, 50);
tslp_tsk(100);
ev3_speaker_play_tone(NOTE_A4, 50);
tslp_tsk(100);
ev3_speaker_play_tone(NOTE_C4, 50);
tslp_tsk(100);
ev3_speaker_play_tone(NOTE_F4, 25);
tslp_tsk(50);
ev3_speaker_play_tone(NOTE_A4, 25);
tslp_tsk(50);
ev3_speaker_play_tone(NOTE_C4, 25);
tslp_tsk(50);
ev3_speaker_play_tone(NOTE_F4, 12);
tslp_tsk(25);
ev3_speaker_play_tone(NOTE_A4, 12);
tslp_tsk(25);
ev3_speaker_play_tone(NOTE_C4, 12);
tslp_tsk(25);
}
bool side_1 = false;//run_short_side(motors, motor_powers, gyro);
if (!side_1) if (!side_1)
{ {