Main Program
Dependencies: mbed AQM1602 HMC6352 PID
main_processing/strategy_parts/output.cpp
- Committer:
- lilac0112_1
- Date:
- 2016-02-25
- Revision:
- 45:c23f25c00d0d
- Parent:
- 34:69bdf29a4442
File content as of revision 45:c23f25c00d0d:
#include "mbed.h" #include "extern.h" //pid&cmps void PidUpdate(void) { pid.setSetPoint(REFERENCE + data.FrontDeg); data.cmps = hmc.sample()/10.0; data.InputPID = fmod((data.cmps+data.CmpsDiff+720.0), 360.0);//0<data.cmps<359.0 pid.setProcessValue(data.InputPID); data.OutputPID = -pid.compute(); } void ValidPidUpdate(void){ if(data.PidFlag==0){ data.PidFlag=1; } } //motor void ValidTx_motor(void){ if(data.MotorFlag==0){ data.MotorFlag=1; } } void tx_motor(){//モーターへの送信 array2(speed[1],-speed[0],-speed[2],speed[3]);//右後左無 motor.printf("%s",StringFIN.c_str()); } void move(int vx, int vy, int vs){//三輪オムニの移動(基本の形) uint8_t i; double pwm[4] = {0}; pwm[0] = (double)((vx) + vs); pwm[1] = (double)((-0.5 * vx) + ((sqrt(3.0) / 2.0) * vy) + vs); pwm[2] = (double)((-0.5 * vx) + ((-sqrt(3.0) / 2.0) * vy) + vs); pwm[3] = 0; for(i = 0; i < 4; i++){ if(pwm[i] > 100){ pwm[i] = 100; } else if(pwm[i] < -100){ pwm[i] = -100; } speed[i] = pwm[i]; } data.motorlog[X_AXIS] += vx; data.motorlog[Y_AXIS] += vy; } void move_rectan(int vx, int vy, int vs){//三輪オムニの移動(直交座標指定) move(vx, vy, vs); } void move_polar(int degree, int power, int vs){//三輪オムニの移動(極座標指定) int vx, vy, deg; deg = (degree+5)/10; vx = power*sin(DEG2RAD(deg)); vy = power*cos(DEG2RAD(deg)); move(vx, vy, vs); } void move_mouse(int32_t point[2], int vs){//三輪オムニの移動(マウスでの直交座標指定) int vx,vy; vx = (point[0] - data.mouse[0])/10000; vy = (point[1] - data.mouse[1])/10000; move(vx, vy, vs); } //solenoid void AvailableSolenoid(void){ if(data.KickFlag==0){ data.KickFlag = 1; } } void DriveSolenoid(void){ data.KickFlag = 0; kicker=1; Solenoid_timeout.attach(&SolenoidSignal, .5); } void SolenoidSignal(void){ kicker=0; }