2015年12月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

最近のトラックバック

« 2011年10月 | トップページ | 2013年8月 »

2012年5月

2012年5月31日 (木)

ArduinoにLCDを信号線3本で繋ぐ (IDE 1.0対応)

 同じタイトルで前に書いた記事のライブラリを、LcdCore使用のIDE1.0以降にも対応させたので、ご紹介します。

 回路は前と変わっていません。

Lcd164_v100

 シフトレジスタの74HC164を使い、Arduinoの使用ポート数を減らしています。また、74HC164のコントロールに使うData線を、LCDのRSとしても使用することでも使用ポートを増やさない工夫になっています。

 ライブラリは以前のものをLcdCoreライブラリ使用タイプに変更しています。IDEは0022, 0023, 1.0, 1.0.1どれでも使えます。

サンプルスケッチ

#include <LcdCore.h>
#include <Lcd74HC164.h>

Lcd74HC164 lcd(2, 3, 4); 

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

今回も標準のLiquidCrystalライブラリを使ったスケッチの一部(includeと変数生成部)を書換えるだけで簡単に使えるようになっています。

Lcd74HC164
Lcd74HC164型の変数を生成します。

【構文】

Lcd74HC164 生成する変数名(data, clock, enable)

【パラメータ】

data: 74HC164のData(A,B)ピンおよび、LCDのRSピンに接続するArduino側のピン番号
clock: 74HC164のCKピンに接続するArduino側のピン番号
enable: LCDのenableピンに接続するArduino側のピン番号

「Lcd74HC164_20120528.zip」をダウンロード

このライブラリを使用するには、下のライブラリも必要になります。

「LcdCore_20120528.zip」をダウンロード

このライブラリの記事はこちらです。

2012年5月28日 (月)

秋月のI2C接続キャラクタLCDモジュールACM1602NIをArduinoで使う

さて、引き続いてですが、最近発売された秋月のI2C接続キャラクタLCDモジュール「ACM1602NI」用のライブラリです。先ほどの分割したLcdCoreライブラリと組み合わせて使います。

「LCD_ACM1602NI_20120528.zip」をダウンロード

スケッチ例

#include <Wire.h>            // Arduino IDE のI2Cライブラリ
#include <LcdCore.h>         // LCDコアライブラリ
#include <LCD_ACM1602NI.h>   // 秋月I2C液晶用のI/Oライブラリ

LCD_ACM1602NI lcd(0xa0); // 0xa0はI2Cアドレス

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

前回同様、スケッチはincludeの定義と変数設定部分の変更だけです。

とりあえず回路図は省略しますので、液晶付属のデータシートなどを参考にしてください。

5/29 追記

参考回路図

Acm1602ni

動作チェックした回路では、プルアップ抵抗(R1,R2)2.2KΩ、コントラスト調整VR 10KΩを使いました。また、電源が3.3VならバックライトLED用に抵抗を付加しなくても基板内の抵抗(15Ω)で十分の様です。

ArduinoのLiquidCrystalライブラリをコア部分とIO部分に分割する。

大分以前の記事になりますが、「ArduinoにLCDを信号線3本で繋ぐ」で、ArduinoのLiquidCrystalライブラリの改造をしました。この時は、丸々LiquidCrystalライブラリをコピーして書換えたのですが、その後未発表ながら、他の接続方式でLCDを駆動するライブラリをいくつか書いてきました。

ところが、この作業、実際に新規にコードを書く部分は少ないものの、もしやマクロ定義でバッティングしないかと、わざわざ定義名をそれそれ書換えて、その作業が結構面倒でした。また、それぞれにコマンドを発行する部分も重複するので何種類かのLCD出力をしたい場合、コードメモリも無駄に消費してしまいます。

そこで、今回、LiquidCrystalライブラリをコア部分とIO部分に分割することにしました。

「LcdCore_20120528.zip」をダウンロード

こちらがコア部分(LCDコマンドの発行部分)のライブラリです。
他のIO部分のライブラリと組み合わせて使い、スケッチ上では「#include <LcdCore.h>」を書く以外には特に何もする必要はありません。

「LCDIO_20120528.zip」をダウンロード

こちらがI/O部分のライブラリです。
このライブラリをLcdCoreライブラリと同時に使うことにより、元のLiquidCrystalライブラリと同様に動作します。

構文、パラメータについては、Arduino 日本語リファレンスの「LiquidCrystal()」をご参照下さい。

スケッチ例

#include <LcdCore.h> // コアライブラリ
#include <LCDIO.h>   // I/Oライブラリ

LCDIO lcd(12, 11, 5, 4, 3, 2); // LiquidCrystal→LCDIO 

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

スケッチもこの様にLiquidCrystalライブラリ使用のものから「#include ~」と「~ lcd(12, 11, 5, 4, 3, 2);」を差し替えるだけでOKです。

« 2011年10月 | トップページ | 2013年8月 »