SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

たった5つのルールではじめるC言語開発

改造課題の答え


  • このエントリーをはてなブックマークに追加

 前回の課題の答えです。

  • このエントリーをはてなブックマークに追加

改造1:レディランプをつける

1. 緑のLEDを点灯/消灯する関数をLed.cに追加

 緑のLEDはD3で、接続ポートはPORT_LED_D3と#defineしてありますから、これを使います。

void LedReady( int sw )
{
    if ( sw == LED_ON ){
        PORT_LED_D3 = LEVEL_ON ;
    }
    else{
        PORT_LED_D3 = LEVEL_OFF ;
    }

    return;
}

 led.hにプロトタイプ宣言を追加するのを忘れてはいけません。

void    LedReady( int sw );

2. LedReady()を呼ぶ場所は、MeasureIntervals()の冒頭

 最初の無音安定が確認できたら、スプーンオペレーションの受け付け可能な状態になっているわけですから、WaitInactive()の直後で点灯です。

 また消灯タイミングは。最初の音が入った直後です。ただし、仕事の優先度としてLEDを消すよりもタイマをスタートさせるほうが重要なので、StartTimer()を呼んだあとに消灯します。

WaitInactive( NOCHECK_TIME );   /* 初期無音安定待ち */
    LedReady( LED_ON );         /* 緑LEDを点灯する  */

    WaitSound( NOCHECK_TIME );      /* 最初のパルス待ち */
    StartTimer();               /* 計測タイマを起動する */

    LedReady( LED_OFF );            /* 緑LEDを消灯する  */
    Led( 1, LED_ON );           /* LED1 点灯        */

改造2:最初の4打の点灯パターンを変える

1. LEDの動作をよく考える

 現状から何を変えれば改造パターンになるでしょうか。

 最初の点灯は同じです。次に2番目が点灯したとき,改造後は1番目が消えています。3番目が点灯したとき、今度は2番目と1番目が消えていますが、1番目は2番目が点灯したときにもともと消えているので、わざわざ消す必要があるのは2番目だけです。同様に4番目が点灯したときは3番目を消す必要があります。

 これの一般解を考えると、

  • 1番目点灯時は同じ
  • 2番目~4番目点灯時は,N-1番目のLEDを消灯する

 となります。

 つまり、改造する場所は、2~4番目の点灯をしている部分ということになります。

 そこでMeasureIntervals()を見てみると、ちょうど2~4番目は1つのループで処理していて、

Led( i, LED_ON );   /* 対応するLEDを点灯する    */

 という場所が見つかります。この点灯時に、ひとつ前のLEDを消してやればいいので、

Led( i, LED_ON );   /* 対応するLEDを点灯する    */
    Led( i -1 , LED_OFF );  /* 前回のLEDを消灯する      */

 という記述を追加すれば、目的をはたすことができます。

 以上です。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

NECマイクロシステム株式会社 勤務NPO法人SESSAME 所属開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3734 2009/03/26 17:26

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング