/* 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 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 trapezoidalMotionProfile(double dist, double maxVel, double accel, double decel) { double max = std::min(std::sqrt((2 * accel * decel * dist) / accel + decel), maxVel); // Utilize kinematic equations to determine a max velocity double accelTime = max / accel; // Calculate time required to accelerate and decelerate double decelTime = max / decel; double coastDist = (dist / max) - (max / (2 * accel)) - (max / (2 * decel)); // Coast time is the moment from where motors go unpowered, and the remaining distance that the robot travels double coastTime = coastDist / max; double totalTime = accelTime + decelTime + coastTime; double vel = 0; std::vector profile; /* Add the points to the vector*/ 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