|
|
|
|
#include "AccurateMotor.h"
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::Init()
|
|
|
|
|
{
|
|
|
|
|
car_running = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::SetCarRunning()
|
|
|
|
|
{
|
|
|
|
|
AccurateMotor.car_running = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::SetCarNotRunning()
|
|
|
|
|
{
|
|
|
|
|
AccurateMotor.car_running = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::TurnLeft(uint8_t degree)
|
|
|
|
|
{
|
|
|
|
|
if (car_running)
|
|
|
|
|
return;
|
|
|
|
|
DCMotor.TurnLeft(car_turn_speed, car_turn_speed);
|
|
|
|
|
SetCarRunning();
|
|
|
|
|
MsTimer2::set(degree * turn_multplyer, []()
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
DCMotor.Stop();
|
|
|
|
|
SetCarNotRunning();
|
|
|
|
|
MsTimer2::stop();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
MsTimer2::start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::ForceStop()
|
|
|
|
|
{
|
|
|
|
|
DCMotor.Stop();
|
|
|
|
|
SetCarNotRunning();
|
|
|
|
|
MsTimer2::stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::TurnRight(uint8_t degree)
|
|
|
|
|
{
|
|
|
|
|
if (car_running)
|
|
|
|
|
return;
|
|
|
|
|
DCMotor.TurnRight(car_turn_speed, car_turn_speed);
|
|
|
|
|
SetCarRunning();
|
|
|
|
|
MsTimer2::set(degree * turn_multplyer, []()
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
DCMotor.Stop();
|
|
|
|
|
SetCarNotRunning();
|
|
|
|
|
MsTimer2::stop();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
MsTimer2::start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::RunForward(uint8_t distence)
|
|
|
|
|
{
|
|
|
|
|
if (car_running)
|
|
|
|
|
return;
|
|
|
|
|
DCMotor.Go(car_speed);
|
|
|
|
|
SetCarRunning();
|
|
|
|
|
MsTimer2::set(distence * run_multplyer, []()
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
DCMotor.Stop();
|
|
|
|
|
SetCarNotRunning();
|
|
|
|
|
MsTimer2::stop();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
MsTimer2::start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AccurateMotorClass::IsCarRunning()
|
|
|
|
|
{
|
|
|
|
|
return car_running;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::DelayUntilCarStop()
|
|
|
|
|
{
|
|
|
|
|
while (car_running)
|
|
|
|
|
delay(10);
|
|
|
|
|
delay(100); //<2F><><EFBFBD>壬<EFBFBD><E5A3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>λ<EFBFBD><CEBB>ƫ<EFBFBD><C6AB>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AccurateMotorClass::RunBackward(uint8_t distence)
|
|
|
|
|
{
|
|
|
|
|
if (car_running)
|
|
|
|
|
return;
|
|
|
|
|
DCMotor.Back(car_speed);
|
|
|
|
|
SetCarRunning();
|
|
|
|
|
MsTimer2::set(distence * run_multplyer, []()
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
DCMotor.Stop();
|
|
|
|
|
SetCarNotRunning();
|
|
|
|
|
MsTimer2::stop();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
MsTimer2::start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AccurateMotorClass AccurateMotor;
|