@Pigmon
2018-03-08T16:40:47.000000Z
字数 1896
阅读 1172
慧拓
G29WheelSync.h
G29WheelSync.cpp
类:G29Sync
主要函数:
Sync, PostSync
API:
/*
@Func:
IsInited
@Summary:
是否经过初始化且获取过 state
@Params:
@Return:
Bool
*/
bool G29Sync::IsInited()
/*
@Func:
Sync
@Summary:
将方向盘转角同步到输入的目标转向比例。(通过设置方向盘回弹位置)
每帧调用,如在 Timer, Update, Tick 等函数中调用。单次调用无效
@Params:
_target: 目标转向比例,取值 [-100, 100]. 100: 右转满; -100: 左转满
@Return:
当前方向盘转向,取值 [-100, 100]. 100: 右转满; -100: 左转满
*/
int G29Sync::Sync(const int _target)
/*
@Func:
PostSync
@Summary:
强制结束同步,将方向盘回弹位置回零
@Params:
@Return:
*/
void G29Sync::PostSync() const
/*
@Func:
SyncDone
@Summary:
判断同步是否完成
@Params:
_target: 同步目标
_eps:判断2个角度相等的阈值,默认3
@Return:
True: 完成; False:未完成
*/
bool G29Sync::SyncDone(int _target, int _eps)
/*
@Func:
CurrentState
@Summary:
更新 m_state ; 在 LogiUpdate() 后调用
@Params:
@Return:
m_state : DIJOYSTATE2*
*/
DIJOYSTATE2* G29Sync::CurrentState()
/*
@Func:
CurrentWheelPct
@Summary:
得到当前方向盘转角。取值 [-100, 100]. 100: 右转满; -100: 左转满
@Params:
@Return:
转角:int [-100, 100]
*/
int G29Sync::CurrentWheelPct()
/*
@Func:
WheelAngleToPos
@Summary:
将方向盘[-32767, 32767] 转角 归一化到 [-100, 100]
@Params:
_angle: int ,state.lx
@Return:
转角:int [-100, 100]
*/
int G29Sync::WheelAngleToPos(int _angle)
// 在每帧执行的函数,如 OnTimer, Update, Tick 等
G29Sync::GetInstance()->Sync(target);
// 判断是否同步完成
if (G29Sync::GetInstance()->SyncDone(target)) {
// Do sth.
}
// 进入遥控接管前,将方向盘回复到遥控状态
G29Sync::GetInstance()->PostSync();
#include <iostream>
#include <windows.h>
#include "G29WheelSync.h"
void main()
{
// 1. 在一个持续轮询过程中将方向盘转至左满舵
int counter = 0, target = -100;
int current_wheel = -65535;
while (counter < 10000)
{
counter++;
current_wheel = G29Sync::GetInstance()->Sync(target);
Sleep(10);
if (G29Sync::GetInstance()->SyncDone(target)) {
std::cout << "Sync Over." << std::endl;
break;
}
else {
std::cout << current_wheel << std::endl;
}
}
// 2. 转完后回转至 0,并将方向盘阻力放松。
G29Sync::GetInstance()->PostSync();
// 3. 显示回转过程中的方向盘转角 [-100, 100]
while (!G29Sync::GetInstance()->SyncDone(0, 3))
{
if (LogiUpdate() && G29Sync::GetInstance()->CurrentState())
{
current_wheel = G29Sync::GetInstance()->CurrentWheelPct();
std::cout << current_wheel << std::endl;
}
}
system("pause");
}