Á°¾Ï¤Þ¤Ç¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ï¡¢¾ï¤Ë¥í¥Ü¥Ã¥È¤¬Àû²ó¤·¤Æ¤¤¤ë¤¿¤á¡¢¥¸¥°¥¶¥°¤ËÁö¹Ô¤·¤Æ¤·¤Þ¤¤¡¢¤¢¤Þ¤ê®¤¯¤ÏÁö¤ì¤Þ¤»¤ó¤Ç¤·¤¿¡£
º£²ó¤Ï¤½¤ì¤ò²þÎɤ·¡¢Â®¤¯¡¢°ÂÄꤷ¤¿Áö¤ê¤ò¼Â¸½¤·¤Þ¤·¤ç¤¦¡£
¥í¥Ü¥Ã¥È¤Ï´ðËÜŪ¤Ë¤³¤ì¤Þ¤Ç¤Î¤â¤Î¤ò°ú¤Â³¤»È¤¤¤Þ¤¹¡£
1¡¥ÈæÎãÀ©¸æ
¤³¤ì¤Þ¤Ç¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¿§¤ÎïçÃͤè¤ê°Å¤¤¤È¤¡¢ÌÀ¤ë¤¤¤È¤¡¢¤ÇÀû²óÊý¸þ¤ò»ØÄꤷ¤Æ¤¤¤Þ¤·¤¿¡£
¤·¤«¤·¡¢¸÷¥»¥ó¥µ¤¬¿§¤ÎïçÃÍÉÕ¶á¤òÆÉ¤ß¼è¤Ã¤Æ¤¤¤ë¤È¤¡¢¥í¥Ü¥Ã¥È¤òÂ礤¯Àû²ó¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤òïçÃÍ¡ÊÌÜɸÃ͡ˤ«¤é¤Î¤º¤ì¤ËÈæÎ㤷¤Æ¡¢º¸±¦¤Î²óžº¹¡ÊÀû²óÃ͡ˤ¬Â礤¯¤Ê¤ë¤è¤¦¤Ë¤¹¤ì¤Ð¡¢¥í¥Ü¥Ã¥È¤Ï¤â¤Ã¤È°ÂÄꤷ¤ÆÁö¤ì¤ë¤Ï¤º¤Ç¤¹¡Ê¿Þ¡Ë¡£

¤³¤Î¤è¤¦¤ÊÀ©¸æ¤òÈæÎãÀ©¸æ(PÀ©¸æ)¤È¤¤¤¤¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
¤·¤«¤·¡¢¸÷¥»¥ó¥µ¤¬¿§¤ÎïçÃÍÉÕ¶á¤òÆÉ¤ß¼è¤Ã¤Æ¤¤¤ë¤È¤¡¢¥í¥Ü¥Ã¥È¤òÂ礤¯Àû²ó¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤òïçÃÍ¡ÊÌÜɸÃ͡ˤ«¤é¤Î¤º¤ì¤ËÈæÎ㤷¤Æ¡¢º¸±¦¤Î²óžº¹¡ÊÀû²óÃ͡ˤ¬Â礤¯¤Ê¤ë¤è¤¦¤Ë¤¹¤ì¤Ð¡¢¥í¥Ü¥Ã¥È¤Ï¤â¤Ã¤È°ÂÄꤷ¤ÆÁö¤ì¤ë¤Ï¤º¤Ç¤¹¡Ê¿Þ¡Ë¡£

