目次

LCD用ラッパー関数

 Arduinoには、LCDを扱うライブラリが用意されています。

 使う場合は、インクルード指定してから
 ピンアサインを書いておきます。

#include <LiquidCrystal.h>

/* LCD            rs  e D4 D5 D6 D7 */
LiquidCrystal lcd( 2, 3, 4, 5, 6, 7);

 カーソルの位置を決め、文字列を与えれば表示されます。

  lcd.begin( 16, 2 );
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Measure");
  lcd.setCursor(0, 1);
  lcd.print("Hello, world!");

 行と表示文字列をパラメータとして与えれば
 指定行に文字列が表示されるよう、ラッパー
 関数を定義してみると、以下。

/* 2line 16column */
void put_lcd_line(byte lx,char *ptr)
{
  /* judge */
  if ( lx > 1 ) return ;
  /* select line */
  lcd.setCursor(0,lx);
  /* put strings */
  lcd.print( ptr );
}

/* 4line 20column */
void put_lcd_line(byte lx,char *ptr)
{
  /* judge */
  if ( lx > 3 ) return ;
  /* select line */
  lcd.setCursor(0,lx);
  /* put strings */
  lcd.print( ptr );
}

 ラッパー関数を定義すると、初期化関数の内部は
 次のようにまとめられます。

void init_lcd()
{
  /* 20 columns x 4 lines */
  lcd.begin( 20, 4 );
  lcd.clear();
  put_lcd_open();
}

void put_lcd_open()
{
  put_lcd_line(0,"I'm ArduinoMega2560 ");
  put_lcd_line(1,"  Hello , World !   ");
  put_lcd_line(2,"    Otaru           ");
  put_lcd_line(3,"      Hokkaido      ");
}

 ラッパー関数を使ってみると、余計なことを
 考えなくて済むので、コード開発効率が向上
 します。

 LCD表示用にバッファを使うときには、次の
 関数を使い、文字列を指定領域に挿入できる
 ようにしておきます。

void cpy_array(char *sptr,char *dptr)
{
  while ( *sptr != 0 ) {
    /* copy */
    *dptr = *sptr ;
    /* source pointer increment */
    sptr++ ;
    /* source pointer increment */
    dptr++ ;
  }
}

 転送元と転送先に、配列のアドレスを利用するので
 メモリ中に確保した配列であれば、文字を扱う配列
 でも使えるようにしました。

 put_lcd_openは、次のように書換えられます。

void put_lcd_open()
{
  /* clear */
  clr_lcd();
  /* 0 line */
  cpy_array("I'm ArduinoMega2560",line0);
  put_lcd_line(0,line0);
  /* 1 line */
  cpy_array("Hello , World !",line1+2);
  put_lcd_line(1,line1);
  /* 2 line */
  cpy_array("Otaru",line2+4);
  put_lcd_line(2,line2);
  /* 3 line */
  cpy_array("Hokkaido",line3+6);
  put_lcd_line(3,line3);
}

 関数put_lcd_lineは、文字列出力だけに専念できます。


目次

inserted by FC2 system