very stupid

Dependencies:   mbed ros_lib_melodic DC_Stepper_Controller_Lib

main_copy.cpp

Committer:
ftppr
Date:
2021-06-17
Revision:
0:52f6905317cb

File content as of revision 0:52f6905317cb:

/*#include "mbed.h"
#include "DC_Motor_Controller.h"

//DigitalIn home_button(D13);     // Button for setting the home button
DC_Motor_PID dc_motor_1(D7, D6, D10, D11, 792); //M1, M2, INA, INB, PPR
DC_Motor_PID dc_motor_2(D4, D5, D9, D8, 792); //M1, M2, INA, INB, PPR
Serial myPC(USBTX, USBRX);  // import serial for the UART attached toUSB
// DigitalOut control_1_1(D7); // control pin on L298N - 1
// DigitalOut control_1_2(D6); // control pin on L298N - 2
// DigitalOut control_2_1(D4); // control pin on L298N - 1
// DigitalOut control_2_2(D5); // control pin on L298N - 2
// PwmOut speed(D6);           // pwm signal for
DigitalOut myLED(LED1);
DigitalIn button(USER_BUTTON);
// DigitalIn valve(D9, PullDown);
DigitalIn firing1(D2);
DigitalIn firing2(D3);
// DigitalOut valve_1 = D12; // valve 1
// DigitalOut valve_2 = D13; // valve 2
void reset(DigitalIn firing_pin, DC_Motor_PID& dc_motor, int forward)
{
    if (forward)
    {
        dc_motor.set_out(1, 0);
    }
    else
    {
        dc_motor.set_out(0, 1);
    }

    myPC.printf("Enter reset, \r\n");
    while (1)
    {
        if (firing_pin == 0)
        {
            myPC.printf("Firing switch detected. Stop. Record reference point %d.\r\n", dc_motor.get_pulse());
            dc_motor.reset();
            dc_motor.set_out(0, 0);
            while (firing_pin == 0)
                ;
            return;
        }
    }
};
float pulse_to_angle(int pulses)
{
    return pulses * 360 / 2 / 792;
}
float angle_to_pulse(int angle)
{
    return angle / 360 * 2 * 792;
}
int main()
{
    // DC_Motor_PID dc_motor_1(D7, D6, D10, D11, 792); //M1, M2, INA, INB, PPR
    // DC_Motor_PID dc_motor_2(D4, D5, D9, D8, 792);   //M1, M2, INA, INB, PPR
    dc_motor_1.reset();
    dc_motor_2.reset();
    // initialize pwm
    // speed.period(0.01);
    // speed = 0.9f;
    // initialize control pins on L298N
    dc_motor_1.reset();
    dc_motor_2.reset();
    myPC.printf("Initialization Finished \n\r");
    myPC.printf("Firing1 is %d, Firing2 is %d, button is %d. \n\r", firing1.read(), firing2.read(), button.read()); // valve omitted
    // open catcher
    // valve_1 = 1;
    // valve_2 = 0; // tentative
    // myPC.printf("Catcher opened. valves are %d%d. \n\r", valve_1, valve_2);

    // Variables
    int ref_pick_1 = 0;
    int ref_pick_2 = 0;
    int angle_long_1 = 0;
    int angle_short_1 = 0; // angles used in phase 1
    int angle_long_2 = 0;
    int angle_short_2 = 0; // angles used in phase 2
    int stage = 0;         // stages for picking arrow
    // Press the user button to start initialization
    while (1)
    {
        if (button == 1)
        {
            while (button == 1)
                ;
            break;
        }
    }

    myPC.printf("=========== Start configuring the long motor ==========\r\n");
    // myPC.printf("motor1 starts to rotate until firing pin is reached.\r\n");
    reset(firing1, dc_motor_1, 1);
    myPC.printf("Motor 1 reset finished. Press button to reset Motor 2.\r\n");
    // if (firing1 == 1)
    // {
    //     myPC.printf("Firing1 switch detected. Stop. Record reference point_1  %d.\r\n", dc_motor_1.get_pulse());
    //     control_1_1 = 0;
    //     control_1_2 = 0;
    //     ref_pick_1 = dc_motor_1.get_pulse(); // stop -> record or reverse????
    //     while (firing1 == 1)
    //         ;
    // }
    while (button == 0)
        ; // idle
    while (button == 1)
        ; // button pressed
    myPC.printf("=========== Start configuring the short motor ==========\r\n");
    // myPC.printf("motor1 starts to rotate until firing pin is reached.\r\n");
    reset(firing2, dc_motor_2, 1);

    // if (firing2 == 1)
    // {
    //     myPC.printf("firing2 switch detected. Stop. Record reference point_2  %d.\r\n", dc_motor_2.get_pulse());
    //     control_2_1 = 0;
    //     control_2_2 = 0;
    //     ref_pick_2 = dc_motor_2.get_pulse(); // stop -> record or reverse????
    //     while (firing2 == 1)
    //         ;
    // }

    myPC.printf("=========== Initialization finished. Press user button to pick up arrows ==========\r\n");

    while (1)
    {
        if (button == 1)
        {
            myPC.printf("Start picking up arrows\r\n");
            while (button == 1)
                ;
            if (stage == 0)
            {
                myPC.printf("Begin stage 1\r\n");
                myPC.printf("Rotating long one for % degree. \r\n", angle_long_1);
                myPC.printf("Current angle is %.4f, target angle is %.4f. \r\n", pulse_to_angle(dc_motor_1.get_pulse()), pulse_to_angle(dc_motor_1.get_pulse()) + angle_long_1);
                dc_motor_1.move_angle(angle_long_1);
                myPC.printf("Rotating short one for % degree. \r\n", angle_short_1);
                myPC.printf("Current angle is %.4f, target angle is %.4f. \r\n", pulse_to_angle(dc_motor_2.get_pulse()), pulse_to_angle(dc_motor_2.get_pulse()) + angle_short_1);
                dc_motor_2.move_angle(angle_short_1);
                stage++;
                myPC.printf("Finished stage 1\r\n");
            }
            else if (stage == 1)
            {
                myPC.printf("Begin stage 2\r\n");
                myPC.printf("Rotating long one for % degree. \r\n", angle_long_2);
                myPC.printf("Current angle is %.4f, target angle is %.4f. \r\n", pulse_to_angle(dc_motor_1.get_pulse()), pulse_to_angle(dc_motor_1.get_pulse()) + angle_long_2);
                dc_motor_1.move_angle(angle_long_2);
                myPC.printf("Rotating short one for % degree. \r\n", angle_short_1);
                myPC.printf("Current angle is %.4f, target angle is %.4f. \r\n", pulse_to_angle(dc_motor_2.get_pulse()), pulse_to_angle(dc_motor_2.get_pulse()) + angle_short_2);
                dc_motor_2.move_angle(angle_short_2);
                stage++;
                myPC.printf("Finished stage 2\r\n");
            }
        }

        // another button for controlling the valve
        // if(valve == 0)
        // {

        //     valve_1 = 1 - valve_1;
        //     valve_2 = 1 - valve_2;
        //     myPC.printf("Change catcher state. %d%d.\r\n", valve_1, valve_2);
        //     while (valve)
        //         ;
        // }
        // if finished one process, reset
        if (stage > 1)
        {
            myPC.printf("=========== Start resetting the long motor ==========\r\n");
            reset(firing1, dc_motor_1, 0); // forward = 0 -> rotate backward
            myPC.printf("Motor 1 reset finished. Press button to reset Motor 2.\r\n");
            myPC.printf("=========== Start resetting the short motor ==========\r\n");
            reset(firing2, dc_motor_2, 0);
            myPC.printf("=========== Resetting finished. Press user button to pick up arrows ==========\r\n");
            stage = 0;
        }
    }
}*/