<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>FUJIKOのブログ</title>
<link>https://ameblo.jp/type-b-303/</link>
<atom:link href="https://rssblog.ameba.jp/type-b-303/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>ブログの説明を入力します。</description>
<language>ja</language>
<item>
<title>ロボット</title>
<description>
<![CDATA[ // ////////////////////////////////////////////////////////////////////<br>//                 filename   :  07.c<br>//                 programmer :  MURAKAMI &amp; MOTOKI<br>//                 created on : '09 09.07<br>// ////////////////////////////////////////////////////////////////////<br><br>#include &lt;p30f6014A.h&gt;<br>#include &lt;motor_led/e_epuck_ports.h&gt;<br>#include &lt;motor_led/e_init_port.h&gt;<br>#include &lt;motor_led/e_motors.h&gt;<br>#include &lt;uart/e_uart_char.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>#define        COMSTRLEN        32<br>#define        MAXCOM            2<br><br>#define        ERROR            -1<br>#define        AUTO            0<br>#define        MANUAL            1<br>#define        FORWARD            2<br>#define        BACKWARD        3<br>#define        TURNLEFT        4<br>#define        TURNRIGHT        5<br><br>char *COM[]={"auto", "manual"};<br><br>// ////////////////////////////////////////////////////////////////////<br>int strlength(char str[])<br>{<br>    int i;<br><br>    i=0;<br>    while (str[i]!='\0') i++;<br>    return i;<br>}<br><br>//一致したら1を返す<br>int strcomp(char str1[], char str2[])<br>{<br>    int i, eq;<br><br>    i=0;<br>    eq=0;<br>    do {<br>        if (str1[i]=='\0' &amp;&amp; str2[i]=='\0') { eq=1; break; }<br>        if (str1[i]!=str2[i]) break;<br>        i++;<br>    } while (1);<br>    return eq;<br>}<br><br>void itoa(int dt, int bs, char str[])<br>{<br>    int i, n, dt2;<br><br>    i=0;<br>    if (dt==0) { str[0]='0'; n=1; }<br>    else {<br>        if (dt&lt;0) { dt=-dt; str[0]='-'; i=1; }<br>        n=i; dt2=dt;<br>        while(dt2&gt;0) {dt2=dt2/bs; n++; }<br>        i=1;<br>        while(dt&gt;0) {<br>            str[n-i]=dt%bs+'0';<br>            dt=dt/bs;<br>            i++;<br>        }<br>    }<br>    str[n]='\0';<br>}<br><br>// ////////////////////////////////////////////////////////////////////<br>char get1char(void)<br>{<br>    char dt;<br>    int i;<br><br>    dt=0x00;<br>    for (i=0 ; i&lt;5000 ; i++) {<br>        if (!e_uart1_sending() &amp;&amp; e_ischar_uart1()) {<br>            e_getchar_uart1(&amp;dt);<br>            break;<br>        }<br>    }<br>    if (dt==0x00)for(i=0 ; i&lt;5000 ; i++) asm("nop");<br>    return dt;<br>}<br><br>void getstr(char comstr[])<br>{<br>    char dt;<br>    int i;<br>    int j;<br>    int flag = 0;<br><br>    i=0;<br>    j=0;<br>    do{<br>        for( j = 0 ; j &lt; 50 ; j++ ){<br>            dt=get1char();<br>            if (dt!=0) {<br>                flag = 1;<br>                if (dt==';' || i+1&gt;=COMSTRLEN) {    //行頭復帰 OR 文字列数オーバー<br>                    comstr[i]='\0';<br>                    flag = 2;<br>                    break;<br>                }<br>                else comstr[i]=dt;<br>                i++;<br>            }<br>        }<br>        if( flag == 0 ){<br>            comstr[0] = '\0';<br>            break;<br>        }<br>        if( flag == 2 ){<br>            break;<br>        }<br>        <br>    } while (1);<br>}<br><br>void put1char(char dt)<br>{<br>    e_send_uart1_char(&amp;dt, 1);<br>}<br><br>void putstr(char str[])<br>{<br>    e_send_uart1_char(str, strlength(str));    <br>}<br><br>int get_command(char comstr[])<br>{<br>    int com;<br><br>    for (com=0 ; com&lt;MAXCOM    ; com++) {<br>        if (strcomp(comstr, COM[com])==1){<br>            break;    //命令一致<br>        }<br>    }<br>    if (com&gt;=MAXCOM){    //命令不一致<br>        com=-1;<br>    }<br>    return com;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>/////////////////////////////////////////////////////////////////////////////<br>//関数名    : check<br>//機能          : モード切替確認<br>//引数        : なし<br>//返り値    : モード<br>/////////////////////////////////////////////////////////////////////////////    <br>int check( void )<br>{<br>    int i = 0;<br>    int j = 0;<br>    char comstr[COMSTRLEN];        //入力命令    <br>    int cnum = ERROR;        //命令番号<br>    char numstr[8];            //命令番号<br>    <br>    putstr("check\r\n");<br><br>    getstr(comstr);            //命令取得<br>    cnum = get_command(comstr);    //既存命令参照<br>    itoa(cnum, 10, numstr);        //整数→文字列<br><br>    for( i = 0 ; i &lt;= 400 ; i++ ){<br>        for( j = 0 ; j &lt;= 400 ; j++ ){<br>        }<br>    }<br>    putstr("3\r\n");<br><br>    return cnum;            //自動・手動・エラー（継続）<br>}<br>/////////////////////////////////////////////////////////////////////////////<br>//関数名    : movement<br>//機能          : 基本動作（前進、後退、左右回転）<br>//引数        : operation(動作命令　前進:2 後退:3 左回転:4 右回転:5)<br>//          distance(移動距離　step)<br>//返り値    : なし<br>/////////////////////////////////////////////////////////////////////////////<br>void movement( int operation , int distance )<br>{<br>    int lSpeed = 0;            //左モータスピード<br>    int rSpeed = 0;            //右モータスピード<br><br>    putstr("movement\r\n");<br>    switch( operation ){<br><br>        case FORWARD:<br>        <br>            lSpeed = 1000;<br>            rSpeed = 1000;<br>            break;<br>    <br>        case BACKWARD:<br>        <br>            lSpeed = -1000;<br>            rSpeed = -1000;<br>            break;<br>    <br>        case TURNLEFT:<br>        <br>            lSpeed = -1000;<br>            rSpeed = 1000;<br>            break;<br><br>        case TURNRIGHT:<br>            <br>            lSpeed = 1000;<br>            rSpeed = -1000;<br>            break;<br>    <br>        default:<br>            <br>            break;<br>    <br>    }<br>        <br>            <br>    e_set_steps_left( 0 );        //ステップ数初期化    <br>    e_set_steps_right( 0 );<br><br>    e_set_speed_left( lSpeed );    //モータ速度設定<br>    e_set_speed_right( rSpeed );<br><br>    while( 1 ){            //指定距離分動作させる<br><br>        if( abs( e_get_steps_left() ) == distance ){<br>            break;<br>        }<br>    <br>    }<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br>//関数名    : autoMode<br>//機能          : 競技用動作<br>//引数        : なし<br>//返り値    : モード<br>/////////////////////////////////////////////////////////////////////////////        <br>int autoMode( void )<br>{<br>    putstr("auto\r\n");<br>    /////////////////////////////競技用動作入力領域//////////////////////<br>    ////////////////////////////ここを調節してね！//////////////////////<br>    movement( FORWARD , 17500 );<br>    if( check() == MANUAL ) return MANUAL;<br>    movement( BACKWARD , 2000 );<br>    if( check() == MANUAL ) return MANUAL;<br>    movement( TURNLEFT , 900 );<br>    if( check() == MANUAL ) return MANUAL;<br><br>    ////////////////////////////////////////////////////////////////////<br><br>    return AUTO;<br><br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br>//関数名    : manualMode<br>//機能          : モータ停止<br>//引数        : なし<br>//返り値    : モード<br>/////////////////////////////////////////////////////////////////////////////<br>int manualMode( void )<br>{<br>    putstr("manual\r\n");<br>    e_set_speed_left( 0 );<br>    e_set_speed_right( 0 );<br><br>    if( check() == AUTO ){<br>        return AUTO;<br>    }<br>    else{<br>        return MANUAL;<br>    }<br>}<br>/////////////////////////////////////////////////////////////////////////////<br>//関数名    : main<br>//機能        : ロボット製作実習最終課題<br>//引数        : なし<br>//返り値    : なし<br>///////////////////////////////////////////////////////////////////////////////<br>void main(void)<br>{<br><br>    int flag = MANUAL;    //自動・手動切替<br><br>    e_init_port();<br>    e_init_prox();<br>    e_init_uart1();<br>    e_init_motors();<br>    e_send_uart1_char("Input(send) the command to e-puck.\r\n", 36);<br><br>    while(1) {<br>    <br>        putstr("main\r\n");<br><br>        if( flag == MANUAL ){<br>            flag = manualMode();<br>        }<br>        else if( flag == AUTO ){<br>            flag = autoMode();<br>        }<br>    <br>    }<br>} <br>
]]>
</description>
<link>https://ameblo.jp/type-b-303/entry-10340161809.html</link>
<pubDate>Fri, 11 Sep 2009 10:36:59 +0900</pubDate>
</item>
</channel>
</rss>
