Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ||Main.ino
- #include <SoftwareSerial.h>
- #include <ODriveArduino.h>
- //BEGIN ODRIVE DEPENDECIES
- // Printing with stream operator
- template<class T> inline Print& operator <<(Print &obj, T arg) { obj.print(arg); return obj; }
- template<> inline Print& operator <<(Print &obj, float arg) { obj.print(arg, 4); return obj; }
- // Serial to the ODrive
- SoftwareSerial odrive_serial(10, 11); //RX (ODrive TX), TX (ODrive RX)
- int FLIPPER_01 = 9;
- int FLIPPER_02 = 8;
- // ODrive object
- ODriveArduino odrive(odrive_serial);
- int thisGear = 1;
- int NC = 0;
- int IsShifted = true;
- //FLIPPER 01
- int FLIPPER_1_STATE = 0;
- int LAST_FLIPPER_1_STATE = 0;
- int lastDebounceTime_1 = 0;
- int debounceDelay_1 = 0;
- int BUTTON_FLIPPER_1_STATE = 0;
- //FLIPPER 02.
- int FLIPPER_2_STATE = 0;
- int LAST_FLIPPER_2_STATE = 0;
- int lastDebounceTime_2 = 0;
- int debounceDelay_2 = 0;
- int BUTTON_FLIPPER_2_STATE = 0;
- int GO_TO_GEAR = 1;
- bool reverse = false;
- #include "stepper.h"
- #include "leddisplay.h"
- #include "shifts.h"
- #include "calibrate.h"
- int revButton = 44;
- //END ODRIVE DEPENDECIES
- void setup() {
- pinMode(FLIPPER_01, INPUT_PULLUP);
- pinMode(FLIPPER_02, INPUT_PULLUP);
- pinMode(revButton, INPUT_PULLUP);
- setupLeds();
- //BEGIN ODRIVE DEPENDECIES
- odrive_serial.begin(115200); //Odrive Serial port
- Serial.begin(115200); //arduino - pc serial
- while (!Serial) ; // wait for Arduino Serial Monitor to open
- Serial.println("ODriveArduino");
- Serial.println("Setting parameters...");
- for (int axis = 0; axis < 2; ++axis) {
- odrive_serial << "w axis" << axis << ".controller.config.vel_limit " << 8500.0f << '\n'; //FeedRate Limit
- odrive_serial << "w axis" << axis << ".motor.config.current_lim " << 6.0f << '\n'; //Current Limit
- }
- Serial.println("Send the character '0' or '1' to calibrate respective motor");
- Serial.println("Send the character '+' or '-' to shift gears");
- //calibrateO(); //Calibrate Motor 0
- //calibrate1(); //Calibrate Motor 1
- //END ODRIVE DEPENDECIES
- // put your setup code here, to run once:
- ledFullOn();
- ledZero();
- //GO_TO_GEAR = 1;
- }
- void loop() {
- // put your main code here, to run repeatedly:
- testMoves();
- shiftme();
- readFlipperOne();
- readFlipperTwo();
- int Read_Rev_Button = digitalRead(revButton);
- if(Read_Rev_Button == !NC)
- {
- digitalWrite(led5, HIGH);
- }
- else if(Read_Rev_Button == NC)
- {
- digitalWrite(led5, LOW);
- }
- }
- void readFlipperOne ()
- {
- int READ_FLIPPER_1 = digitalRead(FLIPPER_01);
- if(READ_FLIPPER_1 != LAST_FLIPPER_1_STATE)
- {
- lastDebounceTime_1 = millis();
- }
- if ((millis() - lastDebounceTime_1) > debounceDelay_1) {
- if (READ_FLIPPER_1 != BUTTON_FLIPPER_1_STATE)
- {
- BUTTON_FLIPPER_1_STATE = READ_FLIPPER_1;
- if (BUTTON_FLIPPER_1_STATE == NC && GO_TO_GEAR < 7)
- {
- //Serial.println("Button 1 did something");
- GO_TO_GEAR += 1;
- IsShifted = false;
- FLIPPER_1_STATE = !FLIPPER_1_STATE;
- }
- }
- }
- LAST_FLIPPER_1_STATE = READ_FLIPPER_1;
- }
- void readFlipperTwo ()
- {
- int Read_Rev_Button = digitalRead(revButton);
- int READ_FLIPPER_2 = digitalRead(FLIPPER_02);
- if(READ_FLIPPER_2 != LAST_FLIPPER_2_STATE)
- {
- lastDebounceTime_2 = millis();
- }
- if ((millis() - lastDebounceTime_2) > debounceDelay_2) {
- if (READ_FLIPPER_2 != BUTTON_FLIPPER_2_STATE)
- {
- BUTTON_FLIPPER_2_STATE = READ_FLIPPER_2;
- if (BUTTON_FLIPPER_2_STATE == NC)
- {
- //Serial.println("Button 1 did something");
- if(GO_TO_GEAR > 1)
- {
- GO_TO_GEAR -= 1;
- IsShifted = false;
- FLIPPER_2_STATE = !FLIPPER_2_STATE;
- }
- else if(Read_Rev_Button == !NC && GO_TO_GEAR > 0)
- {
- GO_TO_GEAR -= 1;
- reverse = true;
- IsShifted = false;
- FLIPPER_2_STATE = !FLIPPER_2_STATE;
- }
- }
- }
- }
- LAST_FLIPPER_2_STATE = READ_FLIPPER_2;
- }
- ||Calibrate.h
- void calibrateO()
- {
- int requested_state;
- requested_state = ODriveArduino::AXIS_STATE_MOTOR_CALIBRATION;
- Serial << "Axis" << 0 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, true);
- requested_state = ODriveArduino::AXIS_STATE_ENCODER_INDEX_SEARCH;
- Serial << "Axis" << 0 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, true);
- requested_state = ODriveArduino::AXIS_STATE_CLOSED_LOOP_CONTROL ;
- Serial << "Axis" << 0 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, false); // don't wait
- // odrive.save_configuration();
- delay(5);
- Serial.println("Saved Config");
- }
- void calibrate1()
- {
- int requested_state;
- requested_state = ODriveArduino::AXIS_STATE_MOTOR_CALIBRATION;
- Serial << "Axis" << 1 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, true);
- requested_state = ODriveArduino::AXIS_STATE_ENCODER_INDEX_SEARCH;
- Serial << "Axis" << 1 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, true);
- requested_state = ODriveArduino::AXIS_STATE_CLOSED_LOOP_CONTROL ;
- Serial << "Axis" << 1 << ": Requesting state " << requested_state << '\n';
- odrive.run_state(atoi(0), requested_state, false); // don't wait
- //odrive.save_configuration();
- delay(5);
- Serial.println("Saved Config");
- }
- void testMoves()
- {
- if (Serial.available())
- {
- char c = Serial.read();
- if (c == '0')
- {
- calibrateO();
- }
- if (c == '+')
- {
- //odrive.SetPosition(0, 1000);
- if(GO_TO_GEAR < 7) {GO_TO_GEAR +=1; IsShifted = false; Serial.println(GO_TO_GEAR);}
- }
- if (c == '-')
- {
- //odrive.SetPosition(0, 0);
- if(GO_TO_GEAR > 0) {GO_TO_GEAR -=1; IsShifted = false;}
- }
- if (c == '2')
- {
- odrive_serial << "r axis" << 0 << ".encoder.pos_estimate\n";
- Serial << odrive.readFloat() << '\t';
- }
- }
- }
- ||shifts.h
- #define bar_01_shiftPos_01 1000
- #define bar_02_shiftPos_01 1000
- #define bar_01_shiftPos_02 2000
- #define bar_02_shiftPos_02 2000
- #define bar_01_shiftPos_03 3000
- #define bar_02_shiftPos_03 3000
- #define bar_01_shiftPos_04 4000
- #define bar_02_shiftPos_04 4000
- #define bar_01_shiftPos_05 5000
- #define bar_02_shiftPos_05 5000
- #define bar_01_shiftPos_06 6000
- #define bar_02_shiftPos_06 6000
- #define bar_01_shiftPos_07 7000
- #define bar_02_shiftPos_07 7000
- #define bar_01_shiftPos_08 8000
- #define bar_02_shiftPos_08 8000
- int shift = 1;
- void shiftme()
- {
- shift = GO_TO_GEAR;
- if (reverse && !IsShifted) {
- Serial.println("Moving to gear Reverse");
- ledA();
- odrive.SetPosition(0, 0);
- //odrive.SetPosition(1, bar_02_shiftPos_01);
- SetStepperPos(10);
- IsShifted = true;
- reverse = false;
- }
- else if (shift == 1 && !IsShifted) {
- Serial.println("Moving to gear Neutral");
- ledZero();
- odrive.SetPosition(0, 1000);
- //odrive.SetPosition(1, bar_02_shiftPos_02);
- SetStepperPos(20);
- IsShifted = true;
- shift = -1;
- }
- else if (shift == 2 && !IsShifted) {
- Serial.println("Moving to gear 1");
- ledOne();
- odrive.SetPosition(0, 2000);
- //odrive.SetPosition(1, bar_02_shiftPos_03);
- SetStepperPos(30);
- shift = -1;
- IsShifted = true;
- }
- else if (shift == 3 && !IsShifted) {
- Serial.println("Moving to gear 2");
- ledTwo();
- odrive.SetPosition(0, 3000);
- //odrive.SetPosition(1, bar_02_shiftPos_04);
- SetStepperPos(40);
- shift = -1;
- IsShifted = true;
- }
- else if (shift == 4 && !IsShifted) {
- Serial.println("Moving to gear 3");
- ledThree();
- odrive.SetPosition(0, 4000);
- //odrive.SetPosition(1, bar_02_shiftPos_05);
- SetStepperPos(50);
- shift = -1;
- IsShifted = true;
- }
- else if (shift == 5 && !IsShifted) {
- Serial.println("Moving to gear 4");
- ledFour();
- odrive.SetPosition(0, 5000);
- //odrive.SetPosition(1, bar_02_shiftPos_06);
- SetStepperPos(60);
- shift = -1;
- IsShifted = true;
- }
- else if (shift == 6 && !IsShifted) {
- Serial.println("Moving to gear 5");
- ledFive();
- odrive.SetPosition(0, 6000);
- //odrive.SetPosition(1, bar_02_shiftPos_07);
- SetStepperPos(70);
- shift = -1;
- IsShifted = true;
- }
- else if (shift == 7 && !IsShifted) {
- Serial.println("Moving to gear 6");
- ledSix();
- odrive.SetPosition(0, bar_01_shiftPos_08);
- //odrive.SetPosition(1, bar_02_shiftPos_08);
- SetStepperPos(80);
- shift = -1;
- IsShifted = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement