当我的计数器达到值51时,我试图输入一个if语句,然后在if语句中增加计数器,使其永远不再为真:
void imu_raw_handler (const lcm_recv_buf_t *rbuf, const char *channel,
const imu_raw_t *msg, void *userdata) {
for(counter = 1; counter < 51; counter++)
{
gyro_roll = (gyro_roll + gyro_roll_old*(counter-1))/counter;
gyro_pitch = (gyro_pitch + gyro_pitch_old*(counter-1))/counter;
gyro_yaw = (gyro_yaw + gyro_yaw_old*(counter-1))/counter;
accel_x = (accel_x + accel_x_old*(counter-1))/counter;
accel_y = (accel_y + accel_y_old*(counter-1))/counter;
accel_z = (accel_z + accel_z_old*(counter-1))/counter;
}
if (counter == 51){
// set zero points
axo = accel_x;
ayo = accel_y;
azo = accel_z;
gro = gyro_roll;
gpo = gyro_pitch;
gyo = gyro_yaw;
printf("Ready for Takeoff\n");
counter++;
}
}
编辑:我的主要功能如下所示。只要它正在运行,它就应该订阅流主题。我将计数器定义为全局变量。
int main()
{
lcm_t *lcm = lcm_create(NULL);
imu_raw_t_subscribe(lcm, "IMU_RAW", imu_raw_handler, NULL);
// Enter read loop
while (1) {
if(!lcm_handle_timeout(lcm, 1000)) {
printf("Failed read from IMU_RAW channel\n");
}
}
lcm_destroy(lcm);
}
但是这会反复打印我的信息而不是使counter = 52并且再也不会发生。为什么这不起作用?
答案 0 :(得分:1)
问题最有可能存在于这些代码段之外。请检查您是否在其他地方没有打印件。
答案 1 :(得分:0)
问题是因为您在一段时间内调用该函数,并且因为
for(counter = 1; counter < 51; counter++)
计数器将再次变为51(每次调用该函数时),然后将再次输入if (counter == 51)
。
要解决这个问题,你可以声明一个全局变量int ok = 0;
并像这样使用它:
void imu_raw_handler (const lcm_recv_buf_t *rbuf, const char *channel,
const imu_raw_t *msg, void *userdata) {
for(counter = 1; counter < 51; counter++)
{
gyro_roll = (gyro_roll + gyro_roll_old*(counter-1))/counter;
gyro_pitch = (gyro_pitch + gyro_pitch_old*(counter-1))/counter;
gyro_yaw = (gyro_yaw + gyro_yaw_old*(counter-1))/counter;
accel_x = (accel_x + accel_x_old*(counter-1))/counter;
accel_y = (accel_y + accel_y_old*(counter-1))/counter;
accel_z = (accel_z + accel_z_old*(counter-1))/counter;
}
if (ok == 0){ //will enter here once, only if you don't modify the ok anytime
// set zero points
axo = accel_x;
ayo = accel_y;
azo = accel_z;
gro = gyro_roll;
gpo = gyro_pitch;
gyo = gyro_yaw;
printf("Ready for Takeoff\n");
ok = 1; //this will be done once
}
}
我希望这是正确的。
答案 2 :(得分:0)
在for
使用if
变量之前的counter
循环,因此每次循环结束时,counter
将为51
。
我的猜测是循环不应该存在,它似乎没有任何意义。