倒立振子へ戻って
#define GYRO_Offset 590
int status = 0;
int x = 0;
float P = 1;
float kp = 0;
float D = 0;
float kd = 0;
int kakudo = 0;
int furuikakudo = 0;
int genzaikakudo =90;
int furuikakudo =0;
task main()
{
SetSensorHTGyro(S4);
int pow =0;
while(true){
if(ButtonPressed(BTNLEFT, false)){
P = P + 0.1 ;
}
if(ButtonPressed(BTNRIGHT, false)){
kp = kp + 0.1 ;
}
status=SensorRaw(IN_4);
NumOut(60,LCD_LINE3,status);
kakudo= (status-GYRO_Offset)/10;//100msごとの数値に直す。
P=(kakudo)*kp;
D=(kakudo-furuikakudo)*kd;
pow = P + D;
NumOut(60,LCD_LINE4,pow);
RotateMotorEx(OUT_AC,20,pow,0,false,false);
Wait(100);
furuikakudo=kakudo;
genzaikakudo(90)+kakkudo
POW=genzaikakudo-kakudo
}
}