キーパッド付ディスプレイ

キーパッド付ディスプレイシールドを買ってみた

  

 amazonを物欲モードでくまなく眺めていると、「HiLetgo 1602 LCD キーパッド シールド ボード ブルー バックライトを付」というのがありました。
 これが、うまいこと使えれば、キーパッドがない液晶よりも、キーパッドがついている分、ページを変えることができ、使い勝手がよさそうです。
 次ページに移るようなボタンを自作で追加しようとすると、こんな値段ではとてもできません。
 結果から言うと、これはシールドなので、シリアル インタフェース ボード モジュールさえ必要ありませんでした。
 ですから、キーパッドなしの液晶に、シリアル インタフェース ボード モジュールを追加するのと同じ値段で、キーパッド付きの液晶が手に入る計算になります。
 ただし、後述するように、このシールドは、使うのにちょっと制約が多いです。

とにかく半固定抵抗をぐるぐる回す

 この手の商品についている青色四角の半固定抵抗は、ぐるぐるぐるぐる回さないと、ちょっと回したぐらいでは、変化が全く分かりません。
 表示そのものはきちんとされていても、バックライトが適正でないと、全く文字を見ることはできません
 一番簡単な接続で、「Hello World」などの文字が表示できるはずになったら、まず一番に輝度調節をしましょう。

自由になるポートがほとんどない

ディスプレイ表示1

 どうやって使うのか、資料がない中、分かるまでが大変でした。
 とりあえず、はんだ付け用の穴が開いているところには、ブレッドボード用のコードが差し込めるように、ヘッダをはんだ付けします。
 arduinoへの取り付けは、画面の一番右側のピンが、arduinoの一番下のピンに差し込めるようにかぶせます。
 使えるヘッダは、下のACCやGND、A1~A5。ディスプレイが、D4~D10までを独占してしまいます。D10もディスプレイのバックライトを点灯させるのに使うようで、他の用途に使うと、バックライトが点灯しなくなってしまいます。それでは、このシールドを使う意味が無くなってしまいます。
 D10独占で困るのが、ICPSです。この商品にはICPSのソケットが別途ついているので、それを差し込むのは困らないものの、SSをD10から変更できないものを使おうとすると、D10が重なってうまくいきません。
 写真のSDカードモジュールは、SSをD3に変更してやっと使うことができました。

自由に使えるデジタルピンは2つしかない。

 実は、シリアルインターフェースに、D0、D1を使うようなので、シリアルモニタを使おうとすると、ここを別の用途で使ってしまうと、うまくモニタが表示されません。モニタを使わないのなら、おそらくD0、D1を使ってもなんとかなるのでしょう。
 結局、D0、D1を使わないでおこうとすると、残ったピンは、D2,D3の二つしかありません。
 上の私の写真では、DS18B20の温度モジュールのデータ用にD2、フロッピーモジュールのSSに、D3を使っています。
 これ以上の拡張は無理です。

ICPSソケットは逆さ向き

 ICPSのソケットは、画面表示下側左手が6番ピンのGNDだと思いきや、画面を逆さにして、上が右から123、下の左端が6.GNDでした。こんなもの、何の説明も表示もなしに分かるわきゃあない。

デジタルソケットも段違い

 デジタルソケットの穴も、D0の横には何もなくて、D1の横から。てっきりD0のところは使えないのかと思っていたら、1つずつずれて配線されていました。つまり画面を普通に見て、上の一番右がD0、写真の3つ目に配線しているのがD2です。

A4,A5はSDA,SCL

 A4,A5で、SDA,SCLが使えます。

キーの使い方

Sample Code(Example use of LiquidCrystal library)より

//Sample  using  LiquidCrystal  library
#include  <LiquidCrystal.h>

/*******************************************************
This  program  will  test  the  LCD  panel  and  the  buttons
Mark  Bramwell,  July  2010
********************************************************/

//  select  the  pins  used  on  the  LCD  panel
LiquidCrystal  lcd(8,  9,  4,  5,  6,  7);

//  define  some  values  used  by  the  panel  and  buttons
int  lcd_key          =  0;
int  adc_key_in    =  0;

#define  btnRIGHT    0

#define  btnUP        1

#define  btnDOWN    2

#define  btnLEFT      3

#define  btnSELECT   4

#define  btnNONE   5

//  read  the  buttons
int  read_LCD_buttons()
{
  adc_key_in  =  analogRead(0);            //  read  the  value  from  the  sensor  
  ~//  my  buttons  when  read  are  centered  at  these  valies:  0,  144,  329,  504,  741
  ~//  we  add  approx  50  to  those  values  and  check  to  see  if  we  are  close
  if  (adc_key_in  >  1000)  return  btnNONE;  //  We  make  this  the  1st  option  for  speed  reasons  since  it  will  be  the  most  likely  result
  ~//  For  V1.1  us  this  threshold
  if  (adc_key_in  <  50)      return  btnRIGHT;    
  if  (adc_key_in  <  250)    return  btnUP;  
  if  (adc_key_in  <  450)    return  btnDOWN;  
  if  (adc_key_in  <  650)    return  btnLEFT;  
  if  (adc_key_in  <  850)    return  btnSELECT;    

  ~//  For  V1.0  comment  the  other  threshold  and  use  the  one  below:

/*
  if  (adc_key_in  <  50)     return  btnRIGHT;    
  if  (adc_key_in  <  195)    return  btnUP;  
  if  (adc_key_in  <  380)    return  btnDOWN;  
  if  (adc_key_in  <  555)    return  btnLEFT;  
  if  (adc_key_in  <  790)    return  btnSELECT;      

*/

  return  btnNONE;    //  when  all  others  fail,  return  this…
}

void  setup()
{
  lcd.begin(16,  2);                //  start  the  library
  lcd.setCursor(0,0);
  lcd.print("Push  the  buttons");  //  print  a  simple  message
}
  
void  loop()
{
  lcd.setCursor(9,1);              //  move  cursor  to  second  line  "1"  and  9  spaces  over
  lcd.print(millis()/1000);          //  display  seconds  elapsed  since  power-up

  lcd.setCursor(0,1);              //  move  to  the  begining  of  the  second  line
  lcd_key  =  read_LCD_buttons();    //  read  the  buttons

  switch  (lcd_key)                    //  depending  on  which  button  was  pushed,  we  perform  an  action
  {
      case  btnRIGHT:
          {
          lcd.print("RIGHT  ");
          break;
          }
      case  btnLEFT:
          {
          lcd.print("LEFT      ");
          break;
          }
      case  btnUP:
          {
          lcd.print("UP        ");
          break;
          }
      case  btnDOWN:
          {
          lcd.print("DOWN    ");
          break;
          }
      case  btnSELECT:
          {
          lcd.print("SELECT");
          break;
          }
          case  btnNONE:
          {
          lcd.print("NONE    ");
          break;
          }
  }
}

 このソースを使うと、きちんとキーパッドが使えるはずです。リンク元のソースをコピーして使いましょう。

タイトルとURLをコピーしました