¤³¤Î¤è¤¦¤ÊÀ©¸æ¤òÈæÎãÀ©¸æ(PÀ©¸æ)¤È¤¤¤¤¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
myrobot_interface.h
#define PORT_LIGHT NXT_PORT_S1 /* Æþ½ÐÎϥݡ¼¥È¤ÎÄêµÁ */ #define PORT_TOUCH NXT_PORT_S2 #define L_MOTOR NXT_PORT_B #define R_MOTOR NXT_PORT_C |
trace_p.c
#include "kernel.h" #include "kernel_id.h" #include "ecrobot_interface.h" #include "myrobot_interface.h" /* ºîÀ®¤·¤¿¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É */ DeclareTask(Task1); /* Task1¤òÀë¸À */ void ecrobot_device_initialize(){ /* OSEKµ¯Æ°»þ¤Î½èÍý */ nxt_motor_set_speed(L_MOTOR,0,0); nxt_motor_set_speed(R_MOTOR,0,0); ecrobot_set_light_sensor_active(PORT_LIGHT); } void ecrobot_device_terminate(){ /* OSEK½ªÎ»»þ¤Î½èÍý */ nxt_motor_set_speed(L_MOTOR,0,0); nxt_motor_set_speed(R_MOTOR,0,0); ecrobot_set_light_sensor_inactive(PORT_LIGHT); } void user_1ms_isr_type2(void){} void sound_beep(){ /* ¥Ó¡¼¥×²»¤òÌĤ餹¥æ¡¼¥¶´Ø¿ô */ ecrobot_sound_tone(600, 2, 50); systick_wait_ms(20); ecrobot_sound_tone(500, 5, 50); systick_wait_ms(50); } void calibration(int *black,int *white,int *center){ /* ïçÃÍÀßÄêÍѥ桼¥¶´Ø¿ô */ while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤µ¶ */ *black=ecrobot_get_light_sensor(PORT_LIGHT); /* ¹õ¤ÎÌÀ¤ë¤µÆÉ¤ß¼è¤ê */ display_clear(0); /* ²èÌÌɽ¼¨ */ display_goto_xy(0, 1); display_string("BLACK="); display_int(*black, 4); display_update(); systick_wait_ms(10); } sound_beep(); systick_wait_ms(1000); while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤µ¶ */ *white=ecrobot_get_light_sensor(PORT_LIGHT); /* Çò¤ÎÌÀ¤ë¤µÆÉ¤ß¼è¤ê */ display_clear(0); /* ²èÌÌɽ¼¨ */ display_goto_xy(0, 1); display_string("WHITE="); display_int(*white, 4); display_update(); systick_wait_ms(10); } sound_beep(); systick_wait_ms(1000); *center=(*black+*white)/2; /* Ãæ´ÖÃÍ»»½Ð */ display_clear(0); display_goto_xy(0, 1); display_string("CENTER="); display_int(*center, 4); display_update(); sound_beep(); systick_wait_ms(1000); } void robot_run(int speed,int turn){ /* ¥í¥Ü¥Ã¥È¤òÁö¤é¤»¤ë¥æ¡¼¥¶´Ø¿ô */ nxt_motor_set_speed(L_MOTOR,speed-turn,1); nxt_motor_set_speed(R_MOTOR,speed+turn,1); } TASK(Task1) { int speed=50; /* ®ÅÙÊÑ¿ô */ float p_gain=1.0; /* P¥²¥¤¥óÊÑ¿ô */ int black,white,center; /* ¿§ÊÑ¿ô */ float turn; /* Àû²óÃÍÊÑ¿ô */ while(1){ calibration(&black,&white,¢er); /* ïçÃÍÀßÄêÍÑ´Ø¿ô¸Æ¤Ó½Ð¤· */ systick_wait_ms(1000); /* 1ÉÃÂÔ¤Ä */ while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤¥¹¥¿¡¼¥È */ display_goto_xy(0, 1); display_string("PUSH START"); display_update(); } systick_wait_ms(10); while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ turn = p_gain * (ecrobot_get_light_sensor(PORT_LIGHT) - center)*100 / (black-white); robot_run(speed, turn); /* Áö¤ë */ } nxt_motor_set_speed(L_MOTOR,0,1); nxt_motor_set_speed(R_MOTOR,0,1); systick_wait_ms(1000); /* 1ÉÃÂÔ¤Ä */ } TerminateTask(); /* ½èÍý½ªÎ» */ } |
¾åµ¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¼°¤Î¤è¤¦¤ËÀû²óÃͤò·×»»¤·¤Æ¤¤¤Þ¤¹¡£

¡¤Î¹à¤ÏÈæÎ㥲¥¤¥ó¤Ç¤¹¡£¾å¤Î¥°¥é¥Õ¤Ç¤Î·¹¤¤òɽ¤·¤Æ¤¤¤Þ¤¹¡£
¢¤Î¹à¤ÏÊк¹¤Ç¤¹¡£½ÐÎÏÃͤ¬¢¤Î¹à¤ËÈæÎ㤹¤ë¤Î¤¬ÈæÎãÀ©¸æ¤Ç¤¹¡£
£¤Î¹à¤ÏÈæÎ㥲¥¤¥ó¤¬1¤Î¤È¤¤ËturnÃͤÎÉý¤¬¡Þ100¤Þ¤Ç¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤¿·¸¿ô¤Ç¤¹¡£
¤³¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Æ¤â¡¢¥í¥Ü¥Ã¥È¤Ï¥¸¥°¥¶¥°¤ËÁö¤Ã¤Æ¤·¤Þ¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤·¤«¤·¡¢Á°¤ÎïçÃͤÇÀ©¸æ¤·¤Æ¤¤¤¿¤â¤Î¤è¤ê¤â¡¢¥í¥Ü¥Ã¥È¤Î¿¶¤ì¤Ï´Ë¤ä¤«¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£
®ÅÙ¤ÈÈæÎ㥲¥¤¥ó¤òŬÀÚ¤ËÀßÄꤹ¤ì¤Ð¡¢¤«¤Ê¤ê°ÂÄꤷ¤ÆÁö¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
ÈæÎ㥲¥¤¥ó¤òÂ礤¯¤·¤¹¤®¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¶Ê¤¬¤ê¤¹¤®¤ë¤Î¤ÇÉÔ°ÂÄê¤Ë¤Ê¤ê¤Þ¤¹¡£
µÕ¤Ë¾®¤µ¤¯¤·¤¹¤®¤ë¤È¡¢¿¶¤ì¤Ï¾®¤µ¤¯¤Ê¤ê¤Þ¤¹¤¬¡¢¥«¡¼¥Ö¤Ê¤É¤¬¶Ê¤¬¤ê¤¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
ŬÀÚ¤ÊÈæÎ㥲¥¤¥ó¤È®Å٤ϡ¢¥³¡¼¥¹¤ä¥í¥Ü¥Ã¥È¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¤Î¤Ç¡¢»î¸³Áö¹Ô¤ò¤·¤ÆÅ¬ÀÚ¤ÊÃͤòõ¤ê¤Þ¤·¤ç¤¦¡£