Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Odrive.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 = 1;
- //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 = 0;
- #include "leddisplay.h"
- #include "shifts.h"
- #include "calibrate.h"
- //END ODRIVE DEPENDECIES
- void setup() {
- pinMode(FLIPPER_01, INPUT_PULLUP);
- pinMode(FLIPPER_02, 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 " << 1.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();
- }
- void loop() {
- // put your main code here, to run repeatedly:
- testMoves();
- shiftme();
- readFlipperOne();
- readFlipperTwo();
- }
- 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;
- FLIPPER_1_STATE = !FLIPPER_1_STATE;
- }
- }
- }
- LAST_FLIPPER_1_STATE = READ_FLIPPER_1;
- }
- void readFlipperTwo ()
- {
- 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 && GO_TO_GEAR > 0)
- {
- //Serial.println("Button 1 did something");
- GO_TO_GEAR -= 1;
- 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(thisGear < 7) {thisGear +=1; }
- }
- if (c == '-')
- {
- //odrive.SetPosition(0, 0);
- if(thisGear > 0) {thisGear -=1; }
- }
- if (c == '2')
- {
- odrive_serial << "r axis" << 0 << ".encoder.pos_estimate\n";
- Serial << odrive.readFloat() << '\t';
- }
- }
- }
- leddisplay.h:
- /*
- * ---|--|--|--|--|---
- * ---1--2--g--3--4---
- *
- * ---|--|--|--|--|---
- * ---5--6--g--7--8
- *
- * 2_
- * 3| |1
- * 4 -
- * 6| |8
- 7-
- 5'
- */
- int led1 = 36;
- int led2 = 37;
- int led3 = 38;
- int led4 = 39;
- int led5 = 40;
- int led6 = 43;
- int led7 = 42;
- int led8 = 41;
- void setupLeds()
- {
- pinMode(led1, OUTPUT);
- pinMode(led2, OUTPUT);
- pinMode(led3, OUTPUT);
- pinMode(led4, OUTPUT);
- pinMode(led5, OUTPUT);
- pinMode(led6, OUTPUT);
- pinMode(led7, OUTPUT);
- pinMode(led8, OUTPUT);
- }
- void ledFullOn()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(100);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, HIGH);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- delay(1000);
- }
- void ledOne()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, HIGH);
- }
- void ledTwo()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, LOW);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, LOW);
- }
- void ledThree()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, LOW);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- }
- void ledFour()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, LOW);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, HIGH);
- }
- void ledFive()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, LOW);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- }
- void ledSix()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, LOW);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- }
- void ledSeven()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, HIGH);
- }
- void ledEight()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- }
- void ledNine()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, HIGH);
- digitalWrite(led8, HIGH);
- }
- void ledZero()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, LOW);
- digitalWrite(led5, HIGH);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, LOW);
- digitalWrite(led8, HIGH);
- }
- void ledA()
- {
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- digitalWrite(led5, LOW);
- digitalWrite(led6, LOW);
- digitalWrite(led7, LOW);
- digitalWrite(led8, LOW);
- delay(10);
- digitalWrite(led1, HIGH);
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led5, HIGH);
- digitalWrite(led6, HIGH);
- digitalWrite(led7, LOW);
- digitalWrite(led8, HIGH);
- }
- shifts.h:
- #define bar_01_shiftPos_01 10000.0
- #define bar_02_shiftPos_01 10000.0
- #define bar_01_shiftPos_02 20000.0
- #define bar_02_shiftPos_02 20000.0
- #define bar_01_shiftPos_03 30000.0
- #define bar_02_shiftPos_03 30000.0
- #define bar_01_shiftPos_04 40000.0
- #define bar_02_shiftPos_04 40000.0
- #define bar_01_shiftPos_05 50000.0
- #define bar_02_shiftPos_05 50000.0
- #define bar_01_shiftPos_06 60000.0
- #define bar_02_shiftPos_06 60000.0
- #define bar_01_shiftPos_07 70000.0
- #define bar_02_shiftPos_07 70000.0
- #define bar_01_shiftPos_08 80000.0
- #define bar_02_shiftPos_08 80000.0
- int shift = 1;
- void shiftme()
- {
- shift = GO_TO_GEAR;
- if (shift == 0) {
- //Serial.println("Moving to gear Reverse");
- ledA();
- odrive.SetPosition(0, bar_01_shiftPos_01);
- odrive.SetPosition(1, bar_02_shiftPos_01);
- shift = -1;
- }
- else if (shift == 1) {
- // Serial.println("Moving to gear Neutral");
- ledZero();
- odrive.SetPosition(0, bar_01_shiftPos_02);
- odrive.SetPosition(1, bar_02_shiftPos_02);
- shift = -1;
- }
- else if (shift == 2) {
- // Serial.println("Moving to gear 1");
- ledOne();
- odrive.SetPosition(0, bar_01_shiftPos_03);
- odrive.SetPosition(1, bar_02_shiftPos_03);
- shift = -1;
- }
- else if (shift == 3) {
- // Serial.println("Moving to gear 2");
- ledTwo();
- odrive.SetPosition(0, bar_01_shiftPos_04);
- odrive.SetPosition(1, bar_02_shiftPos_04);
- shift = -1;
- }
- else if (shift == 4) {
- // Serial.println("Moving to gear 3");
- ledThree();
- odrive.SetPosition(0, bar_01_shiftPos_05);
- odrive.SetPosition(1, bar_02_shiftPos_05);
- shift = -1;
- }
- else if (shift == 5) {
- // Serial.println("Moving to gear 4");
- ledFour();
- odrive.SetPosition(0, bar_01_shiftPos_06);
- odrive.SetPosition(1, bar_02_shiftPos_06);
- shift = -1;
- }
- else if (shift == 6) {
- //Serial.println("Moving to gear 5");
- ledFive();
- odrive.SetPosition(0, bar_01_shiftPos_07);
- odrive.SetPosition(1, bar_02_shiftPos_07);
- shift = -1;
- }
- else if (shift == 7) {
- //Serial.println("Moving to gear 6");
- ledSix();
- odrive.SetPosition(0, bar_01_shiftPos_08);
- odrive.SetPosition(1, bar_02_shiftPos_08);
- shift = -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement