185 lines
4.4 KiB
C++
185 lines
4.4 KiB
C++
/*
|
|
This Source Code Form is subject to the terms of the Mozilla Public
|
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#include "main.h"
|
|
|
|
pros::Controller master(pros::E_CONTROLLER_MASTER);
|
|
|
|
namespace ary {
|
|
int mode = DISABLE;
|
|
|
|
void printScr() {
|
|
std::cout << R"(
|
|
|
|
|
|
_____ ______ _____ _ _
|
|
| ___|___ / |_ _| | | | |
|
|
| |__ / /_____| | ___ _ __ ___ _ __ | | __ _| |_ ___
|
|
| __| / /______| |/ _ \ '_ ` _ \| '_ \| |/ _` | __/ _ \
|
|
| |___./ /___ | | __/ | | | | | |_) | | (_| | || __/
|
|
\____/\_____/ \_/\___|_| |_| |_| .__/|_|\__,_|\__\___|
|
|
| |
|
|
|_|
|
|
)" << '\n';
|
|
|
|
printf("Version: 2.1.1\n");
|
|
}
|
|
std::string get_last_word(std::string text) {
|
|
std::string word = "";
|
|
for (int i = text.length() - 1; i >= 0; i--) {
|
|
if (text[i] != ' ') {
|
|
word += text[i];
|
|
} else {
|
|
std::reverse(word.begin(), word.end());
|
|
return word;
|
|
}
|
|
}
|
|
std::reverse(word.begin(), word.end());
|
|
return word;
|
|
}
|
|
std::string get_rest_of_the_word(std::string text, int position) {
|
|
std::string word = "";
|
|
for (int i = position; i < text.length(); i++) {
|
|
if (text[i] != ' ' && text[i] != '\n') {
|
|
word += text[i];
|
|
} else {
|
|
return word;
|
|
}
|
|
}
|
|
return word;
|
|
}
|
|
//All iance\n\nWE WIN THESE!!!!!
|
|
void print_to_screen(std::string text, int line) {
|
|
int CurrAutoLine = line;
|
|
std::vector<string> texts = {};
|
|
std::string temp = "";
|
|
|
|
for (int i = 0; i < text.length(); i++) {
|
|
if (text[i] != '\n' && temp.length() + 1 > 32) {
|
|
auto last_word = get_last_word(temp);
|
|
if (last_word == temp) {
|
|
texts.push_back(temp);
|
|
temp = text[i];
|
|
} else {
|
|
int size = last_word.length();
|
|
|
|
auto rest_of_word = get_rest_of_the_word(text, i);
|
|
temp.erase(temp.length() - size, size);
|
|
texts.push_back(temp);
|
|
last_word += rest_of_word;
|
|
i += rest_of_word.length();
|
|
temp = last_word;
|
|
if (i >= text.length() - 1) {
|
|
texts.push_back(temp);
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
if (i >= text.length() - 1) {
|
|
temp += text[i];
|
|
texts.push_back(temp);
|
|
temp = "";
|
|
break;
|
|
} else if (text[i] == '\n') {
|
|
texts.push_back(temp);
|
|
temp = "";
|
|
} else {
|
|
temp += text[i];
|
|
}
|
|
}
|
|
for (auto i : texts) {
|
|
if (CurrAutoLine > 7) {
|
|
pros::lcd::clear();
|
|
pros::lcd::set_text(line, "Out of Bounds. Print Line is too far down");
|
|
return;
|
|
}
|
|
pros::lcd::clear_line(CurrAutoLine);
|
|
pros::lcd::set_text(CurrAutoLine, i);
|
|
CurrAutoLine++;
|
|
}
|
|
}
|
|
|
|
std::string exit_to_string(exit_output input) {
|
|
switch ((int)input) {
|
|
case RUNNING:
|
|
return "Running";
|
|
case SMALL_EXIT:
|
|
return "Small";
|
|
case BIG_EXIT:
|
|
return "Big";
|
|
case VELOCITY_EXIT:
|
|
return "Velocity";
|
|
case mA_EXIT:
|
|
return "mA";
|
|
case ERROR_NO_CONSTANTS:
|
|
return "Error: Exit condition constants not set!";
|
|
default:
|
|
return "Error: Out of bounds!";
|
|
}
|
|
|
|
return "Error: Out of bounds!";
|
|
}
|
|
namespace util {
|
|
bool AUTON_RAN = true;
|
|
|
|
bool is_reversed(double input) {
|
|
if (input < 0) return true;
|
|
return false;
|
|
}
|
|
|
|
int signum(double input) {
|
|
if (input > 0)
|
|
return 1;
|
|
else if (input < 0)
|
|
return -1;
|
|
return 0;
|
|
}
|
|
|
|
double clip_num(double input, double max, double min) {
|
|
if (input > max)
|
|
return max;
|
|
else if (input < min)
|
|
return min;
|
|
return input;
|
|
}
|
|
|
|
std::vector<double> trapezoidalMotionProfile(double dist, double maxVel, double accel, double decel) {
|
|
double max = std::min(std::sqrt((2 * accel * decel * dist) / accel + decel), maxVel);
|
|
double accelTime = max / accel;
|
|
double decelTime = max / decel;
|
|
double coastDist = (dist / max) - (max / (2 * accel)) - (max / (2 * decel));
|
|
double coastTime = coastDist / max;
|
|
double totalTime = accelTime + decelTime + coastTime;
|
|
double vel = 0;
|
|
double diff;
|
|
std::vector<double> profile;
|
|
|
|
for (int i = 0; i < std::ceil(totalTime); i++)
|
|
{
|
|
if (i < std::floor(accelTime))
|
|
{
|
|
profile.push_back(vel);
|
|
vel += accel;
|
|
}
|
|
|
|
else if (i < coastTime + accelTime)
|
|
{
|
|
profile.push_back(max);
|
|
}
|
|
|
|
else
|
|
{
|
|
profile.push_back(vel);
|
|
vel -= decel;
|
|
}
|
|
}
|
|
return profile;
|
|
}
|
|
|
|
} // namespace util
|
|
} // namespace ary
|