From 602bfc209892118aca079ba485da5538be71cc7b Mon Sep 17 00:00:00 2001 From: Aaron John Sabu <aaronjohnsabu1999@gmail.com> Date: Fri, 15 Oct 2021 11:49:54 -0700 Subject: [PATCH] Recommit --- .../Localization.cpp | 1 + .../feather_main_test_PID_Lidar_Full.ino | 67 +++++++++++++----- Code/Control/Main_Code/.vs/Main_Code/v16/.suo | Bin 0 -> 15872 bytes .../Main_Code/.vs/Main_Code/v16/Browse.VC.db | Bin 0 -> 290816 bytes .../Main_Code/.vs/ProjectSettings.json | 3 + .../Main_Code/.vs/VSWorkspaceState.json | 7 ++ Code/Control/Main_Code/.vs/slnx.sqlite | Bin 0 -> 90112 bytes .../{ColorDetect.cpp => ColorDetect.h} | 12 +++- Code/Control/Main_Code/Constants.cpp | 9 --- Code/Control/Main_Code/Constants.h | 30 ++++++++ Code/Control/Main_Code/{Debug.cpp => Debug.h} | 43 +++++++---- Code/Control/Main_Code/{LIDAR.cpp => LIDAR.h} | 5 ++ .../{Localization.cpp => Localization.h} | 27 +++++-- Code/Control/Main_Code/Main_Code.ino | 42 +++++++---- .../Main_Code/{Mesh.cpp.bkp => Mesh.h.bkp} | 0 Code/Control/Main_Code/{PID.cpp => PID.h} | 35 +++++---- .../{Propulsion.cpp => Propulsion.h} | 11 ++- Code/Control/Main_Code/utilities.h | 3 +- 18 files changed, 217 insertions(+), 78 deletions(-) create mode 100644 Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/Localization.cpp create mode 100644 Code/Control/Main_Code/.vs/Main_Code/v16/.suo create mode 100644 Code/Control/Main_Code/.vs/Main_Code/v16/Browse.VC.db create mode 100644 Code/Control/Main_Code/.vs/ProjectSettings.json create mode 100644 Code/Control/Main_Code/.vs/VSWorkspaceState.json create mode 100644 Code/Control/Main_Code/.vs/slnx.sqlite rename Code/Control/Main_Code/{ColorDetect.cpp => ColorDetect.h} (89%) delete mode 100644 Code/Control/Main_Code/Constants.cpp create mode 100644 Code/Control/Main_Code/Constants.h rename Code/Control/Main_Code/{Debug.cpp => Debug.h} (72%) rename Code/Control/Main_Code/{LIDAR.cpp => LIDAR.h} (95%) rename Code/Control/Main_Code/{Localization.cpp => Localization.h} (54%) rename Code/Control/Main_Code/{Mesh.cpp.bkp => Mesh.h.bkp} (100%) rename Code/Control/Main_Code/{PID.cpp => PID.h} (85%) rename Code/Control/Main_Code/{Propulsion.cpp => Propulsion.h} (91%) diff --git a/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/Localization.cpp b/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/Localization.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/Localization.cpp @@ -0,0 +1 @@ + diff --git a/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/feather_main_test_PID_Lidar_Full.ino b/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/feather_main_test_PID_Lidar_Full.ino index 3a05f2f..a619a07 100644 --- a/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/feather_main_test_PID_Lidar_Full.ino +++ b/Code/Control/Feather Code - Zhaoliang/feather_main_test_PID_Lidar_Full/feather_main_test_PID_Lidar_Full.ino @@ -1,8 +1,7 @@ - #include <SparkFun_VL53L1X.h> #include <Wire.h> #include <Adafruit_MotorShield.h> - +#include <Adafruit_MPL3115A2.h> #include "LedPanel.h" #include <Arduino.h> #include <string> @@ -18,7 +17,13 @@ SFEVL53L1X distanceSensor; int budgetIndex = 4; int budgetValue[7] = {15, 20, 33, 50, 100, 200, 500}; int LED = LED_BUILTIN; -// + +float groundLevel = 120; +float lowHeightBarrier = 4; +float highHeightBarrier = 4; +float ceilingHeight = 20; + +Adafruit_MPL3115A2 baro; //Identify all the global constants that will be used by the robot const int BAUD_RATE = 115200; @@ -37,6 +42,8 @@ int displayTracking = 0; int8_t threshold[6] = {0, 0, 0, 0, 0, 0}; int BASE_SPEED = 70; //125; +int hoverAltitude = -1; + //The debug LEDs that we will be using. Description at: const int DEBUG_STATE = 31; const int DEBUG_KP = 30; @@ -86,6 +93,7 @@ void setup() { PID_x.SetMode(AUTOMATIC); PID_y.SetMode(AUTOMATIC); // ============== lidar part ===================== + /* pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); if (distanceSensor.begin() == 0) @@ -93,6 +101,12 @@ void setup() { distanceSensor.startRanging(); distanceSensor.setIntermeasurementPeriod(budgetValue[budgetIndex]); digitalWrite(LED, LOW); + */ + if (!baro.begin()) { + Serial.println("Barometer not found"); + while(1); + } + baro.setSeaPressure(1016); } @@ -120,19 +134,19 @@ void loop() { //if the demo is still ongoing, check to see if there is a desired-color blob panel.singleLED(DEBUG_STATE, 10, 0, 0); //standby - + Serial.println("Standby"); //========== lidar part ========= int dist = 0; int ball_cap = 0; - dist = distanceSensor.getDistance(); - Serial.println(dist); - if ((dist < lidar_thres) && (dist > 0)){ // if we capture the ball - ball_cap = 1; - Serial.println("find ball"); - }else{ - ball_cap = 2; - Serial.println("no ball"); - } +// dist = distanceSensor.getDistance(); +// Serial.println(dist); +// if ((dist < lidar_thres) && (dist > 0)){ // if we capture the ball +// ball_cap = 1; +// Serial.println("find ball"); +// }else{ +// ball_cap = 2; +// Serial.println("no ball"); +// } // ========== goal finder ========= int id = -1; int tx = 0; int ty = 0; int tz = 0; @@ -141,10 +155,19 @@ void loop() { int x = 0; int y = 0; + Serial.println("Calculate Altitude"); + float altitude = altitudeCalc(); + Serial.println("Altitude Calculated"); + if (hoverAltitude > 0){ + moveVertical(150*(hoverAltitude-altitude)); + } + Serial.println("Moved to hoverAltitude"); - if (ball_cap == 1){ // if we catch the green ball +// if (ball_cap == 1){ // if we catch the green ball // we go find the goal + if(cam.exe_goalfinder(goal[0],goal[1],goal[2], id, tx, ty, tz, rx, ry, rz)){ + Serial.println("Goal Found"); panel.singleLED(DEBUG_STATE, 0, 10, 0); Inputx = tx/1.00; Inputy = ty/1.00; @@ -157,6 +180,11 @@ void loop() { Serial.print("y: "); Serial.println(Outputy); */ + + if (hoverAltitude == -1){ + hoverAltitude = altitude; + } + Serial.println("hoverAltitude Set"); Serial.println("moving toward goal"); moveVertical(Outputy); moveHorizontal(Outputx, BASE_SPEED); @@ -164,7 +192,9 @@ void loop() { seeking(); Serial.print("catched the ball and seeking"); } +/* }else { // we keep searching for the green ball + hoverAltitude = -1; if(cam.exe_color_detection_biggestblob(threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5], x, y)){ // if (displayTracking > 0){ // displayTrackedObject(x, y, RESOLUTION_W, RESOLUTION_H); //THIS NEEDS WORK @@ -184,8 +214,8 @@ void loop() { seeking(); Serial.println("seeking the ball "); } - } - + } +*/ } @@ -453,3 +483,8 @@ void debugPIDConstants(int lednum, double oldval, double newval){ panel.singleLED(lednum, 10, 10, 10); } } + + +float altitudeCalc(){ + return (baro.getAltitude() - groundLevel); +} diff --git a/Code/Control/Main_Code/.vs/Main_Code/v16/.suo b/Code/Control/Main_Code/.vs/Main_Code/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..8433dddbd650d01c91cbda78ae193bedfecb1970 GIT binary patch literal 15872 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 PAFw=CY3av2x>)`n-WuQ@ literal 0 HcmV?d00001 diff --git a/Code/Control/Main_Code/.vs/Main_Code/v16/Browse.VC.db b/Code/Control/Main_Code/.vs/Main_Code/v16/Browse.VC.db new file mode 100644 index 0000000000000000000000000000000000000000..837165e36d8e259d1a8d00631b75fffec7d37b11 GIT binary patch literal 290816 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 literal 0 HcmV?d00001 diff --git a/Code/Control/Main_Code/.vs/ProjectSettings.json b/Code/Control/Main_Code/.vs/ProjectSettings.json new file mode 100644 index 0000000..0cf5ea5 --- /dev/null +++ b/Code/Control/Main_Code/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "No Configurations" +} \ No newline at end of file diff --git a/Code/Control/Main_Code/.vs/VSWorkspaceState.json b/Code/Control/Main_Code/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..f814bde --- /dev/null +++ b/Code/Control/Main_Code/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\Constants.h", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/Code/Control/Main_Code/.vs/slnx.sqlite b/Code/Control/Main_Code/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..8e3e7640afad073acdd4ee7734b574de7781eee4 GIT binary patch literal 90112 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 W00AHX1b_e#00KY&2mpa&C-8qC_+=dc literal 0 HcmV?d00001 diff --git a/Code/Control/Main_Code/ColorDetect.cpp b/Code/Control/Main_Code/ColorDetect.h similarity index 89% rename from Code/Control/Main_Code/ColorDetect.cpp rename to Code/Control/Main_Code/ColorDetect.h index 8805715..282f542 100644 --- a/Code/Control/Main_Code/ColorDetect.cpp +++ b/Code/Control/Main_Code/ColorDetect.h @@ -1,6 +1,14 @@ +#ifndef COLORDETECT_H +#define COLORDETECT_H + #include <string> +using namespace std; + +// Function Declarations +void translateCodetoThreshold(int code); +void setColorThreshold(String msg, int8_t thres[], int arraySize); -void ColorDetect_Setup(){ +void ColorDetect_Setup(int findcolor){ translateCodetoThreshold(findcolor); } @@ -75,3 +83,5 @@ void setColorThreshold(String msg, int8_t thres[], int arraySize){ } } } + +#endif diff --git a/Code/Control/Main_Code/Constants.cpp b/Code/Control/Main_Code/Constants.cpp deleted file mode 100644 index f332f03..0000000 --- a/Code/Control/Main_Code/Constants.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// Identify all the global constants that will be used by the robot -const int BAUD_RATE = 115200; -const int MAX_SPEED = 255; -const int SEEKING_SPEED = 70; -const double RESOLUTION_W = 320.0; -const double RESOLUTION_H = 240.0; -const int ENDDEMO_TAG = 0; -const uint32_t THISNODE_ID = 88789821; -int BASE_SPEED = 50; //125; \ No newline at end of file diff --git a/Code/Control/Main_Code/Constants.h b/Code/Control/Main_Code/Constants.h new file mode 100644 index 0000000..f43c1dc --- /dev/null +++ b/Code/Control/Main_Code/Constants.h @@ -0,0 +1,30 @@ +#ifndef CONSTANTS_H +#define CONSTANTS_H + +#include <vector> + +// Identify all the global constants that will be used by the robot +const int BAUD_RATE = 115200; +const int MAX_SPEED = 255; +const int SEEKING_SPEED = 70; +const double RESOLUTION_W = 320.0; +const double RESOLUTION_H = 240.0; +const int ENDDEMO_TAG = 0; +const uint32_t THISNODE_ID = 88789821; +int BASE_SPEED = 50; //125; + +// The debug LEDs that we will be using. Description at: +const int DEBUG_STATE = 31; +const int DEBUG_KP = 30; +const int DEBUG_KI = 29; +const int DEBUG_KD = 28; +const int DEBUG_BASESPEED = 27; +const int DEBUG_THRESHOLD_MIN = 26; +const int DEBUG_THRESHOLD_MAX = 25; +const int DEBUG_VERTICALSPEED = 17; +const int DEBUG_RSPEED = 16; +const int DEBUG_LSPEED = 24; + +int8_t threshold[6] = {0, 0, 0, 0, 0, 0}; + +#endif diff --git a/Code/Control/Main_Code/Debug.cpp b/Code/Control/Main_Code/Debug.h similarity index 72% rename from Code/Control/Main_Code/Debug.cpp rename to Code/Control/Main_Code/Debug.h index c29f469..4b51312 100644 --- a/Code/Control/Main_Code/Debug.cpp +++ b/Code/Control/Main_Code/Debug.h @@ -1,19 +1,13 @@ +#ifndef DEBUG_H +#define DEBUG_H + #include "LedPanel.h" -#include "Constants.cpp" - -LedPanel panel(NUMPIXELS,PIN_PIXELS); - -//The debug LEDs that we will be using. Description at: -const int DEBUG_STATE = 31; -const int DEBUG_KP = 30; -const int DEBUG_KI = 29; -const int DEBUG_KD = 28; -const int DEBUG_BASESPEED = 27; -const int DEBUG_THRESHOLD_MIN = 26; -const int DEBUG_THRESHOLD_MAX = 25; -const int DEBUG_VERTICALSPEED = 17; -const int DEBUG_RSPEED = 16; -const int DEBUG_LSPEED = 24; +#include "Constants.h" + +LedPanel panel(NUMPIXELS, PIN_PIXELS); + +// Function Declarations +void debugPIDConstants(int lednum, double oldval, double newval); void Debug_Setup(){ panel.beginPanel(); @@ -44,6 +38,23 @@ void Debug_GoalSeeking(){ panel.singleLED(DEBUG_STATE, 10, 10, 10); } +void Debug_SetPIDConstants(double &p_constant, double &i_constant, double &d_constant, double new_p, double new_i, double new_d){ + unsigned long t = millis(); + debugPIDConstants(DEBUG_KP, p_constant, new_p); + debugPIDConstants(DEBUG_KI, i_constant, new_i); + debugPIDConstants(DEBUG_KD, d_constant, new_d); + + p_constant = new_p; + i_constant = new_i; + d_constant = new_d; + + while(millis() < t+2000); //debugging LED will light up for 2 seconds + + panel.singleLED(DEBUG_KP, 0, 0, 0); + panel.singleLED(DEBUG_KI, 0, 0, 0); + panel.singleLED(DEBUG_KD, 0, 0, 0); +} + void displaySpeed(int lspeed, int rspeed){ //Serial.println("display speed"); if (lspeed < 0){ @@ -84,3 +95,5 @@ void debugPIDConstants(int lednum, double oldval, double newval){ panel.singleLED(lednum, 10, 10, 10); } } + +#endif diff --git a/Code/Control/Main_Code/LIDAR.cpp b/Code/Control/Main_Code/LIDAR.h similarity index 95% rename from Code/Control/Main_Code/LIDAR.cpp rename to Code/Control/Main_Code/LIDAR.h index 4c08a21..c5cab0b 100644 --- a/Code/Control/Main_Code/LIDAR.cpp +++ b/Code/Control/Main_Code/LIDAR.h @@ -1,3 +1,6 @@ +#ifndef LIDAR_H +#define LIDAR_H + #include <SparkFun_VL53L1X.h> // LIDAR @@ -30,3 +33,5 @@ float LIDAR_BallCapture(){ Serial.println("no ball"); } } + +#endif diff --git a/Code/Control/Main_Code/Localization.cpp b/Code/Control/Main_Code/Localization.h similarity index 54% rename from Code/Control/Main_Code/Localization.cpp rename to Code/Control/Main_Code/Localization.h index ee447c4..54be7c9 100644 --- a/Code/Control/Main_Code/Localization.cpp +++ b/Code/Control/Main_Code/Localization.h @@ -1,4 +1,7 @@ -#include "Constants.cpp" +#ifndef LOCALIZATION_H +#define LOCALIZATION_H + +#include "Constants.h" #include <Adafruit_MPL3115A2.h> float groundLevel = 120; @@ -8,7 +11,12 @@ float ceilingHeight = 20; Adafruit_MPL3115A2 baro; -void LocalizationSetup(){ +float hoverAltitude = -1; + +// Function Declarations +float altitudeCalc(); + +void Localization_Setup(){ if (!baro.begin()) { Serial.println("Barometer not found"); while(1); @@ -16,16 +24,27 @@ void LocalizationSetup(){ baro.setSeaPressure(1016); } -void LocalizationInit(){ +float Localization_Init(){ float altitude = altitudeCalc() - groundLevel; + return altitude; } -void Localization_GoalFound(){ +void Localization_GoalFound(float altitude){ if (hoverAltitude == -1){ hoverAltitude = altitude; } } +void Localization_BallDetected(){ + hoverAltitude = -1; +} + +float altitudeControl(){ + return hoverAltitude; +} + float altitudeCalc(){ return baro.getAltitude(); } + +#endif diff --git a/Code/Control/Main_Code/Main_Code.ino b/Code/Control/Main_Code/Main_Code.ino index bb99f2f..a359a37 100644 --- a/Code/Control/Main_Code/Main_Code.ino +++ b/Code/Control/Main_Code/Main_Code.ino @@ -1,23 +1,34 @@ +#include "PID.h" #include <string> #include <vector> #include <Wire.h> +#include "Debug.h" +#include "LIDAR.h" #include "Camera.h" -#include "Constants.cpp" #include <Arduino.h> +#include "Constants.h" #include "utilities.h" +#include "Propulsion.h" +#include "ColorDetect.h" +#include "Localization.h" // #include "Adafruit_VL53L0X.h" +using namespace std; //Identify all the variables that will be used by the robot int findcolor = 1; //based on the same code from openMV. Determine the color you want to find char newPTCL = '1'; -int pause = 0; +int pauseState = 0; int displayTracking = 0; -int8_t threshold[6] = {0, 0, 0, 0, 0, 0}; int ballCapture = 0; int ballDetect = 0; int goalFind = 0; +float altitude = 0; + +// Function Declarations + + //Create the interface that will be used by the camera openmv::rpc_scratch_buffer<256> scratch_buffer; // All RPC objects share this buffer. openmv::rpc_i2c_master interface(0x12, 100000); //to make this more robust, consider making address and rate as constructor argument @@ -30,26 +41,26 @@ void setup() { AFMS.begin(); // create with the default frequency 1.6KHz interface.begin(); //communication between ESP and OpenMV - ColorDetect_Setup(); + ColorDetect_Setup(findcolor); Debug_Setup(); PID_Setup(); LIDAR_Setup(); Localization_Setup(); - #ifdef MESH_CPP + #ifdef MESH_H Mesh_Setup(); #endif } -void loop() { +void loop(){ Debug_LoopStart(); - #ifdef MESH_CPP + #ifdef MESH_H MeshUpdate(); #endif /* --------- PAUSE STATE --------- */ - while(pause == 1){ + while(pauseState == 1){ Serial.println("pause"); - #ifdef MESH_CPP + #ifdef MESH_H Mesh_PauseState(); #endif Debug_PauseState(); @@ -66,11 +77,13 @@ void loop() { /* -------- STANDBY STATE -------- */ Debug_StandbyState(); /* ------ END STANDBY STATE ------ */ + + altitude = Localization_Init(); /* --------- INTERRUPTS ---------- */ - altitudeBarrier(); + altitudeBarrier(altitude); - if(insideWindyArea){ + if(insideWindyArea()){ // leave windy area // flip horizontal inputs } @@ -86,7 +99,7 @@ void loop() { if(goalFind){ // Ball captured and Goal found Debug_GoalFound(); PID_GoalFound(tx/1.00, ty/1.00); - Localization_GoalFound(); + Localization_GoalFound(altitude); Propulsion_GoalFound(); } else { // Ball captured but Goal not found @@ -97,6 +110,7 @@ void loop() { else { // Ball not captured if(ballDetect) { // Ball not captured but detected Debug_BallDetected(); + Localization_BallDetected(); PID_BallDetected(x/1.00, y/1.00); Propulsion_BallDetected(); } @@ -116,3 +130,7 @@ void altitudeBarrier(int altitude){ moveVertical(((ceilingHeight - highHeightBarrier) - altitude)*255/highHeightBarrier); } } + +float insideWindyArea(){ + return 0; +} diff --git a/Code/Control/Main_Code/Mesh.cpp.bkp b/Code/Control/Main_Code/Mesh.h.bkp similarity index 100% rename from Code/Control/Main_Code/Mesh.cpp.bkp rename to Code/Control/Main_Code/Mesh.h.bkp diff --git a/Code/Control/Main_Code/PID.cpp b/Code/Control/Main_Code/PID.h similarity index 85% rename from Code/Control/Main_Code/PID.cpp rename to Code/Control/Main_Code/PID.h index 1cd5a69..fa548ce 100644 --- a/Code/Control/Main_Code/PID.cpp +++ b/Code/Control/Main_Code/PID.h @@ -1,3 +1,9 @@ +#ifndef PID_H +#define PID_H + +#include <string> +#include "Debug.h" +#include "Constants.h" #include <PID_v1.h> double Setpointx, Inputx, Outputx; @@ -9,6 +15,9 @@ double Kpy=2, Kiy=0.1, Kdy=0.25; PID PID_x(&Inputx, &Outputx, &Setpointx, Kpx, Kix, Kdx, DIRECT); PID PID_y(&Inputy, &Outputy, &Setpointy, Kpy, Kiy, Kdy, DIRECT); +// Function Declarations +void Debug_SetPIDConstants(double &p_constant, double &i_constant, double &d_constant, double new_p, double new_i, double new_d); + void PID_Setup(){ Setpointx = 160.0; Setpointy = 120.0; //the values that the PID will try to reach @@ -25,10 +34,10 @@ void PID_GoalFound(int InputxVal, int InputyVal){ PID_x.Compute(); PID_y.Compute(); - Serial.print("Outputx: "); - Serial.println(Outputx); - Serial.print("Outputy: "); - Serial.println(Outputy); +// Serial.print("Outputx: "); +// Serial.println(Outputx); +// Serial.print("Outputy: "); +// Serial.println(Outputy); } void PID_BallDetected(int InputxVal, int InputyVal){ @@ -111,18 +120,8 @@ void setPIDConstants(String msg, double &p_constant, double &i_constant, double } } - //DEBUGGING SECTION - unsigned long t = millis(); - debugPIDConstants(DEBUG_KP, p_constant, new_p); - debugPIDConstants(DEBUG_KI, i_constant, new_i); - debugPIDConstants(DEBUG_KD, d_constant, new_d); - - p_constant = new_p; - i_constant = new_i; - d_constant = new_d; - - while(millis() < t+2000); //debugging LED will light up for 2 seconds - panel.singleLED(DEBUG_KP, 0, 0, 0); - panel.singleLED(DEBUG_KI, 0, 0, 0); - panel.singleLED(DEBUG_KD, 0, 0, 0); + // DEBUGGING SECTION + Debug_SetPIDConstants(p_constant, i_constant, d_constant, new_p, new_i, new_d); } + +#endif diff --git a/Code/Control/Main_Code/Propulsion.cpp b/Code/Control/Main_Code/Propulsion.h similarity index 91% rename from Code/Control/Main_Code/Propulsion.cpp rename to Code/Control/Main_Code/Propulsion.h index 0854722..663c317 100644 --- a/Code/Control/Main_Code/Propulsion.cpp +++ b/Code/Control/Main_Code/Propulsion.h @@ -1,8 +1,15 @@ -#include "Constants.cpp" +#ifndef PROPULSION_H +#define PROPULSION_H + +#include "Constants.h" #include <Adafruit_MotorShield.h> int zero = 0; +// Function Declarations +void moveVertical(int vel); +void moveHorizontal(int vel_hori, int base_speed); + // Create the motor shield object with the default I2C address Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_DCMotor *motor_VL = AFMS.getMotor(2); @@ -75,3 +82,5 @@ void moveHorizontal(int vel_hori, int base_speed){ motor_HL->setSpeed(min(MAX_SPEED, abs(rspeed))); motor_HR->setSpeed(min(MAX_SPEED, abs(lspeed))); } + +#endif diff --git a/Code/Control/Main_Code/utilities.h b/Code/Control/Main_Code/utilities.h index a1ad9ad..cfd5b6b 100644 --- a/Code/Control/Main_Code/utilities.h +++ b/Code/Control/Main_Code/utilities.h @@ -1,8 +1,7 @@ #ifndef UTI_H #define UTI_H -void lab2rgb( float l_s, float a_s, float b_s, float& R, float& G, float& B ); +void lab2rgb(float l_s, float a_s, float b_s, float& R, float& G, float& B ); void translateCodetoThreshold(int code); - #endif -- GitLab