ライントレースできません
Posted: 2011年7月14日(木) 09:59
C言語でライントレースをしたいのですが、黒のライン上をうまく走りません
センサは1つです
センサは1つです
それだけだと、さっぱり分かりません。あ さんが書きました:C言語でライントレースをしたいのですが、黒のライン上をうまく走りません
センサは1つです
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"
#define LIGHT 520
/* OSEK 宣言文 */
/* Declare:宣言 */
DeclareCounter(SysTimerCnt);
DeclareTask(TaskLCD);
/* LEJOS OSEK hooks */
/* OSEK起動時に行う動作 */
void ecrobot_device_initialize()
{
nxt_motor_set_speed(NXT_PORT_A, 0, 1);
nxt_motor_set_speed(NXT_PORT_B, 0, 1);
ecrobot_set_light_sensor_active(NXT_PORT_S1);
}
/* RAN→STOP時に行う動作 */
void ecrobot_device_terminate()
{
nxt_motor_set_speed(NXT_PORT_A, 0, 1);
nxt_motor_set_speed(NXT_PORT_B, 0, 1);
}
/* LEJOS OSEK hook to be invoked from an ISR in category 2 */
/* 1m秒ごとの割り込み処理 */
void user_1ms_isr_type2(void)
{
StatusType ercd;
ercd = SignalCounter(SysTimerCnt); /* Increment OSEK Alarm Counter */
if(ercd != E_OK)
{
ShutdownOS(ercd);
}
}
/*↓*↓*↓*↓*↓*修正を加えるのは以下↓*↓*↓*↓*↓*/
void STEP1();
void STEP2();
void STEP3();
void STEP4();
void STEP5();
int step=1;
/* TaskLCD executed every 1msec */
TASK(TaskLCD)
{
// ステップで処理を分ける
switch(step)
{
case 1:
STEP1();
break;
case 2:
STEP2();
break;
case 3:
STEP3();
break;
case 4:
STEP4();
break;
case 5:
STEP5();
break;
}
/* タスクの終了 */
TerminateTask();
}
void STEP1()
{
if (ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{
nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, 30, 1);
}
else
{nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}
// 最初の動き
// 最初の動きが終わったら
//
// {
// step =3 ;
// }
}
void STEP2()
{ if(ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{ nxt_motor_set_speed(NXT_PORT_A,-30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}
else
{nxt_motor_set_speed(NXT_PORT_A, -30, 1);
nxt_motor_set_speed(NXT_PORT_C, 30, 1);
}
//if (ecrobot_get_light_sensor(NXT_PORT_S1)>=520)
// {
// step = 4;
// }
}
void STEP3()
{ if(ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{
nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}
else
{nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}
// 2個目の動き
// 2個目の動きが終わったら
// if (systick_wait_ms(2000))
// {
// step = 2;
// }
}
void STEP4()
{ if(ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{
nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, 30, 1);
}
else
{nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}//4個目の動き
// 4個目の動きが終わったら
// if (ecrobot_get_light_sensor(NXT_PORT_S1)>=520)
// {
// step = 5 ;
//}
}
void STEP5()
{
if(ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
}
else
{nxt_motor_set_speed(NXT_PORT_A, 30, 1);
nxt_motor_set_speed(NXT_PORT_C, -30, 1);
// if (ecrobot_get_light_sensor(NXT_PORT_S1_)>=520)
// {
// step = 1 ;
//}
}
}if (ecrobot_get_light_sensor(NXT_PORT_S1)<=520)
{
nxt_motor_set_speed(NXT_PORT_A, 30, 0);
nxt_motor_set_speed(NXT_PORT_C, 30,0);
}
else
{nxt_motor_set_speed(NXT_PORT_A, 30, 0);
nxt_motor_set_speed(NXT_PORT_C, -30, 0);
}